@ -218,9 +218,16 @@ namespace Avalonia.Input
public static void RemoveScrollGestureInertiaStartingHandler ( Interactive element , EventHandler < ScrollGestureInertiaStartingEventArgs > handler ) = >
element . RemoveHandler ( ScrollGestureInertiaStartingEvent , handler ) ;
private static object? GetCaptured ( RoutedEventArgs ? args )
{
if ( args is not PointerEventArgs pointerEventArgs )
return null ;
return pointerEventArgs . Pointer ? . Captured ? ? pointerEventArgs . Source ;
}
private static void PointerPressed ( RoutedEventArgs ev )
{
if ( ev . Source is null )
if ( GetCaptured ( ev ) is not { } source )
{
return ;
}
@ -228,11 +235,11 @@ namespace Avalonia.Input
if ( ev . Route = = RoutingStrategies . Bubble )
{
var e = ( PointerPressedEventArgs ) ev ;
var visual = ( Visual ) ev . S ource;
var visual = ( Visual ) s ource;
if ( s_gestureState ! = null )
{
if ( s_gestureState . Value . Type = = GestureStateType . Holding & & ev . S ource is Interactive i )
if ( s_gestureState . Value . Type = = GestureStateType . Holding & & s ource is Interactive i )
{
i . RaiseEvent ( new HoldingRoutedEventArgs ( HoldingState . Cancelled , s_lastPressPoint , s_gestureState . Value . Pointer . Type , e ) ) ;
}
@ -246,8 +253,8 @@ namespace Avalonia.Input
if ( e . ClickCount % 2 = = 1 )
{
s_gestureState = new GestureState ( GestureStateType . Pending , e . Pointer ) ;
s_lastPress . SetTarget ( ev . S ource) ;
s_lastPressPoint = e . GetPosition ( ( Visual ) ev . S ource) ;
s_lastPress . SetTarget ( s ource) ;
s_lastPressPoint = e . GetPosition ( ( Visual ) s ource) ;
s_holdCancellationToken = new CancellationTokenSource ( ) ;
var token = s_holdCancellationToken . Token ;
var settings = ( ( IInputRoot ? ) visual . GetVisualRoot ( ) ) ? . PlatformSettings ;
@ -256,7 +263,7 @@ namespace Avalonia.Input
{
DispatcherTimer . RunOnce ( ( ) = >
{
if ( s_gestureState ! = null & & ! token . IsCancellationRequested & & e . S ource is InputElement i & & GetIsHoldingEnabled ( i ) & & ( e . Pointer . Type ! = PointerType . Mouse | | GetIsHoldWithMouseEnabled ( i ) ) )
if ( s_gestureState ! = null & & ! token . IsCancellationRequested & & s ource is InputElement i & & GetIsHoldingEnabled ( i ) & & ( e . Pointer . Type ! = PointerType . Mouse | | GetIsHoldWithMouseEnabled ( i ) ) )
{
s_gestureState = new GestureState ( GestureStateType . Holding , s_gestureState . Value . Pointer ) ;
i . RaiseEvent ( new HoldingRoutedEventArgs ( HoldingState . Started , s_lastPressPoint , s_gestureState . Value . Pointer . Type , e ) ) ;
@ -267,8 +274,8 @@ namespace Avalonia.Input
else if ( e . ClickCount % 2 = = 0 & & e . GetCurrentPoint ( visual ) . Properties . IsLeftButtonPressed )
{
if ( s_lastPress . TryGetTarget ( out var target ) & &
target = = e . S ource & &
e . S ource is Interactive i )
target = = s ource & &
s ource is Interactive i )
{
s_gestureState = new GestureState ( GestureStateType . DoubleTapped , e . Pointer ) ;
i . RaiseEvent ( new TappedEventArgs ( DoubleTappedEvent , e ) ) ;
@ -283,10 +290,12 @@ namespace Avalonia.Input
{
var e = ( PointerReleasedEventArgs ) ev ;
var source = GetCaptured ( ev ) ;
if ( s_lastPress . TryGetTarget ( out var target ) & &
target = = e . Source & &
e . InitialPressMouseButton is MouseButton . Left or MouseButton . Right & &
e . S ource is Interactive i )
target = = s ource & &
e . InitialPressMouseButton is MouseButton . Left or MouseButton . Right & &
s ource is Interactive i )
{
var point = e . GetCurrentPoint ( ( Visual ) target ) ;
var settings = ( ( IInputRoot ? ) i . GetVisualRoot ( ) ) ? . PlatformSettings ;
@ -325,9 +334,10 @@ namespace Avalonia.Input
if ( ev . Route = = RoutingStrategies . Bubble )
{
var e = ( PointerEventArgs ) ev ;
var source = GetCaptured ( e ) ;
if ( s_lastPress . TryGetTarget ( out var target ) )
{
if ( e . Pointer = = s_gestureState ? . Pointer & & ev . S ource is Interactive i )
if ( e . Pointer = = s_gestureState ? . Pointer & & s ource is Interactive i )
{
var point = e . GetCurrentPoint ( ( Visual ) target ) ;
var settings = ( ( IInputRoot ? ) i . GetVisualRoot ( ) ) ? . PlatformSettings ;