@onekeyfe/react-native-segment-slider 3.0.85 → 3.0.86-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +13 -3
  2. package/android/src/main/java/com/margelo/nitro/segmentslider/HybridSegmentSlider.kt +31 -7
  3. package/ios/HybridSegmentSlider.swift +34 -8
  4. package/lib/nitrogen/generated/android/c++/JFunc_void.hpp +3 -3
  5. package/lib/nitrogen/generated/android/c++/JFunc_void_double.hpp +3 -3
  6. package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +71 -63
  7. package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +24 -20
  8. package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +81 -77
  9. package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +4 -4
  10. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void.kt +1 -1
  11. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void_double.kt +1 -1
  12. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +25 -17
  13. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/segmentsliderOnLoad.kt +1 -1
  14. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +10 -40
  15. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +1 -1
  16. package/lib/nitrogen/generated/android/segmentslider+autolinking.cmake +1 -1
  17. package/lib/nitrogen/generated/android/segmentslider+autolinking.gradle +1 -1
  18. package/lib/nitrogen/generated/android/segmentsliderOnLoad.cpp +20 -30
  19. package/lib/nitrogen/generated/android/segmentsliderOnLoad.hpp +5 -14
  20. package/lib/nitrogen/generated/ios/SegmentSlider+autolinking.rb +2 -2
  21. package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.cpp +1 -1
  22. package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +3 -3
  23. package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +1 -1
  24. package/lib/nitrogen/generated/ios/SegmentSliderAutolinking.mm +1 -1
  25. package/lib/nitrogen/generated/ios/SegmentSliderAutolinking.swift +8 -9
  26. package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.cpp +1 -1
  27. package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +7 -7
  28. package/lib/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +6 -27
  29. package/lib/nitrogen/generated/ios/swift/Func_void.swift +2 -1
  30. package/lib/nitrogen/generated/ios/swift/Func_void_double.swift +2 -1
  31. package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +5 -3
  32. package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +13 -18
  33. package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -1
  34. package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -1
  35. package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +46 -10
  36. package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +7 -9
  37. package/lib/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -0
  38. package/lib/typescript/src/SegmentSlider.nitro.d.ts +8 -0
  39. package/lib/typescript/src/SegmentSlider.nitro.d.ts.map +1 -1
  40. package/nitrogen/generated/android/c++/JFunc_void.hpp +3 -3
  41. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +3 -3
  42. package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +71 -63
  43. package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +24 -20
  44. package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +81 -77
  45. package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +4 -4
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void.kt +1 -1
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/Func_void_double.kt +1 -1
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +25 -17
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/segmentsliderOnLoad.kt +1 -1
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +10 -40
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +1 -1
  52. package/nitrogen/generated/android/segmentslider+autolinking.cmake +1 -1
  53. package/nitrogen/generated/android/segmentslider+autolinking.gradle +1 -1
  54. package/nitrogen/generated/android/segmentsliderOnLoad.cpp +20 -30
  55. package/nitrogen/generated/android/segmentsliderOnLoad.hpp +5 -14
  56. package/nitrogen/generated/ios/SegmentSlider+autolinking.rb +2 -2
  57. package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.cpp +1 -1
  58. package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +3 -3
  59. package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +1 -1
  60. package/nitrogen/generated/ios/SegmentSliderAutolinking.mm +1 -1
  61. package/nitrogen/generated/ios/SegmentSliderAutolinking.swift +8 -9
  62. package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.cpp +1 -1
  63. package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +7 -7
  64. package/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +6 -27
  65. package/nitrogen/generated/ios/swift/Func_void.swift +2 -1
  66. package/nitrogen/generated/ios/swift/Func_void_double.swift +2 -1
  67. package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +5 -3
  68. package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +13 -18
  69. package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -1
  70. package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -1
  71. package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +46 -10
  72. package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +7 -9
  73. package/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -0
  74. package/package.json +4 -4
  75. package/src/SegmentSlider.nitro.ts +12 -1
package/README.md CHANGED
@@ -15,6 +15,12 @@ once on mount), read live changes through `onChange`, and set the value
15
15
  imperatively via the `setValue` method on the hybrid ref. This keeps reset/programmatic
16
16
  updates off the Fabric prop-commit path and avoids any controlled-value-vs-drag conflict.
17
17
 
