Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/ios/RNCSliderManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,18 @@ - (void)tapHandler:(UITapGestureRecognizer *)gesture {
CGPoint touchPoint = [gesture locationInView:slider];
float rangeWidth = slider.maximumValue - slider.minimumValue;
float sliderPercent = touchPoint.x / slider.bounds.size.width;
slider.lastValue = slider.value;
float value = slider.minimumValue + (rangeWidth * sliderPercent);

[slider setValue:discreteValue(slider, value) animated: YES];



if (slider.onRNCSliderSlidingStart) {
slider.onRNCSliderSlidingStart(@{
@"value": @(slider.lastValue),
});
}

// Trigger onValueChange to address https://github.com/react-native-community/react-native-slider/issues/212
if (slider.onRNCSliderValueChange) {
slider.onRNCSliderValueChange(@{
Expand Down
70 changes: 50 additions & 20 deletions src/windows/SliderWindows/SliderView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,56 +183,86 @@ namespace winrt::SliderWindows::implementation {
m_updating = false;
}

void SliderView::OnValueChangedHandler(winrt::IInspectable const& /*sender*/,
xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& args){

if (!m_updating) {
void SliderView::OnValueChangedHandler( winrt::IInspectable const& /*sender*/,
xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& args )
{
if( !m_updating )
{
m_reactContext.DispatchEvent(
*this,
L"topChange",
[&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept {
[&]( winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter ) noexcept
{
eventDataWriter.WriteObjectBegin();
{
WriteProperty(eventDataWriter, L"value", args.NewValue());
WriteProperty( eventDataWriter, L"value", args.NewValue() );
}
eventDataWriter.WriteObjectEnd();
});
} );
onValueChangeSent = true;
}
}

void SliderView::OnManipulationStartingHandler(winrt::IInspectable const& sender,
xaml::Input::ManipulationStartingRoutedEventArgs const& args) {
if (!m_updating) {
void SliderView::OnManipulationStartingHandler( winrt::IInspectable const& sender,
xaml::Input::ManipulationStartingRoutedEventArgs const& args )
{
if( !m_updating )
{
auto self = sender.try_as<xaml::Controls::Slider>();

m_reactContext.DispatchEvent(
*this,
L"topSlidingStart",
[&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept {
[&]( winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter ) noexcept
{
eventDataWriter.WriteObjectBegin();
{
WriteProperty(eventDataWriter, L"value", self.Value());
WriteProperty( eventDataWriter, L"value", self.Value() );
}
eventDataWriter.WriteObjectEnd();
});
} );

if( onValueChangeSent )
{
m_reactContext.DispatchEvent(
*this,
L"topSlidingComplete",
[&]( winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter ) noexcept
{
eventDataWriter.WriteObjectBegin();
{
WriteProperty( eventDataWriter, L"value", self.Value() );
}
eventDataWriter.WriteObjectEnd();
} );
onSlidingCompleteSent = true;
}
onValueChangeSent = false;
onSlidingStartSent = true;
onSlidingCompleteSent = false;
}
}

void SliderView::OnManipulationCompletedHandler(winrt::IInspectable const& sender,
xaml::Input::ManipulationCompletedRoutedEventArgs const& args) {
if (!m_updating) {

void SliderView::OnManipulationCompletedHandler( winrt::IInspectable const& sender,
xaml::Input::ManipulationCompletedRoutedEventArgs const& args )
{
if( !m_updating && onSlidingCompleteSent == false )
{
auto self = sender.try_as<xaml::Controls::Slider>();

m_reactContext.DispatchEvent(
*this,
L"topSlidingComplete",
[&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept {
[&]( winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter ) noexcept
{
eventDataWriter.WriteObjectBegin();
{
WriteProperty(eventDataWriter, L"value", self.Value());
WriteProperty( eventDataWriter, L"value", self.Value() );
}
eventDataWriter.WriteObjectEnd();
});
} );
onSlidingCompleteSent = true;
onValueChangeSent = false;
}
}

Expand Down
8 changes: 5 additions & 3 deletions src/windows/SliderWindows/SliderView.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
#include "NativeModules.h"

namespace winrt::SliderWindows::implementation {

namespace xaml = winrt::Windows::UI::Xaml;

class SliderView : public SliderViewT<SliderView> {
public:
SliderView(Microsoft::ReactNative::IReactContext const& reactContext);
Expand Down Expand Up @@ -39,9 +39,11 @@ namespace winrt::SliderWindows::implementation {

double m_maxValue, m_minValue;
double m_value;

bool onValueChangeSent, onSlidingStartSent, onSlidingCompleteSent;
};
}

namespace winrt::SliderWindows::factory_implementation {
struct SliderView : SliderViewT<SliderView, implementation::SliderView> {};
}
}