Skip to content

Commit 3d357f4

Browse files
committed
stop slider getting into infinite validation loop when .pos = NaN
1 parent f388993 commit 3d357f4

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

haxe/ui/components/Slider.hx

+44
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ class Slider extends InteractiveComponent implements IDirectionalComponent imple
138138
@:access(haxe.ui.core.Component)
139139
private class StartBehaviour extends DataBehaviour {
140140
private override function validateData() {
141+
if (_value == null || _value.isNull) {
142+
return;
143+
}
144+
145+
if (_value.isNaN) {
146+
return;
147+
}
148+
141149
var builder:SliderBuilder = cast(_component._compositeBuilder, SliderBuilder);
142150
if (_component.findComponent("start-thumb") == null) {
143151
builder.createThumb("start-thumb");
@@ -170,6 +178,14 @@ private class StartBehaviour extends DataBehaviour {
170178
@:access(haxe.ui.components.Range)
171179
private class EndBehaviour extends DataBehaviour {
172180
private override function validateData() {
181+
if (_value == null || _value.isNull) {
182+
return;
183+
}
184+
185+
if (_value.isNaN) {
186+
return;
187+
}
188+
173189
var range = _component.findComponent(Range);
174190
if (range == null) {
175191
return;
@@ -211,6 +227,14 @@ private class EndBehaviour extends DataBehaviour {
211227
@:dox(hide) @:noCompletion
212228
private class MinBehaviour extends DataBehaviour {
213229
private override function validateData() {
230+
if (_value == null || _value.isNull) {
231+
return;
232+
}
233+
234+
if (_value.isNaN) {
235+
return;
236+
}
237+
214238
var range = _component.findComponent(Range);
215239
if (range == null) {
216240
return;
@@ -235,6 +259,14 @@ private class MinBehaviour extends DataBehaviour {
235259
@:dox(hide) @:noCompletion
236260
private class MaxBehaviour extends DataBehaviour {
237261
private override function validateData() {
262+
if (_value == null || _value.isNull) {
263+
return;
264+
}
265+
266+
if (_value.isNaN) {
267+
return;
268+
}
269+
238270
var range = _component.findComponent(Range);
239271
if (range == null) {
240272
return;
@@ -285,6 +317,10 @@ private class PosBehaviour extends DataBehaviour {
285317
private class CenterBehaviour extends DefaultBehaviour {
286318
public override function set(value:Variant) {
287319
super.set(value);
320+
if (_value.isNaN) {
321+
return;
322+
}
323+
288324
if (value != null && value.isNull == false) {
289325
var slider:Slider = cast(_component, Slider);
290326
slider.pos = _value;
@@ -302,6 +338,10 @@ private class CenterBehaviour extends DefaultBehaviour {
302338

303339
private class MinorTicks extends DataBehaviour {
304340
public override function validateData() {
341+
if (_value.isNaN) {
342+
return;
343+
}
344+
305345
if (_value != null && _value.isNull == false) {
306346
var slider:Slider = cast(_component, Slider);
307347
slider.addClass("minor-ticks");
@@ -332,6 +372,10 @@ private class MinorTicks extends DataBehaviour {
332372

333373
private class MajorTicks extends DataBehaviour {
334374
public override function validateData() {
375+
if (_value.isNaN) {
376+
return;
377+
}
378+
335379
if (_value != null && _value.isNull == false) {
336380
var slider:Slider = cast(_component, Slider);
337381
slider.addClass("major-ticks");

haxe/ui/util/Variant.hx

+12
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,18 @@ abstract Variant(VariantType) from VariantType {
110110
}
111111
}
112112

113+
public var isNaN(get, never):Bool;
114+
private inline function get_isNaN():Bool {
115+
if (isNull) {
116+
return true;
117+
}
118+
return switch (this) {
119+
case VT_Int(s): Math.isNaN(s);
120+
case VT_Float(s): Math.isNaN(s);
121+
default: true;
122+
}
123+
}
124+
113125
// ************************************************************************************************************
114126
// BOOLS
115127
// ************************************************************************************************************

0 commit comments

Comments
 (0)