public DebugTabletReport(ITabletReport tabletReport) : base(tabletReport)
 {
     this.ReportID   = tabletReport.ReportID;
     this.Position   = tabletReport.Position;
     this.Pressure   = tabletReport.Pressure;
     this.PenButtons = tabletReport.PenButtons;
 }
        private static void HandlePenBinding(DigitizerIdentifier identifier, ITabletReport report)
        {
            if (TipBinding != null)
            {
                float pressurePercent = (float)report.Pressure / identifier.MaxPressure * 100f;

                if (pressurePercent > TipActivationPressure && !TipState)
                {
                    TipBinding.Press();
                }
                else if (pressurePercent <= TipActivationPressure && TipState)
                {
                    TipBinding.Release();
                }
                TipState = pressurePercent > TipActivationPressure;
            }

            for (var penButton = 0; penButton < report.PenButtons.Length; penButton++)
            {
                if (PenButtonBindings.TryGetValue(penButton, out var binding) && binding != null)
                {
                    if (report.PenButtons[penButton] && !PenButtonStates[penButton])
                    {
                        binding.Press();
                    }
                    else if (!report.PenButtons[penButton] && PenButtonStates[penButton])
                    {
                        binding.Release();
                    }
                }
                PenButtonStates[penButton] = report.PenButtons[penButton];
            }
        }
        private void HandlePenBinding(ITabletReport report)
        {
            if (TipBinding != null && TipActivationPressure != 0)
            {
                float pressurePercent = (float)report.Pressure / TabletProperties.MaxPressure * 100f;

                if (pressurePercent >= TipActivationPressure && !TipState)
                {
                    TipBinding.Press();
                }
                else if (pressurePercent < TipActivationPressure && TipState)
                {
                    TipBinding.Release();
                }
                TipState = pressurePercent >= TipActivationPressure;
            }

            for (var penButton = 0; penButton < report.PenButtons.Length; penButton++)
            {
                if (PenButtonBindings.TryGetValue(penButton, out var binding) && binding != null)
                {
                    if (report.PenButtons[penButton] && !PenButtonStates[penButton])
                    {
                        binding.Press();
                    }
                    else if (!report.PenButtons[penButton] && PenButtonStates[penButton])
                    {
                        binding.Release();
                    }
                }
                PenButtonStates[penButton] = report.PenButtons[penButton];
            }
        }
示例#4
0
 public SyntheticTabletReport(ITabletReport report)
 {
     this.Raw        = report.Raw;
     this.ReportID   = report.ReportID;
     this.Position   = report.Position;
     this.Pressure   = report.Pressure;
     this.PenButtons = report.PenButtons;
 }
示例#5
0
        private static IEnumerable <string> GetStringFormat(ITabletReport tabletReport)
        {
            yield return($"ReportID:{tabletReport.ReportID}");

            yield return($"Position:[{tabletReport.Position.X},{tabletReport.Position.Y}]");

            yield return($"Pressure:{tabletReport.Pressure}");

            yield return($"PenButtons:[{string.Join(" ", tabletReport.PenButtons)}]");
        }
示例#6
0
        private static void HandleTabletReport(PenSpecifications pen, ITabletReport report)
        {
            float pressurePercent = (float)report.Pressure / (float)pen.MaxPressure * 100f;

            if (report is IEraserReport eraserReport && eraserReport.Eraser)
            {
                bool threshold = pressurePercent > EraserActivationPressure;
                InvokeBinding(report, EraserBinding, EraserState, threshold);
                EraserState = threshold;
            }
示例#7
0
        private static void HandleTabletReport(DigitizerIdentifier identifier, ITabletReport report)
        {
            float pressurePercent = (float)report.Pressure / (float)identifier.MaxPressure * 100f;

            if (report is IEraserReport eraserReport && eraserReport.Eraser)
            {
                bool threshold = pressurePercent > EraserActivationPressure;
                InvokeBinding(report, EraserBinding, EraserState, threshold);
                EraserState = threshold;
            }
        private void handleTabletReport(ITabletReport tabletReport)
        {
            int buttonCount = tabletReport.PenButtons.Length;
            var buttons     = new ButtonInputEntry <TabletPenButton> [buttonCount];

            for (int i = 0; i < buttonCount; i++)
            {
                buttons[i] = new ButtonInputEntry <TabletPenButton>((TabletPenButton)i, tabletReport.PenButtons[i]);
            }

            enqueueInput(new TabletPenButtonInput(buttons));
        }
示例#9
0
        private static void HandleTabletReport(DigitizerIdentifier identifier, ITabletReport report)
        {
            if (TipBinding != null)
            {
                float pressurePercent = (float)report.Pressure / (float)identifier.MaxPressure * 100f;

                InvokeBinding(report, TipBinding, TipState, pressurePercent > TipActivationPressure);
                TipState = pressurePercent > TipActivationPressure;
            }

            HandleBindingCollection(report, PenButtonStates, report.PenButtons, PenButtonBindings);
        }
示例#10
0
        public void Position(ITabletReport report)
        {
            if (report.ReportID <= TabletProperties.ActiveReportID)
            {
                return;
            }

            var difference = DateTime.Now - _lastReceived;

            if (difference > ResetTime && _lastReceived != DateTime.MinValue)
            {
                _lastReport   = null;
                _lastPosition = null;
            }

            if (_lastReport != null)
            {
                var pos = new Point(report.Position.X - _lastReport.Position.X, report.Position.Y - _lastReport.Position.Y);

                // Normalize (ratio of 1)
                pos.X /= TabletProperties.MaxX;
                pos.Y /= TabletProperties.MaxY;

                // Scale to tablet dimensions (mm)
                pos.X *= TabletProperties.Width;
                pos.Y *= TabletProperties.Height;

                // Sensitivity setting
                pos.X *= XSensitivity;
                pos.Y *= YSensitivity;

                // Translate by cursor position
                pos += GetCursorPosition();

                // Filter
                foreach (var filter in Filters)
                {
                    pos = filter.Filter(pos);
                }

                CursorHandler.SetCursorPosition(pos);
                _lastPosition = pos;
            }

            _lastReport   = report;
            _lastReceived = DateTime.Now;
        }
示例#11
0
 public static string StringFormat(this IDeviceReport report, bool raw)
 {
     if (raw)
     {
         return(BitConverter.ToString(report.Raw).Replace('-', ' '));
     }
     else
     {
         return(report switch
         {
             IAuxReport auxReport =>
             $"AuxButtons:[{String.Join(" ", auxReport.AuxButtons)}]",
             ITabletReport tabletReport =>
             $"ReportID:{tabletReport.ReportID}, " +
             $"Position:[{tabletReport.Position.X},{tabletReport.Position.Y}], " +
             $"Pressure:{tabletReport.Pressure}, " +
             $"PenButtons:[{String.Join(" ", tabletReport.PenButtons)}]",
             _ =>
             $"Raw: {BitConverter.ToString(report.Raw).Replace('-', ' ')}"
         });
示例#12
0
        private void HandleTabletReport(TabletReference tablet, PenSpecifications pen, ITabletReport report)
        {
            float pressurePercent = (float)report.Pressure / (float)pen.MaxPressure * 100f;

            if (report is IEraserReport eraserReport && eraserReport.Eraser)
            {
                Eraser?.Invoke(tablet, report, pressurePercent);
            }
 public abstract void Position(ITabletReport report);
示例#14
0
 public override void UpdateState(ITabletReport report)
 {
     SyntheticReport = new SyntheticTabletReport(report);
     Core.Add(report.Position);
 }