18
+ Set `alignSegmentMarksToIntegerValues` when an evenly divided segment lands on
19
+ a fractional value but the slider emits integers. Marks, tap snapping, hover
20
+ halos, and active states then share the same half-to-even integer values. For
21
+ example, `min={10}`, `max={100}`, and `segments={4}` use
22
+ `10 / 32 / 55 / 78 / 100`.
23
+
18
24
  ```tsx
19
25
  import { useMemo, useRef } from 'react';
20
26
  import {
@@ -30,8 +36,11 @@ type ISegmentSliderRef = HybridView<SegmentSliderProps, SegmentSliderMethods>;
30
36
 
31
37
  const sliderRef = useRef<ISegmentSliderRef | null>(null);
32
38
  const hybridRef = useMemo(
33
- () => callback((node: ISegmentSliderRef) => { sliderRef.current = node; }),
34
- [],
39
+ () =>
40
+ callback((node: ISegmentSliderRef) => {
41
+ sliderRef.current = node;
42
+ }),
43
+ []
35
44
  );
36
45
 
37
46
  // Programmatically move the thumb (does NOT fire onChange):
@@ -49,6 +58,7 @@ const hybridRef = useMemo(
49
58
  showBubble={true}
50
59
  centerOrigin={false}
51
60
  snapTapToSegment={true}
61
+ alignSegmentMarksToIntegerValues={false}
52
62
  fillColor="#000000df"
53
63
  trackColor="#0000001f"
54
64
  thumbColor="#ffffff"
@@ -59,7 +69,7 @@ const hybridRef = useMemo(
59
69
  bubbleColor="#000000df"
60
70
  bubbleTextColor="#ffffff"
61
71
  onChange={(nextValue) => console.log(nextValue)}
62
- />
72
+ />;
63
73
  ```
64
74
 
65
75
  ## Contributing
@@ -195,6 +195,10 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
195
195
  get() = field
196
196
  set(v) { field = v }
197
197
 
198
+ override var alignSegmentMarksToIntegerValues: Boolean = false
199
+ get() = field
200
+ set(v) { field = v; invalidateIfAlive() }
201
+
198
202
  override var fillColor: String = ""
199
203
  get() = field
200
204
  set(v) { field = v; cFill = parse(v); fillPaint.color = cFill; invalidateIfAlive() }
@@ -259,6 +263,29 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
259
263
  private val rangeSafe: Double get() = (max - min).let { if (it == 0.0) 1.0 else it }
260
264
  private val markCount: Int get() = if (segments >= 1) segments.toInt() + 1 else 0
261
265
 
266
+ private fun segmentValue(index: Int): Double {
267
+ if (markCount <= 1) return min
268
+ val fraction = index.toDouble() / (markCount - 1)
269
+ val value = min + fraction * (max - min)
270
+ return if (alignSegmentMarksToIntegerValues) Math.rint(value) else value
271
+ }
272
+
273
+ private fun markFraction(index: Int): Float = valueToFrac(segmentValue(index))
274
+
275
+ private fun nearestMarkIndex(value: Double): Int {
276
+ val valueFraction = valueToFrac(value)
277
+ var nearestIndex = 0
278
+ var nearestDistance = Float.POSITIVE_INFINITY
279
+ for (index in 0 until markCount) {
280
+ val distance = Math.abs(valueFraction - markFraction(index))
281
+ if (distance <= nearestDistance) {
282
+ nearestDistance = distance
283
+ nearestIndex = index
284
+ }
285
+ }
286
+ return nearestIndex
287
+ }
288
+
262
289
  /** True when tap-snapping should defer the value commit: enabled with marks to snap to. */
263
290
  private val snapTapsActive: Boolean get() = snapTapToSegment && markCount > 1
264
291
 
@@ -277,10 +304,7 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
277
304
 
278
305
  /** Snaps a value to the value of the nearest segment mark. Caller guarantees `markCount > 1`. */
279
306
  private fun snapValueToNearestMark(v: Double): Double {
280
- val frac = valueToFrac(v).toDouble()
281
- val idx = Math.round(frac * (markCount - 1)).toDouble()
282
- val snappedFrac = idx / (markCount - 1)
283
- return min + snappedFrac * (max - min)
307
+ return segmentValue(nearestMarkIndex(v))
284
308
  }
285
309
 
286
310
  /** Hard re-sync: snap the thumb to [v], overriding any in-flight drag. */
