using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; using Microsoft.StylusInput; using Microsoft.StylusInput.PluginData; class TransformerStylusPlugin : IStylusSyncPlugin { // // Initialization public TransformerStylusPlugin(Matrix transform) { // Retain a value-copy of the matrix. this.xform = transform.Clone(); } // // Implementation Matrix xform; private void ModifyPacketData(StylusDataBase data) { // Apply the transform to the array of points. int n = data.Count/data.PacketPropertyCount; Point[] points = new Point[n]; for (int i=0; i < n ; ++i) { int srcOffset = i*data.PacketPropertyCount; // Packet data always has X followed by Y followed by...? int x = data[srcOffset]; int y = data[srcOffset+1]; points[i] = new Point(x,y); } xform.TransformPoints(points); for (int i=0; i < n ; ++i) { int srcOffset = i*data.PacketPropertyCount; // Packet data always has X followed by Y followed by...? data[srcOffset] = points[i].X; data[srcOffset+1] = points[i].Y; } } // // Interface public DataInterestMask DataInterest { get { return DataInterestMask.StylusDown | DataInterestMask.Packets | DataInterestMask.StylusUp | DataInterestMask.Error; } } public void StylusDown(RealTimeStylus sender, StylusDownData data) { ModifyPacketData(data); } public void Packets(RealTimeStylus sender, PacketsData data) { ModifyPacketData(data); } public void StylusUp(RealTimeStylus sender, StylusUpData data) { ModifyPacketData(data); } public void Error(RealTimeStylus sender, ErrorData data) { System.Diagnostics.Debug.Assert(false, null, "An RTS error occurred. DataId=" + data.DataId + ", " + "Exception=" + data.InnerException); } // The remaining interface methods are not used in this sample application. public void RealTimeStylusDisabled(RealTimeStylus sender, RealTimeStylusDisabledData data) {} public void RealTimeStylusEnabled(RealTimeStylus sender, RealTimeStylusEnabledData data){} public void StylusOutOfRange(RealTimeStylus sender, StylusOutOfRangeData data) {} public void StylusInRange(RealTimeStylus sender, StylusInRangeData data) {} public void StylusButtonDown(RealTimeStylus sender, StylusButtonDownData data) {} public void StylusButtonUp(RealTimeStylus sender, StylusButtonUpData data) {} public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data){} public void SystemGesture(RealTimeStylus sender, SystemGestureData data){} public void InAirPackets(RealTimeStylus sender, InAirPacketsData data){} public void TabletAdded(RealTimeStylus sender, TabletAddedData data){} public void TabletRemoved(RealTimeStylus sender, TabletRemovedData data) {} }