From 7c9ed8ac36c60aff519d15726f4e9cfccca41636 Mon Sep 17 00:00:00 2001 From: Nick Kovalsky Date: Mon, 2 Dec 2024 00:22:07 +0300 Subject: [PATCH 1/3] Update github_uploadnugets.bat --- dev/github_uploadnugets.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/github_uploadnugets.bat b/dev/github_uploadnugets.bat index 3eca5ab..2bb250d 100644 --- a/dev/github_uploadnugets.bat +++ b/dev/github_uploadnugets.bat @@ -13,7 +13,7 @@ REM Define the source directory for the packages set "source_dir=E:\Nugets" REM Define the list of file masks for the packages -set "mask[1]=AppoMobi.Maui.Gestures.1.9.1.1*.*nupkg" +set "mask[1]=AppoMobi.Maui.Gestures.1.9.2.5*.*nupkg" set "mask_count=1" REM Loop through each file mask From 6ccab7470eec70204ec138e4755076f31db1fce8 Mon Sep 17 00:00:00 2001 From: Nick Kovalsky Date: Tue, 31 Dec 2024 10:22:12 +0300 Subject: [PATCH 2/3] 1.9.3.1 --- src/AppoMobi.Maui.Gestures.csproj | 13 ++++-- src/Platforms/Windows/TouchEffect.Windows.cs | 4 +- src/TouchActionEventArgs.cs | 44 +++++++------------- 3 files changed, 27 insertions(+), 34 deletions(-) diff --git a/src/AppoMobi.Maui.Gestures.csproj b/src/AppoMobi.Maui.Gestures.csproj index e122449..6ba3183 100644 --- a/src/AppoMobi.Maui.Gestures.csproj +++ b/src/AppoMobi.Maui.Gestures.csproj @@ -6,23 +6,28 @@ net8.0-android34.0; net8.0-ios17.0; net8.0-maccatalyst17.0; + net9.0; + net9.0-android; + net9.0-ios; + net9.0-maccatalyst; - $(TargetFrameworks);net8.0-windows10.0.19041.0; - true + $(TargetFrameworks);net8.0-windows10.0.19041.0;net9.0-windows10.0.19041.0; + + true true enable - 14.2 14.0 21.0 10.0.17763.0 10.0.17763.0 true + - 1.9.2.5 + 1.9.3.1 AppoMobi.Maui.Gestures Gestures effect and helpers for .NET MAUI MIT diff --git a/src/Platforms/Windows/TouchEffect.Windows.cs b/src/Platforms/Windows/TouchEffect.Windows.cs index a2b1eb5..6e8707b 100644 --- a/src/Platforms/Windows/TouchEffect.Windows.cs +++ b/src/Platforms/Windows/TouchEffect.Windows.cs @@ -1,7 +1,7 @@ -using Microsoft.Maui.Controls.Platform; +using System.ComponentModel; +using Microsoft.Maui.Controls.Platform; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Input; -using System.ComponentModel; namespace AppoMobi.Maui.Gestures { diff --git a/src/TouchActionEventArgs.cs b/src/TouchActionEventArgs.cs index eeb7df5..2a81b4d 100644 --- a/src/TouchActionEventArgs.cs +++ b/src/TouchActionEventArgs.cs @@ -60,37 +60,35 @@ public static PointF GetVelocity(TouchActionEventArgs current, TouchActionEventA if (current.Distance.Delta.X == 0 && current.Distance.Delta.Y == 0 && (current.Type == TouchActionType.Released || current.Type == TouchActionType.Cancelled || current.Type == TouchActionType.Exited)) { - //we gonna recalc velocity based on this event time, usually this is the case of finger released + // maybe finger released + var prevDeltaSecondsX = previous.Distance.Velocity.X != 0 ? previous.Distance.Delta.X / previous.Distance.Velocity.X : 0; + var prevDeltaSecondsY = previous.Distance.Velocity.Y != 0 ? previous.Distance.Delta.Y / previous.Distance.Velocity.Y : 0; - var prevDeltaSeconds = 0.0f; - var prevDeltaSecondsX = previous.Distance.Delta.X / previous.Distance.Velocity.X; - var prevDeltaSecondsY = previous.Distance.Delta.Y / previous.Distance.Velocity.Y; + var prevDeltaSeconds = !double.IsNaN(prevDeltaSecondsX) ? prevDeltaSecondsX : prevDeltaSecondsY; - if (!double.IsNaN(prevDeltaSecondsX)) - { - prevDeltaSeconds = prevDeltaSecondsX; - } - else - if (!double.IsNaN(prevDeltaSecondsY)) + deltaDistance = new(previous.Distance.Delta.X, previous.Distance.Delta.Y); + deltaSeconds = (float)((current.Timestamp - previous.Timestamp).TotalSeconds + prevDeltaSeconds); + if (deltaSeconds > 0) { - prevDeltaSeconds = prevDeltaSecondsY; + velocity = new PointF(deltaDistance.X / deltaSeconds, deltaDistance.Y / deltaSeconds); } - deltaDistance = new(previous.Distance.Delta.X, previous.Distance.Delta.Y); - deltaSeconds = (float)((current.Time - previous.Time).TotalMilliseconds / 1000.0f + prevDeltaSeconds); - velocity = new PointF(deltaDistance.X / deltaSeconds, deltaDistance.Y / deltaSeconds); - - //Debug.WriteLine($"[V-LAST] {current.Type} distance {deltaDistance.Y:0.0} time {deltaSeconds:0.000} => {velocity.Y}"); } else { deltaDistance = new(current.Distance.Delta.X, current.Distance.Delta.Y); - deltaSeconds = (float)((current.Time - previous.Time).TotalMilliseconds / 1000.0f); - velocity = new PointF(deltaDistance.X / deltaSeconds, deltaDistance.Y / deltaSeconds); + deltaSeconds = (float)((current.Timestamp - previous.Timestamp).TotalSeconds); + if (deltaSeconds > 0) + { + velocity = new PointF(deltaDistance.X / deltaSeconds, deltaDistance.Y / deltaSeconds); + } } } + //Trace.WriteLine(previous != null ? $"[G] {velocity.Y} {previous.Type}" : $"[G] {velocity.Y} NULL"); + return velocity; } + /// /// Using Distance.Delta and Time of previous args /// @@ -106,28 +104,18 @@ public TouchActionEventArgs(long id, TouchActionType type, object elementBindingContext) { Id = id; - Time = DateTime.Now; Type = type; Location = location; Context = elementBindingContext; Distance = new DistanceInfo(); } - public DateTime Time { get; private set; } - public TouchActionEventArgs() { - Time = DateTime.Now; Distance = new DistanceInfo(); } - - public PointF GetScaledLocation(float scale) - { - return new PointF(Location.X * scale, Location.Y * scale); - } - public long Id { private set; get; } /// From 0b121ec2a966e7b002a4357f3d48213a23f0b16c Mon Sep 17 00:00:00 2001 From: Nick Kovalsky Date: Tue, 31 Dec 2024 10:24:42 +0300 Subject: [PATCH 3/3] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1cb2e07..98e160e 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ Library for .NET MAUI to handle gestures. Can be consumed in Xaml and code-behin This library is used by [DrawnUI for .NET MAUI](https://github.com/taublast/DrawnUi.Maui). -## What's New - 1.9.2.5 +## What's New - 1.9.3.1 -* Fixed crash on iOS targeting less than v18. -* Compiled for .NET 8 +* Velocity calculation optimized +* Compiled for both .NET 8 and 9. ## Features