@@ -321,7 +345,7 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
321
345
  var best = -1
322
346
  var bestDist = threshold
323
347
  for (i in 0 until markCount) {
324
- val mf = if (markCount > 1) i.toFloat() / (markCount - 1) else 0f
348
+ val mf = markFraction(i)
325
349
  val mx = insetPx + mf * tw
326
350
  val d = Math.abs(thumbX - mx)
327
351
  if (d <= bestDist) { bestDist = d; best = i }
@@ -387,7 +411,7 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
387
411
  // Node halo (drag-time highlight) — drawn under the marks so the node dot
388
412
  // stays crisp on top. Translucent markActive color (25% alpha).
389
413
  if (isDragging && hoverMarkIndex in 0 until markCount) {
390
- val mf = if (markCount > 1) hoverMarkIndex.toFloat() / (markCount - 1) else 0f
414
+ val mf = markFraction(hoverMarkIndex)
391
415
  val hx = insetPx + mf * tw
392
416
  markHaloPaint.color = (cMarkActive and 0x00FFFFFF) or (0x3F shl 24)
393
417
  canvas.drawCircle(hx, midY, markSizePx / 2f + haloRingPx, markHaloPaint)
@@ -397,7 +421,7 @@ class HybridSegmentSlider(val context: ThemedReactContext) : HybridSegmentSlider
397
421
  val centerFrac = valueToFrac(0.0)
398
422
  val markR = markSizePx / 2f
399
423
  for (i in 0 until markCount) {
400
- val markFrac = if (markCount > 1) i.toFloat() / (markCount - 1) else 0f
424
+ val markFrac = markFraction(i)
401
425
  val cx = insetPx + markFrac * tw
402
426
  val active = when {
403
427
  centerOrigin && currentValue == 0.0 -> false
@@ -86,6 +86,8 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
86
86
  var centerOrigin: Bool = false { didSet { scheduleLayout() } }
87
87
  // Gates tap snapping only; no visual change on its own, so no didSet.
88
88
  var snapTapToSegment: Bool = false
89
+ // Keeps marks and integer-emitting thumbs on the same value-derived geometry.
90
+ var alignSegmentMarksToIntegerValues: Bool = false { didSet { scheduleLayout() } }
89
91
 
90
92
  var fillColor: String = "" {
91
93
  didSet { cFill = parse(fillColor); fillLayer.backgroundColor = cFill; scheduleLayout() }
@@ -178,6 +180,33 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
178
180
  private var range: Double { let r = max - min; return r == 0 ? 1 : r }
179
181
  private var markCount: Int { segments >= 1 ? Int(segments) + 1 : 0 }
180
182
 
183
+ private func segmentValue(at index: Int) -> Double {
184
+ guard markCount > 1 else { return min }
185
+ let fraction = Double(index) / Double(markCount - 1)
186
+ let value = min + fraction * (max - min)
187
+ return alignSegmentMarksToIntegerValues
188
+ ? value.rounded(.toNearestOrEven)
189
+ : value
190
+ }
191
+
192
+ private func markFraction(at index: Int) -> CGFloat {
193
+ valueToFrac(segmentValue(at: index))
194
+ }
195
+
196
+ private func nearestMarkIndex(to value: Double) -> Int {
197
+ let valueFraction = valueToFrac(value)
198
+ var nearestIndex = 0
199
+ var nearestDistance = CGFloat.infinity
200
+ for index in 0..<markCount {
201
+ let distance = abs(valueFraction - markFraction(at: index))
202
+ if distance <= nearestDistance {
203
+ nearestDistance = distance
204
+ nearestIndex = index
205
+ }
206
+ }
207
+ return nearestIndex
208
+ }
209
+
181
210
  /// value -> fraction 0..1
182
211
  private func valueToFrac(_ v: Double) -> CGFloat {
183
212
  let clamped = Swift.max(min, Swift.min(max, v))
@@ -213,7 +242,7 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
213
242
  // Marks sit on the track line, centred vertically on it.
214
243
  for i in 0..<markLayers.count {
215
244
  let layer = markLayers[i]
216
- let frac = markCount > 1 ? CGFloat(i) / CGFloat(markCount - 1) : 0
245
+ let frac = markFraction(at: i)
217
246
  let cx = trackLeft + frac * trackWidth
218
247
  layer.bounds = CGRect(x: 0, y: 0, width: markSize, height: markSize)
219
248
  layer.position = CGPoint(x: cx, y: bounds.midY)
@@ -285,7 +314,7 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
285
314
  // Marks active states.
286
315
  let centerFrac = valueToFrac(0)
287
316
  for i in 0..<markLayers.count {
288
- let markFrac = markLayers.count > 1 ? CGFloat(i) / CGFloat(markLayers.count - 1) : 0
317
+ let markFrac = markFraction(at: i)
289
318
  var active: Bool
290
319
  if centerOrigin {
291
320
  if v == 0 {
@@ -339,7 +368,7 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
339
368
  var best = -1
340
369
  var bestDist = threshold
341
370
  for i in 0..<markCount {
342
- let frac = markCount > 1 ? CGFloat(i) / CGFloat(markCount - 1) : 0
371
+ let frac = markFraction(at: i)
343
372
  let mx = trackLeft + frac * trackWidth
344
373
  let d = abs(thumbX - mx)
345
374
  if d <= bestDist { bestDist = d; best = i }
@@ -359,7 +388,7 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
359
388
  CATransaction.begin()
360
389
  CATransaction.setDisableActions(true)
361
390
  if visible {
362
- let frac = markCount > 1 ? CGFloat(index) / CGFloat(markCount - 1) : 0
391
+ let frac = markFraction(at: index)
363
392
  let mx = trackLeft + frac * trackWidth
364
393
  haloLayer.position = CGPoint(x: mx, y: view.bounds.midY)
365
394
  haloLayer.backgroundColor = UIColor(cgColor: cMarkActive)
@@ -428,10 +457,7 @@ final class HybridSegmentSlider: HybridSegmentSliderSpec {
428
457
  /// Snaps a value to the value of the nearest segment mark. Caller guarantees
429
458
  /// `markCount > 1`.
430
459
  private func snapValueToNearestMark(_ v: Double) -> Double {
431
- let frac = Double(valueToFrac(v))
432
- let idx = (frac * Double(markCount - 1)).rounded()
433
- let snappedFrac = idx / Double(markCount - 1)
434
- return min + snappedFrac * (max - min)
460
+ segmentValue(at: nearestMarkIndex(to: v))
435
461
  }
436
462
 
437
463
  /// Hard re-sync: snap the thumb to `v`, overriding any in-flight drag. An
@@ -2,7 +2,7 @@
2
2
  /// JFunc_void.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -23,7 +23,7 @@ namespace margelo::nitro::segmentslider {
23
23
  */
24
24
  struct JFunc_void: public jni::JavaClass<JFunc_void> {
25
25
  public:
26
- static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void;";
26
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void;";
27
27
 
28
28
  public:
29
29
  /**
@@ -59,7 +59,7 @@ namespace margelo::nitro::segmentslider {
59
59
  }
60
60
 
61
61
  public:
62
- static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_cxx;";
62
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_cxx;";
63
63
  static void registerNatives() {
64
64
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_cxx::invoke_cxx)});
65
65
  }
@@ -2,7 +2,7 @@
2
2
  /// JFunc_void_double.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -23,7 +23,7 @@ namespace margelo::nitro::segmentslider {
23
23
  */
24
24
  struct JFunc_void_double: public jni::JavaClass<JFunc_void_double> {
25
25
  public:
26
- static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_double;";
26
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_double;";
27
27
 
28
28
  public:
29
29
  /**
@@ -59,7 +59,7 @@ namespace margelo::nitro::segmentslider {
59
59
  }
60
60
 
61
61
  public:
62
- static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_double_cxx;";
62
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/segmentslider/Func_void_double_cxx;";
63
63
  static void registerNatives() {
64
64
  registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_cxx::invoke_cxx)});
65
65
  }
@@ -2,7 +2,7 @@
2
2
  /// JHybridSegmentSliderSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "JHybridSegmentSliderSpec.hpp"
@@ -18,198 +18,206 @@
18
18
 
19
19
  namespace margelo::nitro::segmentslider {
20
20
 
21
- std::shared_ptr<JHybridSegmentSliderSpec> JHybridSegmentSliderSpec::JavaPart::getJHybridSegmentSliderSpec() {
22
- auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
23
- auto castHybridObject = std::dynamic_pointer_cast<JHybridSegmentSliderSpec>(hybridObject);
24
- if (castHybridObject == nullptr) [[unlikely]] {
25
- throw std::runtime_error("Failed to downcast JHybridObject to JHybridSegmentSliderSpec!");
26
- }
27
- return castHybridObject;
21
+ jni::local_ref<JHybridSegmentSliderSpec::jhybriddata> JHybridSegmentSliderSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
22
+ return makeCxxInstance(jThis);
28
23
  }
29
24
 
30
- jni::local_ref<JHybridSegmentSliderSpec::CxxPart::jhybriddata> JHybridSegmentSliderSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
31
- return makeCxxInstance(jThis);
25
+ void JHybridSegmentSliderSpec::registerNatives() {
26
+ registerHybrid({
27
+ makeNativeMethod("initHybrid", JHybridSegmentSliderSpec::initHybrid),
28
+ });
32
29
  }
33
30
 
34
- std::shared_ptr<JHybridObject> JHybridSegmentSliderSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
35
- auto castJavaPart = jni::dynamic_ref_cast<JHybridSegmentSliderSpec::JavaPart>(javaPart);
36
- if (castJavaPart == nullptr) [[unlikely]] {
37
- throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridSegmentSliderSpec::JavaPart!");
38
- }
39
- return std::make_shared<JHybridSegmentSliderSpec>(castJavaPart);
31
+ size_t JHybridSegmentSliderSpec::getExternalMemorySize() noexcept {
32
+ static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
33
+ return method(_javaPart);
40
34
  }
41
35
 
42
- void JHybridSegmentSliderSpec::CxxPart::registerNatives() {
43
- registerHybrid({
44
- makeNativeMethod("initHybrid", JHybridSegmentSliderSpec::CxxPart::initHybrid),
45
- });
36
+ void JHybridSegmentSliderSpec::dispose() noexcept {
37
+ static const auto method = javaClassStatic()->getMethod<void()>("dispose");
38
+ method(_javaPart);
39
+ }
40
+
41
+ std::string JHybridSegmentSliderSpec::toString() {
42
+ static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
43
+ auto javaString = method(_javaPart);
44
+ return javaString->toStdString();
46
45
  }
47
46
 
48
47
  // Properties
49
48
  double JHybridSegmentSliderSpec::getDefaultValue() {
50
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("getDefaultValue");
49
+ static const auto method = javaClassStatic()->getMethod<double()>("getDefaultValue");
51
50
  auto __result = method(_javaPart);
52
51
  return __result;
53
52
  }
54
53
  void JHybridSegmentSliderSpec::setDefaultValue(double defaultValue) {
55
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* defaultValue */)>("setDefaultValue");
54
+ static const auto method = javaClassStatic()->getMethod<void(double /* defaultValue */)>("setDefaultValue");
56
55
  method(_javaPart, defaultValue);
57
56
  }
58
57
  double JHybridSegmentSliderSpec::getMin() {
59
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("getMin");
58
+ static const auto method = javaClassStatic()->getMethod<double()>("getMin");
60
59
  auto __result = method(_javaPart);
61
60
  return __result;
62
61
  }
63
62
  void JHybridSegmentSliderSpec::setMin(double min) {
64
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* min */)>("setMin");
63
+ static const auto method = javaClassStatic()->getMethod<void(double /* min */)>("setMin");
65
64
  method(_javaPart, min);
66
65
  }
67
66
  double JHybridSegmentSliderSpec::getMax() {
68
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("getMax");
67
+ static const auto method = javaClassStatic()->getMethod<double()>("getMax");
69
68
  auto __result = method(_javaPart);
70
69
  return __result;
71
70
  }
72
71
  void JHybridSegmentSliderSpec::setMax(double max) {
73
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* max */)>("setMax");
72
+ static const auto method = javaClassStatic()->getMethod<void(double /* max */)>("setMax");
74
73
  method(_javaPart, max);
75
74
  }
76
75
  double JHybridSegmentSliderSpec::getSegments() {
77
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("getSegments");
76
+ static const auto method = javaClassStatic()->getMethod<double()>("getSegments");
78
77
  auto __result = method(_javaPart);
79
78
  return __result;
80
79
  }
81
80
  void JHybridSegmentSliderSpec::setSegments(double segments) {
82
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* segments */)>("setSegments");
81
+ static const auto method = javaClassStatic()->getMethod<void(double /* segments */)>("setSegments");
83
82
  method(_javaPart, segments);
84
83
  }
85
84
  double JHybridSegmentSliderSpec::getSliderHeight() {
86
- static const auto method = _javaPart->javaClassStatic()->getMethod<double()>("getSliderHeight");
85
+ static const auto method = javaClassStatic()->getMethod<double()>("getSliderHeight");
87
86
  auto __result = method(_javaPart);
88
87
  return __result;
89
88
  }
90
89
  void JHybridSegmentSliderSpec::setSliderHeight(double sliderHeight) {
91
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* sliderHeight */)>("setSliderHeight");
90
+ static const auto method = javaClassStatic()->getMethod<void(double /* sliderHeight */)>("setSliderHeight");
92
91
  method(_javaPart, sliderHeight);
93
92
  }
94
93
  bool JHybridSegmentSliderSpec::getDisabled() {
95
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("getDisabled");
94
+ static const auto method = javaClassStatic()->getMethod<jboolean()>("getDisabled");
96
95
  auto __result = method(_javaPart);
97
96
  return static_cast<bool>(__result);
98
97
  }
99
98
  void JHybridSegmentSliderSpec::setDisabled(bool disabled) {
100
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jboolean /* disabled */)>("setDisabled");
99
+ static const auto method = javaClassStatic()->getMethod<void(jboolean /* disabled */)>("setDisabled");
101
100
  method(_javaPart, disabled);
102
101
  }
103
102
  bool JHybridSegmentSliderSpec::getShowBubble() {
104
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("getShowBubble");
103
+ static const auto method = javaClassStatic()->getMethod<jboolean()>("getShowBubble");
105
104
  auto __result = method(_javaPart);
106
105
  return static_cast<bool>(__result);
107
106
  }
108
107
  void JHybridSegmentSliderSpec::setShowBubble(bool showBubble) {
109
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jboolean /* showBubble */)>("setShowBubble");
108
+ static const auto method = javaClassStatic()->getMethod<void(jboolean /* showBubble */)>("setShowBubble");
110
109
  method(_javaPart, showBubble);
111
110
  }
112
111
  bool JHybridSegmentSliderSpec::getCenterOrigin() {
113
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("getCenterOrigin");
112
+ static const auto method = javaClassStatic()->getMethod<jboolean()>("getCenterOrigin");
114
113
  auto __result = method(_javaPart);
115
114
  return static_cast<bool>(__result);
116
115
  }
117
116
  void JHybridSegmentSliderSpec::setCenterOrigin(bool centerOrigin) {
118
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jboolean /* centerOrigin */)>("setCenterOrigin");
117
+ static const auto method = javaClassStatic()->getMethod<void(jboolean /* centerOrigin */)>("setCenterOrigin");
119
118
  method(_javaPart, centerOrigin);
120
119
  }
121
120
  bool JHybridSegmentSliderSpec::getSnapTapToSegment() {
122
- static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("getSnapTapToSegment");
121
+ static const auto method = javaClassStatic()->getMethod<jboolean()>("getSnapTapToSegment");
123
122
  auto __result = method(_javaPart);
124
123
  return static_cast<bool>(__result);
125
124
  }
126
125
  void JHybridSegmentSliderSpec::setSnapTapToSegment(bool snapTapToSegment) {
127
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jboolean /* snapTapToSegment */)>("setSnapTapToSegment");
126
+ static const auto method = javaClassStatic()->getMethod<void(jboolean /* snapTapToSegment */)>("setSnapTapToSegment");
128
127
  method(_javaPart, snapTapToSegment);
129
128
  }
129
+ bool JHybridSegmentSliderSpec::getAlignSegmentMarksToIntegerValues() {
130
+ static const auto method = javaClassStatic()->getMethod<jboolean()>("getAlignSegmentMarksToIntegerValues");
131
+ auto __result = method(_javaPart);
132
+ return static_cast<bool>(__result);
133
+ }
134
+ void JHybridSegmentSliderSpec::setAlignSegmentMarksToIntegerValues(bool alignSegmentMarksToIntegerValues) {
135
+ static const auto method = javaClassStatic()->getMethod<void(jboolean /* alignSegmentMarksToIntegerValues */)>("setAlignSegmentMarksToIntegerValues");
136
+ method(_javaPart, alignSegmentMarksToIntegerValues);
137
+ }
130
138
  std::string JHybridSegmentSliderSpec::getFillColor() {
131
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getFillColor");
139
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getFillColor");
132
140
  auto __result = method(_javaPart);
133
141
  return __result->toStdString();
134
142
  }
135
143
  void JHybridSegmentSliderSpec::setFillColor(const std::string& fillColor) {
136
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* fillColor */)>("setFillColor");
144
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* fillColor */)>("setFillColor");
137
145
  method(_javaPart, jni::make_jstring(fillColor));
138
146
  }
139
147
  std::string JHybridSegmentSliderSpec::getTrackColor() {
140
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getTrackColor");
148
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getTrackColor");
141
149
  auto __result = method(_javaPart);
142
150
  return __result->toStdString();
143
151
  }
144
152
  void JHybridSegmentSliderSpec::setTrackColor(const std::string& trackColor) {
145
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* trackColor */)>("setTrackColor");
153
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* trackColor */)>("setTrackColor");
146
154
  method(_javaPart, jni::make_jstring(trackColor));
147
155
  }
148
156
  std::string JHybridSegmentSliderSpec::getThumbColor() {
149
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getThumbColor");
157
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getThumbColor");
150
158
  auto __result = method(_javaPart);
151
159
  return __result->toStdString();
152
160
  }
153
161
  void JHybridSegmentSliderSpec::setThumbColor(const std::string& thumbColor) {
154
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* thumbColor */)>("setThumbColor");
162
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* thumbColor */)>("setThumbColor");
155
163
  method(_javaPart, jni::make_jstring(thumbColor));
