1010using UnityEngine ;
1111using UnityEngine . EventSystems ;
1212using UnityEngine . UI ;
13+ using Pointer = TouchScript . Pointers . Pointer ;
14+ using UnityEngine . Profiling ;
1315
1416namespace TouchScript . Layers . UI
1517{
@@ -62,7 +64,7 @@ public static TouchScriptInputModule Instance
6264 private static TouchScriptInputModule instance ;
6365 private static FieldInfo raycastersProp ;
6466 private static PropertyInfo canvasProp ;
65- private static Dictionary < int , Canvas > raycasterCanvasCache = new Dictionary < int , Canvas > ( ) ;
67+ private static Dictionary < int , Canvas > raycasterCanvasCache = new Dictionary < int , Canvas > ( 10 ) ;
6668
6769 private int refCount = 0 ;
6870 private UIStandardInputModule ui ;
@@ -218,11 +220,7 @@ private void disable()
218220
219221 #endregion
220222
221- #region Event handlers
222-
223- #endregion
224-
225- #region Copypasted code from UI
223+ #region Copy-pasted code from UI
226224
227225 /// <summary>
228226 /// Basically, copied code from UI Input Module which handles all UI pointer processing logic.
@@ -232,9 +230,13 @@ private class UIStandardInputModule
232230 {
233231 protected TouchScriptInputModule input ;
234232
233+ private CustomSampler uiSampler ;
234+
235235 public UIStandardInputModule ( TouchScriptInputModule input )
236236 {
237237 this . input = input ;
238+
239+ uiSampler = CustomSampler . Create ( "[TouchScript] Update UI" ) ;
238240 }
239241
240242 #region Unchanged from PointerInputModule
@@ -243,7 +245,7 @@ public UIStandardInputModule(TouchScriptInputModule input)
243245 private Vector2 m_LastMoveVector ;
244246 private float m_PrevActionTime ;
245247
246- private Dictionary < int , PointerEventData > m_PointerData = new Dictionary < int , PointerEventData > ( ) ;
248+ private Dictionary < int , PointerEventData > m_PointerData = new Dictionary < int , PointerEventData > ( 10 ) ;
247249
248250 public bool IsPointerOverGameObject ( int pointerId )
249251 {
@@ -429,15 +431,24 @@ private void convertRaycast(RaycastHitUI old, ref RaycastResult current)
429431
430432 public virtual void ProcessUpdated ( object sender , PointerEventArgs pointerEventArgs )
431433 {
434+ uiSampler . Begin ( ) ;
435+
432436 var pointers = pointerEventArgs . Pointers ;
433437 var raycast = new RaycastResult ( ) ;
434438 var count = pointers . Count ;
435439 for ( var i = 0 ; i < count ; i ++ )
436440 {
437441 var pointer = pointers [ i ] ;
442+ // Don't update the pointer if it is pressed not over an UI element
443+ if ( ( pointer . Buttons & Pointer . PointerButtonState . AnyButtonPressed ) > 0 )
444+ {
445+ var press = pointer . GetPressData ( ) ;
446+ if ( press . Type != HitData . HitType . UI ) continue ;
447+ }
438448
439449 var over = pointer . GetOverData ( ) ;
440- if ( over . Type != HitData . HitType . UI && over . Type != HitData . HitType . ScreenSpace ) continue ;
450+ // Don't update the pointer if it is not over an UI element
451+ if ( over . Type != HitData . HitType . UI ) continue ;
441452
442453 PointerEventData data ;
443454 GetPointerData ( pointer . Id , out data , true ) ;
@@ -487,18 +498,23 @@ public virtual void ProcessUpdated(object sender, PointerEventArgs pointerEventA
487498 ExecuteEvents . ExecuteHierarchy ( scrollHandler , data , ExecuteEvents . scrollHandler ) ;
488499 }
489500 }
501+
502+ uiSampler . End ( ) ;
490503 }
491504
492505 public virtual void ProcessPressed ( object sender , PointerEventArgs pointerEventArgs )
493506 {
507+ uiSampler . Begin ( ) ;
508+
494509 var pointers = pointerEventArgs . Pointers ;
495510 var count = pointers . Count ;
496511 for ( var i = 0 ; i < count ; i ++ )
497512 {
498513 var pointer = pointers [ i ] ;
499514
500515 var over = pointer . GetOverData ( ) ;
501- if ( over . Type != HitData . HitType . UI && over . Type != HitData . HitType . ScreenSpace ) continue ;
516+ // Don't update the pointer if it is not over an UI element
517+ if ( over . Type != HitData . HitType . UI ) continue ;
502518
503519 PointerEventData data ;
504520 GetPointerData ( pointer . Id , out data , true ) ;
@@ -560,15 +576,23 @@ public virtual void ProcessPressed(object sender, PointerEventArgs pointerEventA
560576 if ( data . pointerDrag != null )
561577 ExecuteEvents . Execute ( data . pointerDrag , data , ExecuteEvents . initializePotentialDrag ) ;
562578 }
579+
580+ uiSampler . End ( ) ;
563581 }
564582
565583 public virtual void ProcessReleased ( object sender , PointerEventArgs pointerEventArgs )
566584 {
585+ uiSampler . Begin ( ) ;
586+
567587 var pointers = pointerEventArgs . Pointers ;
568588 var count = pointers . Count ;
569589 for ( var i = 0 ; i < count ; i ++ )
570590 {
571591 var pointer = pointers [ i ] ;
592+ var press = pointer . GetPressData ( ) ;
593+ // Don't update the pointer if it is was not pressed over an UI element
594+ if ( press . Type != HitData . HitType . UI ) continue ;
595+
572596 var over = pointer . GetOverData ( ) ;
573597
574598 PointerEventData data ;
@@ -611,15 +635,20 @@ public virtual void ProcessReleased(object sender, PointerEventArgs pointerEvent
611635 input . HandlePointerExitAndEnter ( data , currentOverGo ) ;
612636 }
613637 }
638+
639+ uiSampler . End ( ) ;
614640 }
615641
616642 public virtual void ProcessCancelled ( object sender , PointerEventArgs pointerEventArgs )
617643 {
644+ uiSampler . Begin ( ) ;
645+
618646 var pointers = pointerEventArgs . Pointers ;
619647 var count = pointers . Count ;
620648 for ( var i = 0 ; i < count ; i ++ )
621649 {
622650 var pointer = pointers [ i ] ;
651+
623652 var over = pointer . GetOverData ( ) ;
624653
625654 PointerEventData data ;
@@ -648,21 +677,32 @@ public virtual void ProcessCancelled(object sender, PointerEventArgs pointerEven
648677 ExecuteEvents . ExecuteHierarchy ( data . pointerEnter , data , ExecuteEvents . pointerExitHandler ) ;
649678 data . pointerEnter = null ;
650679 }
680+
681+ uiSampler . End ( ) ;
651682 }
652683
653684 public virtual void ProcessRemoved ( object sender , PointerEventArgs pointerEventArgs )
654685 {
686+ uiSampler . Begin ( ) ;
687+
655688 var pointers = pointerEventArgs . Pointers ;
656689 var count = pointers . Count ;
657690 for ( var i = 0 ; i < count ; i ++ )
658691 {
659692 var pointer = pointers [ i ] ;
693+
694+ var over = pointer . GetOverData ( ) ;
695+ // Don't update the pointer if it is not over an UI element
696+ if ( over . Type != HitData . HitType . UI ) continue ;
697+
660698 PointerEventData data ;
661699 GetPointerData ( pointer . Id , out data , true ) ;
662700
663701 if ( data . pointerEnter ) ExecuteEvents . ExecuteHierarchy ( data . pointerEnter , data , ExecuteEvents . pointerExitHandler ) ;
664702 RemovePointerData ( pointer . Id ) ;
665703 }
704+
705+ uiSampler . End ( ) ;
666706 }
667707
668708 #endregion
0 commit comments