12
12
13
13
#include < Windows.Graphics.Interop.h>
14
14
#include < windows.ui.composition.interop.h>
15
+ #include < winrt/Microsoft.ReactNative.Composition.Input.h>
15
16
#include < winrt/Windows.Graphics.DirectX.Direct3D11.h>
16
17
#include < winrt/Windows.UI.Composition.h>
17
18
#include < winrt/Windows.UI.Composition.interactions.h>
@@ -744,14 +745,9 @@ struct CompScrollerVisual : winrt::implements<
744
745
m_interactionTracker.MaxScale (1.0 );
745
746
746
747
m_visualInteractionSource = TTypeRedirects::VisualInteractionSource::Create (m_visual);
747
-
748
- m_visualInteractionSource.PositionXSourceMode (TTypeRedirects::InteractionSourceMode::EnabledWithInertia);
749
- m_visualInteractionSource.PositionYSourceMode (TTypeRedirects::InteractionSourceMode::EnabledWithInertia);
750
748
m_visualInteractionSource.ScaleSourceMode (TTypeRedirects::InteractionSourceMode::Disabled);
751
-
752
- m_visualInteractionSource.ManipulationRedirectionMode (
753
- TTypeRedirects::VisualInteractionSourceRedirectionMode::CapableTouchpadAndPointerWheel);
754
749
m_interactionTracker.InteractionSources ().Add (m_visualInteractionSource);
750
+ UpdateInteractionModes ();
755
751
756
752
auto positionExpression = compositor.CreateExpressionAnimation (L" -tracker.Position" );
757
753
positionExpression.SetReferenceParameter (L" tracker" , m_interactionTracker);
@@ -762,6 +758,44 @@ struct CompScrollerVisual : winrt::implements<
762
758
return m_visual;
763
759
}
764
760
761
+ void OnPointerPressed (
762
+ const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept {
763
+ if constexpr (std::is_same_v<TTypeRedirects, MicrosoftTypeRedirects>) {
764
+ auto pointerDeviceType = args.Pointer ().PointerDeviceType ();
765
+ if (pointerDeviceType == winrt::Microsoft::ReactNative::Composition::Input::PointerDeviceType::Touch) {
766
+ m_visualInteractionSource.TryRedirectForManipulation (args.GetCurrentPoint (args.OriginalSource ()).Inner ());
767
+ }
768
+ }
769
+ }
770
+
771
+ bool Horizontal () const noexcept {
772
+ return m_horizontal;
773
+ }
774
+
775
+ void Horizontal (bool value) noexcept {
776
+ m_horizontal = value;
777
+
778
+ UpdateInteractionModes ();
779
+ }
780
+
781
+ void UpdateInteractionModes () noexcept {
782
+ if (m_isScrollEnabled) {
783
+ m_visualInteractionSource.PositionXSourceMode (
784
+ m_horizontal ? TTypeRedirects::InteractionSourceMode::EnabledWithInertia
785
+ : TTypeRedirects::InteractionSourceMode::Disabled);
786
+ m_visualInteractionSource.PositionYSourceMode (
787
+ m_horizontal ? TTypeRedirects::InteractionSourceMode::Disabled
788
+ : TTypeRedirects::InteractionSourceMode::EnabledWithInertia);
789
+ m_visualInteractionSource.ManipulationRedirectionMode (
790
+ TTypeRedirects::VisualInteractionSourceRedirectionMode::CapableTouchpadAndPointerWheel);
791
+ } else {
792
+ m_visualInteractionSource.PositionXSourceMode (TTypeRedirects::InteractionSourceMode::Disabled);
793
+ m_visualInteractionSource.PositionYSourceMode (TTypeRedirects::InteractionSourceMode::Disabled);
794
+ m_visualInteractionSource.ManipulationRedirectionMode (
795
+ TTypeRedirects::VisualInteractionSourceRedirectionMode::Off);
796
+ }
797
+ }
798
+
765
799
void InsertAt (
766
800
const winrt::Microsoft::ReactNative::Composition::Experimental::IVisual &visual,
767
801
uint32_t index) noexcept {
@@ -796,13 +830,8 @@ struct CompScrollerVisual : winrt::implements<
796
830
}
797
831
798
832
void ScrollEnabled (bool isScrollEnabled) noexcept {
799
- if (isScrollEnabled) {
800
- m_visualInteractionSource.ManipulationRedirectionMode (
801
- TTypeRedirects::VisualInteractionSourceRedirectionMode::CapableTouchpadAndPointerWheel);
802
- } else {
803
- m_visualInteractionSource.ManipulationRedirectionMode (
804
- TTypeRedirects::VisualInteractionSourceRedirectionMode::Off);
805
- }
833
+ m_isScrollEnabled = isScrollEnabled;
834
+ UpdateInteractionModes ();
806
835
}
807
836
808
837
void Opacity (float opacity) noexcept {
@@ -970,6 +999,8 @@ struct CompScrollerVisual : winrt::implements<
970
999
0 });
971
1000
}
972
1001
1002
+ bool m_isScrollEnabled{true };
1003
+ bool m_horizontal{false };
973
1004
bool m_inertia{false };
974
1005
bool m_custom{false };
975
1006
winrt::Windows::Foundation::Numerics::float3 m_targetPosition;
0 commit comments