156
164
  }
157
165
  std::string JHybridSegmentSliderSpec::getThumbBorderColor() {
158
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getThumbBorderColor");
166
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getThumbBorderColor");
159
167
  auto __result = method(_javaPart);
160
168
  return __result->toStdString();
161
169
  }
162
170
  void JHybridSegmentSliderSpec::setThumbBorderColor(const std::string& thumbBorderColor) {
163
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* thumbBorderColor */)>("setThumbBorderColor");
171
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* thumbBorderColor */)>("setThumbBorderColor");
164
172
  method(_javaPart, jni::make_jstring(thumbBorderColor));
165
173
  }
166
174
  std::string JHybridSegmentSliderSpec::getMarkActiveColor() {
167
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkActiveColor");
175
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkActiveColor");
168
176
  auto __result = method(_javaPart);
169
177
  return __result->toStdString();
170
178
  }
171
179
  void JHybridSegmentSliderSpec::setMarkActiveColor(const std::string& markActiveColor) {
172
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markActiveColor */)>("setMarkActiveColor");
180
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markActiveColor */)>("setMarkActiveColor");
173
181
  method(_javaPart, jni::make_jstring(markActiveColor));
174
182
  }
175
183
  std::string JHybridSegmentSliderSpec::getMarkInactiveColor() {
176
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkInactiveColor");
184
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkInactiveColor");
177
185
  auto __result = method(_javaPart);
178
186
  return __result->toStdString();
179
187
  }
