Visar inlägg med etikett Surface. Visa alla inlägg
Visar inlägg med etikett Surface. Visa alla inlägg

torsdag, oktober 15, 2009

Multi touch i VS2010

Touch och multi touch är något som har legat mig varmt om hjärtat senaste året. Det hela började med att vi på Connecta köpte ett Microsoft Surface-bord för snart ett år sedan. Redan då pratade Microsoft om vikten av att börja jobba med och lära sig multi touch och nu ser vi Windows 7 och WPF 4.0 komma med inbyggt stöd för multi touch.

I WPF 4.0 har man lagt till ett antal event till UIElement som rör muti touch. De berörda .NET API:er är baserar på native Win32 API som bara är tillgängliga i Windows 7. UIElement är den basklass som definierar kärnan för visuella kontroller för layout, input och events. De event som finns idag (beta 1 av VS2010) är: ManipulationStarted Event, ManipulationCompleted Event, ManipulationDelta Event, ManipulationInertiaStarting Event och ManipulationBoundaryFeedback Event. Som standard får ett UIElement aldrig händelser rörande Manipulation om inte ManipulationMode är satt till ett annat värde än None. Med hjälp av ManipulationMode kan man styra vilken typ av manipuleringar man ska kunna göra på ett objekt. Det kan t ex vara translatera på X och/eller Y-axeln, rotera, eller skala.

I beta 1 av .NET Framework 4.0 finns eventen för manipulering med men det finns inte några WPF-kontroller som använder sig av dem. I kommande versioner kommer det att man enkelt bara slå på touch-kontroller på t ex sliders eller scrollviewers direkt i XAML.

När man fångar ManipulationDelta på ett Window får man ManipulationDeltaEventArgs. Den kan man sedan använda för att ta reda på vilken förändring som har inträffat. Med metoden GetDeltaManipulation får man ut en System.Windows.Input.Manipulation som innehåller all transformationsdata som fanns när eventet inträffade. Den informationen kan man sedan använda för att utföra translateringar på objektet. Lite komplext men ett kodexempel gör det nog enklare att förstå!

Observera att ManipulationDelta aldrig kommer att exekveras med en vanlig mus utan det måste vara något slags touch device. Med hjälp av ett projekt på CodePlex som heter Multi-Touch Vista kan man simulera användandet av flera touchpunkter med vanlig mus eller touch pad.

I xaml-filen lägger jag till en bild i en canvas. Till den kopplar jag en MatrixTransform så att jag sedan kan komma åt den från kod. Jag lägger också till en event handler för ManipulationDelta.

<Window   x:Class="WpfApplication13.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
WindowState="Maximized" ManipulationDelta="Window_ManipulationDelta">
<Window.Resources>
<MatrixTransform x:Key="InitialMatrixTransform">
<MatrixTransform.Matrix>
<Matrix OffsetX="200" OffsetY="200"></Matrix>
</MatrixTransform.Matrix>
</MatrixTransform>
</Window.Resources>
<Canvas>
<Image Width="100" Source="/WpfApplication13;component/Images/Sonicspree.jpg" ManipulationMode="All" RenderTransform="{StaticResource InitialMatrixTransform}" ></Image>
</Canvas>
</Window>

I code behind använder jag ManipulationDelta för att flytta bilden baserat på input:

private void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
var delta = e.GetDeltaManipulation(this);
var image = e.OriginalSource as Image;
var matrix = ((MatrixTransform)image.RenderTransform).Matrix;
var originalCenter = new Point(image.ActualWidth / 2, image.ActualHeight / 2);

//Translate on the x and y-axis
matrix.Translate(delta.Translation.X, delta.Translation.Y);

//Get the new center point and rotate around that based on the delta
var center = matrix.Transform(originalCenter);
matrix.RotateAt(delta.Rotation, center.X, center.Y);
center = matrix.Transform(originalCenter);

//Scale the matrix based on the delta
matrix.ScaleAt(delta.Scale, delta.Scale, center.X, center.Y);

//Apply the new MatrixTransform
image.RenderTransform = new MatrixTransform(matrix);

e.Handled = true;

}
 

Notera de två röda prickarna som symboliserar de två möss jag har koppad till den här datorn. Koden i exemplet är baserat på en video på You Tube som också visar applikationen in action.

MultiTouchVS2010 
 

onsdag, januari 14, 2009

Ny blog!

För några dagar sedan skapade jag en ny blog. Måste också säga att blogger.com är helt lysande!

Den nya bloggen heter Surface Developer. Vad den kommer att handla om känns överflödigt att berätta!

Jag har valt att skriva Surface Developer på engelska av den anledningen att det känns som att det här kan finnas en internationell skara läsare.

Mina första inlägg har handlat om problemen att få Surface SDK´n att fungera på Windows 7 men nu är det klart!

torsdag, januari 08, 2009

Tillbaka!

Första dagen tillbaka efter en ganska lång ledighet över julen vilket har varit otroligt skönt. Omställd till att äta frukost kl 11 var det lite tungt att kliva upp tidigt imorse och försöka få upp barnen i tid till dagis och annat. Men det funkade till slut!

Har medvetet varit så frånkopplad som möjligt under ledigheten och fick börja dagen med att skriva upp en lista med allt som måste göras. Enklaste sättet att ta reda på det är att gå igenom senaste månadens mail och lägga. Tyvärr funkar jag så att det som inte finns i ett mail, det finns inte. Så drygt 800 mail senare känner jag mig lite mera uppdaterad. (nej, jag har inte läst alla idag…)

På listan hamnade saker som att planera lite utbildningar, teamkonferens, skriva till blogginlägg, avsluta personer som tyvärr valt att sluta på Connecta och planera för såna som börjar nästa vecka.

Det verkar dock som att andra har jobbat medan jag varit ledig för det har hänt saker sista veckorna!

Windows Azure
I ett av mina många mail fanns inbjudningskoderna till Windows Azure Services så nu ska det bli kul att testa det på riktigt också. Passande nog har min artikel om Windows Azure, som jag skrivit för Addskills, också publicerats. Den finns med i årets kurskatalog. Där finns också min kollega Hans Sterby med som har skrivit en artikel om F#.

Månadens profil på MSDN
I höstas blev jag intervjuad av Johan Lindfors på Microsoft vilket resulterade i att jag blev månadens profil i december. Grymt kul!

TechDays
Den 17 och 18 mars kommer Microsofts konferens TechDays att hållas i Västerås och under julledigheten har siten fått ett uppdaterat innehåll. Nu finns en hel del av sessionerna och talarna med. Från Connecta får ni hålla utkik efter fyra talare på tre sessioner:
• Varför F# och vad är funktionell programmering? – Hans Sterby
• SharePoint Workflows, experiences from the field – Daniel Karlsson (med Mattias Lindberg från Microsoft)
• Runda gränssnitt i en fyrkantig värld - Hur man kan kombinera styrkan i WPF för rika gränssnitt med Office 2007 – Pelle Johansson & Björn Eriksen
Missa inte chansen att delta i vad jag tror kommer att bli en riktigt bra konferens på (nästan) hemmaplan.

Projectplace
Från januari kommer jag att börja skriva inlägg på Projcetplace blogg. Projectplace har funnits sedan 1998 och erbjuder ett webbaserat projektverktyg. Det är den webbplats jag brukar referera till när man säger att Software As A Service är något nytt. Där kommer jag att skriva om allt möjligt som har med agile och Scrum att göra.

Microsoft Surface!
Nu är det äntligen klart. Vi kommer att beställa ett Surface-bord till Connecta! Mycket mer om detta senare!