Partial fix for spinner boxes not using the _step property of SpinnerPreference.

(https://github.com/vircadia/vircadia/issues/117)
- In SpinBoxPreference.qml, SpinBox was missing "realStepSize: preference.step".
- Had to change FloatPreference::step from float to double, because there is some truncation happening somewhere.  For example, a step of 0.01f was acting like 0.00 because (0.01f < 0.01).
- Changed FloatPreference::decimals (number of decimal places) from float to uint, because it seemed to make more sense.
- Changed the 'User real-world height' spinbox to use a resolution of 1cm (for display and step) rather than 1mm.
- Remaining bug: the up & down buttons of the spinbox fail to change the value, at some values, though the mouse wheel always works.  Repro:
Settings > Controls > User real-world height
Hover the mouse over the box and and scroll the mouse wheel down until the value is at 1.15.
Click the up button a few times and observe that the number can't be increased.
Scroll the mouse wheel forward and observe that the number increases correctly.
- Todo: Change all calls to FloatPreference::setStep to pass doubles, if this change to its parameter type is kept.
This commit is contained in:
Phil Palmer 2020-12-23 22:53:43 -05:00
parent f1576aba78
commit 3b5eb2d24b
3 changed files with 11 additions and 10 deletions

View file

@ -51,6 +51,7 @@ Preference {
decimals: preference.decimals decimals: preference.decimals
minimumValue: preference.min minimumValue: preference.min
maximumValue: preference.max maximumValue: preference.max
realStepSize: preference.step
width: 100 width: 100
anchors { anchors {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter

View file

@ -465,8 +465,8 @@ void setupPreferences() {
auto preference = new SpinnerPreference(VR_MOVEMENT, "User real-world height (meters)", getter, setter); auto preference = new SpinnerPreference(VR_MOVEMENT, "User real-world height (meters)", getter, setter);
preference->setMin(1.0f); preference->setMin(1.0f);
preference->setMax(2.2f); preference->setMax(2.2f);
preference->setDecimals(3); preference->setDecimals(2);
preference->setStep(0.001f); preference->setStep(0.01);
preferences->addPreference(preference); preferences->addPreference(preference);
} }

View file

@ -152,8 +152,8 @@ class FloatPreference : public Preference {
Q_PROPERTY(float value READ getValue WRITE setValue NOTIFY valueChanged) Q_PROPERTY(float value READ getValue WRITE setValue NOTIFY valueChanged)
Q_PROPERTY(float min READ getMin CONSTANT) Q_PROPERTY(float min READ getMin CONSTANT)
Q_PROPERTY(float max READ getMax CONSTANT) Q_PROPERTY(float max READ getMax CONSTANT)
Q_PROPERTY(float step READ getStep CONSTANT) Q_PROPERTY(double step READ getStep CONSTANT)
Q_PROPERTY(float decimals READ getDecimals CONSTANT) Q_PROPERTY(uint decimals READ getDecimals CONSTANT)
public: public:
using Getter = std::function<float()>; using Getter = std::function<float()>;
@ -178,11 +178,11 @@ public:
float getMax() const { return _max; } float getMax() const { return _max; }
void setMax(float max) { _max = max; }; void setMax(float max) { _max = max; };
float getStep() const { return _step; } double getStep() const { return _step; }
void setStep(float step) { _step = step; }; void setStep(double step) { _step = step; };
float getDecimals() const { return _decimals; } uint getDecimals() const { return _decimals; }
void setDecimals(float decimals) { _decimals = decimals; }; void setDecimals(uint decimals) { _decimals = decimals; };
signals: signals:
void valueChanged(); void valueChanged();
@ -194,10 +194,10 @@ protected:
const Getter _getter; const Getter _getter;
const Setter _setter; const Setter _setter;
float _decimals { 0 }; uint _decimals { 0 };
float _min { 0 }; float _min { 0 };
float _max { 1 }; float _max { 1 };
float _step { 0.1f }; double _step { 0.1 };
}; };
class IntPreference : public Preference { class IntPreference : public Preference {