180
188
  void JHybridSegmentSliderSpec::setMarkInactiveColor(const std::string& markInactiveColor) {
181
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markInactiveColor */)>("setMarkInactiveColor");
189
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markInactiveColor */)>("setMarkInactiveColor");
182
190
  method(_javaPart, jni::make_jstring(markInactiveColor));
183
191
  }
184
192
  std::string JHybridSegmentSliderSpec::getMarkBorderColor() {
185
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkBorderColor");
193
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getMarkBorderColor");
186
194
  auto __result = method(_javaPart);
187
195
  return __result->toStdString();
188
196
  }
189
197
  void JHybridSegmentSliderSpec::setMarkBorderColor(const std::string& markBorderColor) {
190
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markBorderColor */)>("setMarkBorderColor");
198
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* markBorderColor */)>("setMarkBorderColor");
191
199
  method(_javaPart, jni::make_jstring(markBorderColor));
192
200
  }
193
201
  std::string JHybridSegmentSliderSpec::getBubbleColor() {
194
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBubbleColor");
202
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBubbleColor");
195
203
  auto __result = method(_javaPart);
196
204
  return __result->toStdString();
197
205
  }
198
206
  void JHybridSegmentSliderSpec::setBubbleColor(const std::string& bubbleColor) {
199
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* bubbleColor */)>("setBubbleColor");
207
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* bubbleColor */)>("setBubbleColor");
200
208
  method(_javaPart, jni::make_jstring(bubbleColor));
