From de4ad2abb3416550163fc58747e39082aff87927 Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:06:29 -0700 Subject: [PATCH 1/7] chore: fix entry point --- package/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/package.json b/package/package.json index d3f758c2..65b52bb3 100644 --- a/package/package.json +++ b/package/package.json @@ -8,7 +8,7 @@ "publishConfig": { "access": "public" }, - "main": "dist/Slider.js", + "main": "src/Slider.tsx", "types": "typings/index.d.ts", "keywords": [ "react-native", From 5c78e072a5c2197596c8c7da47c131972ecabeb5 Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:16:51 -0700 Subject: [PATCH 2/7] feat: slider height props --- package/src/RNCSliderNativeComponent.ts | 3 +++ package/src/Slider.tsx | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/package/src/RNCSliderNativeComponent.ts b/package/src/RNCSliderNativeComponent.ts index c63f8d5e..d3da0289 100644 --- a/package/src/RNCSliderNativeComponent.ts +++ b/package/src/RNCSliderNativeComponent.ts @@ -40,6 +40,9 @@ export interface NativeProps extends ViewProps { value?: Float; lowerLimit?: Float; upperLimit?: Float; + sliderHeight?: Double; + sliderCornerRoundness?: Double; + thumbnailSize?: Double; } export default codegenNativeComponent('RNCSlider', { diff --git a/package/src/Slider.tsx b/package/src/Slider.tsx index a18185de..75d991c2 100644 --- a/package/src/Slider.tsx +++ b/package/src/Slider.tsx @@ -38,6 +38,22 @@ type WindowsProps = Readonly<{ vertical?: boolean; }>; + +type AndroidProps = Readonly<{ + /** + * modifies slider height. Android only. + */ + sliderHeight?: number; + /** + * modifies slider corner roundness. Android only. + */ + sliderCornerRoundness?: number; + /** + * modifies thumb size. Android only. + */ + thumbnailSize?: number; +}>; + type IOSProps = Readonly<{ /** * Assigns a single image for the track. Only static images are supported. @@ -67,6 +83,7 @@ type IOSProps = Readonly<{ type Props = ViewProps & IOSProps & WindowsProps & + AndroidProps & Readonly<{ /** * Used to style and layout the `Slider`. See `StyleSheet.js` and @@ -94,6 +111,11 @@ type Props = ViewProps & */ step?: number; + /** + * Initial minimum value of the slider. Default value is 0. + */ + sliderHeight?: number; + /** * Initial minimum value of the slider. Default value is 0. */ From daf6ec8542d0e3bce8ecd104c63fc97fdf3a280a Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:31:28 -0700 Subject: [PATCH 3/7] feat: slider height --- .../slider/ReactSliderManager.java | 15 ++++++++++++ .../slider/ReactSliderManagerImpl.java | 23 +++++++++++++++++++ package/typings/index.d.ts | 12 ++++++++++ 3 files changed, 50 insertions(+) diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java index feb5753b..384a6089 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java @@ -172,6 +172,21 @@ public void setUpperLimit(ReactSlider view, float value) { ReactSliderManagerImpl.setUpperLimit(view, value); } + @Override + public void setSliderHeight(ReactSlider view, double value) { + ReactSliderManagerImpl.setSliderHeight(view, value); + } + + @Override + public void setSliderCornerRoundness(ReactSlider view, double value) { + ReactSliderManagerImpl.setSliderCornerRoundness(view, value); + } + + @Override + public void setThumbnailSize(ReactSlider view, double value) { + + } + @Override @ReactProp(name = "thumbImage") public void setThumbImage(ReactSlider view, @androidx.annotation.Nullable ReadableMap source) { diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java index dff1f9dd..1036a060 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java @@ -1,11 +1,14 @@ package com.reactnativecommunity.slider; +import static com.facebook.drawee.drawable.RoundedCornersDrawable.Type.CLIPPING; + import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Build; +import com.facebook.drawee.drawable.RoundedCornersDrawable; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; @@ -146,4 +149,24 @@ public static Map getExportedCustomDirectEventTypeConstants() { ReactSlidingCompleteEvent.EVENT_NAME, MapBuilder.of("registrationName", ReactSlidingCompleteEvent.EVENT_NAME) ); } + + public static void setSliderHeight(ReactSlider view, double value) { + LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent(); + for (int i = 0; i < drawable.getNumberOfLayers(); i ++ ) { + // 0 is max/background progress; 1 is ???; 2 is min/current progress + drawable.setLayerHeight(i, (int) value); + } + } + + public static void setSliderCornerRoundness(ReactSlider view, double value) { + LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent(); + for (int i = 0; i < drawable.getNumberOfLayers(); i ++ ) { + RoundedCornersDrawable newDrawable = new RoundedCornersDrawable(drawable.getDrawable(i)); + newDrawable.setRadius((float) value); + newDrawable.setType(CLIPPING); + drawable.setDrawable(i, newDrawable); + } + } + + } diff --git a/package/typings/index.d.ts b/package/typings/index.d.ts index 0b548440..5e7f9495 100644 --- a/package/typings/index.d.ts +++ b/package/typings/index.d.ts @@ -14,6 +14,18 @@ export interface SliderPropsAndroid extends ReactNative.ViewProps { * Color of the foreground switch grip. */ thumbTintColor?: string; + /** + * modifies slider height. Android only. + */ + sliderHeight?: number; + /** + * modifies slider corner roundness. Android only. + */ + sliderCornerRoundness?: number; + /** + * modifies thumb size. Android only. + */ + thumbnailSize?: number; } export interface SliderRef { From 77d7130fa7e8ea00a7dfbcefd44bfd6cb2c2a400 Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:56:35 -0700 Subject: [PATCH 4/7] feat: setThumbSize --- .../slider/ReactSlider.java | 1 + .../slider/ReactSliderManager.java | 4 +- .../slider/ReactSliderManagerImpl.java | 5 +- .../slider/ThumbDrawable.java | 76 +++++++++++++++++++ package/src/RNCSliderNativeComponent.ts | 2 +- package/src/Slider.tsx | 2 +- package/typings/index.d.ts | 2 +- 7 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 package/android/src/main/java/com/reactnativecommunity/slider/ThumbDrawable.java diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java index 0ff53306..87fcd8f9 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java @@ -76,6 +76,7 @@ public class ReactSlider extends AppCompatSeekBar { public ReactSlider(Context context, @Nullable AttributeSet attrs) { super(context, attrs); + setThumb(new ThumbDrawable(getThumb())); I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance(); super.setLayoutDirection(sharedI18nUtilInstance.isRTL(context) ? LAYOUT_DIRECTION_RTL : LAYOUT_DIRECTION_LTR); disableStateListAnimatorIfNeeded(); diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java index 384a6089..e93153f0 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java @@ -183,8 +183,8 @@ public void setSliderCornerRoundness(ReactSlider view, double value) { } @Override - public void setThumbnailSize(ReactSlider view, double value) { - + public void setThumbSize(ReactSlider view, double value) { + ReactSliderManagerImpl.setThumbSize(view, value, value); } @Override diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java index 1036a060..ae2d8c19 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java @@ -167,6 +167,9 @@ public static void setSliderCornerRoundness(ReactSlider view, double value) { drawable.setDrawable(i, newDrawable); } } - + public static void setThumbSize(ReactSlider view, double w, double h) { + ThumbDrawable drawable = (ThumbDrawable) view.getThumb(); + drawable.setDimension(w, h); + } } diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ThumbDrawable.java b/package/android/src/main/java/com/reactnativecommunity/slider/ThumbDrawable.java new file mode 100644 index 00000000..f41c0a47 --- /dev/null +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ThumbDrawable.java @@ -0,0 +1,76 @@ +package com.reactnativecommunity.slider; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.facebook.drawee.drawable.ForwardingDrawable; + +import java.util.Objects; + + +public class ThumbDrawable extends ForwardingDrawable { + private final Paint mPaint = new Paint(); + private int width = 0; + private int height = 0; + private float rx = 100; + private float ry = 100; + + /** + * Constructs a new forwarding drawable. + * + * @param drawable drawable that this forwarding drawable will forward to + */ + public ThumbDrawable(@Nullable Drawable drawable) { + super(drawable); + mPaint.setColor(Color.RED); + } + + @Override + public void draw(@NonNull Canvas canvas) { + if (width == 0 || height == 0) { + super.draw(canvas); + return; + } + Rect defaultRect = Objects.requireNonNull(getDrawable()).getBounds(); + // LEFT, TOP, RIGHT, BOTTOM. so its actually at (left+(Right - left) / 2, top+(bottom - top) / 2) + // with width = right - left and height = bottom - top + float newLeft = defaultRect.left + (defaultRect.right - defaultRect.left) / 2f - width / 2f; + float newTop = defaultRect.top + (defaultRect.bottom - defaultRect.top) / 2f - height / 2f; + + canvas.drawRoundRect( + newLeft, + newTop, + newLeft + width, + newTop + height, + rx, ry, mPaint); + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + mPaint.setColorFilter(colorFilter); + super.setColorFilter(colorFilter); + } + + @Override + public void clearColorFilter() { + mPaint.setColorFilter(null); + super.clearColorFilter(); + } + + public void setDimension(double width, double height) { + this.width = (int) width; + this.height = (int) height; + } + + public void setCornerRoundness(double rx, double ry) { + this.rx = (float) rx; + this.ry = (float) ry; + } +} diff --git a/package/src/RNCSliderNativeComponent.ts b/package/src/RNCSliderNativeComponent.ts index d3da0289..029ea3ac 100644 --- a/package/src/RNCSliderNativeComponent.ts +++ b/package/src/RNCSliderNativeComponent.ts @@ -42,7 +42,7 @@ export interface NativeProps extends ViewProps { upperLimit?: Float; sliderHeight?: Double; sliderCornerRoundness?: Double; - thumbnailSize?: Double; + thumbSize?: Double; } export default codegenNativeComponent('RNCSlider', { diff --git a/package/src/Slider.tsx b/package/src/Slider.tsx index 75d991c2..4139fcb8 100644 --- a/package/src/Slider.tsx +++ b/package/src/Slider.tsx @@ -51,7 +51,7 @@ type AndroidProps = Readonly<{ /** * modifies thumb size. Android only. */ - thumbnailSize?: number; + thumbSize?: number; }>; type IOSProps = Readonly<{ diff --git a/package/typings/index.d.ts b/package/typings/index.d.ts index 5e7f9495..2853b3e6 100644 --- a/package/typings/index.d.ts +++ b/package/typings/index.d.ts @@ -25,7 +25,7 @@ export interface SliderPropsAndroid extends ReactNative.ViewProps { /** * modifies thumb size. Android only. */ - thumbnailSize?: number; + thumbSize?: number; } export interface SliderRef { From b7875625a1601d27071b6a9268cba610c0523f4d Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 16:03:29 -0700 Subject: [PATCH 5/7] feat: slider height --- .../reactnativecommunity/slider/ReactSliderManager.java | 4 ++-- .../slider/ReactSliderManagerImpl.java | 2 +- package/src/RNCSliderNativeComponent.ts | 2 +- package/src/Slider.tsx | 9 ++------- package/typings/index.d.ts | 4 ++-- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java index e93153f0..9a23e353 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java @@ -173,8 +173,8 @@ public void setUpperLimit(ReactSlider view, float value) { } @Override - public void setSliderHeight(ReactSlider view, double value) { - ReactSliderManagerImpl.setSliderHeight(view, value); + public void setSliderThickness(ReactSlider view, double value) { + ReactSliderManagerImpl.setSliderThickness(view, value); } @Override diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java index ae2d8c19..12fb6f58 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java @@ -150,7 +150,7 @@ public static Map getExportedCustomDirectEventTypeConstants() { ); } - public static void setSliderHeight(ReactSlider view, double value) { + public static void setSliderThickness(ReactSlider view, double value) { LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent(); for (int i = 0; i < drawable.getNumberOfLayers(); i ++ ) { // 0 is max/background progress; 1 is ???; 2 is min/current progress diff --git a/package/src/RNCSliderNativeComponent.ts b/package/src/RNCSliderNativeComponent.ts index 029ea3ac..92eaf9dd 100644 --- a/package/src/RNCSliderNativeComponent.ts +++ b/package/src/RNCSliderNativeComponent.ts @@ -40,7 +40,7 @@ export interface NativeProps extends ViewProps { value?: Float; lowerLimit?: Float; upperLimit?: Float; - sliderHeight?: Double; + sliderThickness?: Double; sliderCornerRoundness?: Double; thumbSize?: Double; } diff --git a/package/src/Slider.tsx b/package/src/Slider.tsx index 4139fcb8..c2153702 100644 --- a/package/src/Slider.tsx +++ b/package/src/Slider.tsx @@ -41,9 +41,9 @@ type WindowsProps = Readonly<{ type AndroidProps = Readonly<{ /** - * modifies slider height. Android only. + * modifies slider thickness. Android only. */ - sliderHeight?: number; + sliderThickness?: number; /** * modifies slider corner roundness. Android only. */ @@ -111,11 +111,6 @@ type Props = ViewProps & */ step?: number; - /** - * Initial minimum value of the slider. Default value is 0. - */ - sliderHeight?: number; - /** * Initial minimum value of the slider. Default value is 0. */ diff --git a/package/typings/index.d.ts b/package/typings/index.d.ts index 2853b3e6..fc8aa0bd 100644 --- a/package/typings/index.d.ts +++ b/package/typings/index.d.ts @@ -15,9 +15,9 @@ export interface SliderPropsAndroid extends ReactNative.ViewProps { */ thumbTintColor?: string; /** - * modifies slider height. Android only. + * modifies slider thickness. Android only. */ - sliderHeight?: number; + sliderThickness?: number; /** * modifies slider corner roundness. Android only. */ From 3ca0d20cdf25a5a426c01c400c35422df847046e Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Wed, 25 Jun 2025 18:18:37 -0700 Subject: [PATCH 6/7] feat: setThumbSize --- .../java/com/reactnativecommunity/slider/ReactSlider.java | 7 +++++-- .../slider/ReactSliderManagerImpl.java | 3 +-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java index 87fcd8f9..26351c5d 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java @@ -74,9 +74,12 @@ public class ReactSlider extends AppCompatSeekBar { /** Upper limit based on the SeekBar progress 0..total steps */ private int mUpperLimit; + public ThumbDrawable thumbDrawable; + public ReactSlider(Context context, @Nullable AttributeSet attrs) { super(context, attrs); - setThumb(new ThumbDrawable(getThumb())); + thumbDrawable = new ThumbDrawable(getThumb()); + setThumb(thumbDrawable); I18nUtil sharedI18nUtilInstance = I18nUtil.getInstance(); super.setLayoutDirection(sharedI18nUtilInstance.isRTL(context) ? LAYOUT_DIRECTION_RTL : LAYOUT_DIRECTION_LTR); disableStateListAnimatorIfNeeded(); @@ -308,7 +311,7 @@ public void setThumbImage(final String uri) { setSplitTrack(false); } } else { - setThumb(getThumb()); + setThumb(thumbDrawable); } } } diff --git a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java index 12fb6f58..18939463 100644 --- a/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java +++ b/package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java @@ -168,8 +168,7 @@ public static void setSliderCornerRoundness(ReactSlider view, double value) { } } public static void setThumbSize(ReactSlider view, double w, double h) { - ThumbDrawable drawable = (ThumbDrawable) view.getThumb(); - drawable.setDimension(w, h); + view.thumbDrawable.setDimension(w, h); } } From 0600f01a605bdebec270c5dad27ac372cf034d5a Mon Sep 17 00:00:00 2001 From: lovegaoshi <106490582+lovegaoshi@users.noreply.github.com> Date: Thu, 26 Jun 2025 14:08:08 -0700 Subject: [PATCH 7/7] Revert "chore: fix entry point" This reverts commit de4ad2abb3416550163fc58747e39082aff87927. --- package/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/package.json b/package/package.json index 65b52bb3..d3f758c2 100644 --- a/package/package.json +++ b/package/package.json @@ -8,7 +8,7 @@ "publishConfig": { "access": "public" }, - "main": "src/Slider.tsx", + "main": "dist/Slider.js", "types": "typings/index.d.ts", "keywords": [ "react-native",