//---------------------------------------------------------------------------- // StylusPlugin2.cs (c) 2005 by Charles Petzold, www.charlespetzold.com //---------------------------------------------------------------------------- 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 StylusPlugin2: IStylusSyncPlugin { Color clr = Color.Black; Control ctrl; int iWidth = 100; int iOffset = 25; Pen pnShadow; Point ptStylus1; public StylusPlugin2(Control ctrl) { this.ctrl = ctrl; Graphics grfx = ctrl.CreateGraphics(); iWidth = (int) (grfx.DpiX / 2.54f); iOffset = iWidth / 4; grfx.Dispose(); } public DataInterestMask DataInterest { get { return DataInterestMask.Packets | DataInterestMask.StylusDown; } } public void StylusDown(RealTimeStylus sender, StylusDownData data) { Graphics grfx = ctrl.CreateGraphics(); ptStylus1 = new Point((int) (grfx.DpiX * data[0] / 2540 + 0.5), (int) (grfx.DpiY * data[1] / 2540 + 0.5)); // Create Pen based on half-transparent bitmap Bitmap bm = new Bitmap(2, 2, grfx); bm.SetPixel(1, 0, clr); bm.SetPixel(0, 1, clr); TextureBrush tbrsh = new TextureBrush(bm); pnShadow = new Pen(tbrsh, iWidth); pnShadow.StartCap = pnShadow.EndCap = LineCap.Round; grfx.Dispose(); } public void Packets(RealTimeStylus sender, PacketsData data) { Graphics grfx = ctrl.CreateGraphics(); grfx.SmoothingMode = SmoothingMode.AntiAlias; for (int i = 0; i < data.Count; i += data.PacketPropertyCount) { Point ptStylus2 = new Point((int) (grfx.DpiX * data[0] / 2540 + 0.5), (int) (grfx.DpiY * data[1] / 2540 + 0.5)); if (ptStylus2 != ptStylus1) { // Draw line with solid-color pen Pen pn = new Pen(clr, iWidth); pn.StartCap = pn.EndCap = LineCap.Round; grfx.DrawLine(pn, ptStylus1, ptStylus2); // Draw line with shadow pen grfx.TranslateTransform(iOffset, iOffset); grfx.DrawLine(pnShadow, ptStylus1, ptStylus2); grfx.TranslateTransform(-iOffset, -iOffset); ptStylus1 = ptStylus2; } } grfx.Dispose(); } public void StylusUp(RealTimeStylus sender, StylusUpData data) {} public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data) {} public void Error(RealTimeStylus sender, ErrorData data) {} public void InAirPackets(RealTimeStylus sender, InAirPacketsData data) {} public void RealTimeStylusDisabled(RealTimeStylus sender, RealTimeStylusDisabledData data) {} public void RealTimeStylusEnabled(RealTimeStylus sender, RealTimeStylusEnabledData data) {} public void StylusButtonDown(RealTimeStylus sender, StylusButtonDownData data) {} public void StylusButtonUp(RealTimeStylus sender, StylusButtonUpData data) {} public void StylusInRange(RealTimeStylus sender, StylusInRangeData data) {} public void StylusOutOfRange(RealTimeStylus sender, StylusOutOfRangeData data) {} public void SystemGesture(RealTimeStylus sender, SystemGestureData data) {} public void TabletAdded(RealTimeStylus sender, TabletAddedData data) {} public void TabletRemoved(RealTimeStylus sender, TabletRemovedData data) {} }