201
209
  }
202
210
  std::string JHybridSegmentSliderSpec::getBubbleTextColor() {
203
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBubbleTextColor");
211
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBubbleTextColor");
204
212
  auto __result = method(_javaPart);
205
213
  return __result->toStdString();
206
214
  }
207
215
  void JHybridSegmentSliderSpec::setBubbleTextColor(const std::string& bubbleTextColor) {
208
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* bubbleTextColor */)>("setBubbleTextColor");
216
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* bubbleTextColor */)>("setBubbleTextColor");
209
217
  method(_javaPart, jni::make_jstring(bubbleTextColor));
210
218
  }
211
219
  std::optional<std::function<void(double /* value */)>> JHybridSegmentSliderSpec::getOnChange() {
212
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JFunc_void_double::javaobject>()>("getOnChange_cxx");
220
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JFunc_void_double::javaobject>()>("getOnChange_cxx");
213
221
  auto __result = method(_javaPart);
214
222
  return __result != nullptr ? std::make_optional([&]() -> std::function<void(double /* value */)> {
215
223
  if (__result->isInstanceOf(JFunc_void_double_cxx::javaClassStatic())) [[likely]] {
@@ -222,11 +230,11 @@ namespace margelo::nitro::segmentslider {
222
230
  }()) : std::nullopt;
223
231
  }
224
232
  void JHybridSegmentSliderSpec::setOnChange(const std::optional<std::function<void(double /* value */)>>& onChange) {
225
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double::javaobject> /* onChange */)>("setOnChange_cxx");
233
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_double::javaobject> /* onChange */)>("setOnChange_cxx");
226
234
  method(_javaPart, onChange.has_value() ? JFunc_void_double_cxx::fromCpp(onChange.value()) : nullptr);
227
235
  }
228
236
  std::optional<std::function<void()>> JHybridSegmentSliderSpec::getOnSlideStart() {
229
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>()>("getOnSlideStart_cxx");
237
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>()>("getOnSlideStart_cxx");
230
238
  auto __result = method(_javaPart);
231
239
  return __result != nullptr ? std::make_optional([&]() -> std::function<void()> {
232
240
  if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] {
@@ -239,11 +247,11 @@ namespace margelo::nitro::segmentslider {
239
247
  }()) : std::nullopt;
240
248
  }
241
249
  void JHybridSegmentSliderSpec::setOnSlideStart(const std::optional<std::function<void()>>& onSlideStart) {
242
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void::javaobject> /* onSlideStart */)>("setOnSlideStart_cxx");
250
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void::javaobject> /* onSlideStart */)>("setOnSlideStart_cxx");
243
251
  method(_javaPart, onSlideStart.has_value() ? JFunc_void_cxx::fromCpp(onSlideStart.value()) : nullptr);
244
252
  }
245
253
  std::optional<std::function<void()>> JHybridSegmentSliderSpec::getOnSlideComplete() {
246
- static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>()>("getOnSlideComplete_cxx");
254
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>()>("getOnSlideComplete_cxx");
247
255
  auto __result = method(_javaPart);
248
256
  return __result != nullptr ? std::make_optional([&]() -> std::function<void()> {
249
257
  if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] {
@@ -256,13 +264,13 @@ namespace margelo::nitro::segmentslider {
256
264
  }()) : std::nullopt;
257
265
  }
258
266
  void JHybridSegmentSliderSpec::setOnSlideComplete(const std::optional<std::function<void()>>& onSlideComplete) {
259
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void::javaobject> /* onSlideComplete */)>("setOnSlideComplete_cxx");
267
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void::javaobject> /* onSlideComplete */)>("setOnSlideComplete_cxx");
260
268
  method(_javaPart, onSlideComplete.has_value() ? JFunc_void_cxx::fromCpp(onSlideComplete.value()) : nullptr);
261
269
  }
262
270
 
263
271
  // Methods
264
272
  void JHybridSegmentSliderSpec::setValue(double value) {
265
- static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* value */)>("setValue");
273
+ static const auto method = javaClassStatic()->getMethod<void(double /* value */)>("setValue");
266
274
  method(_javaPart, value);
267
275
  }
268
276