From 9cd751ada1bc04b64566e6d27e4145b65546c286 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Wed, 29 Jun 2016 13:23:20 +0200 Subject: [PATCH] Fix min/max values for int, float, and vector properties --- modules/onscreengui/src/renderproperties.cpp | 133 +++++-------------- 1 file changed, 34 insertions(+), 99 deletions(-) diff --git a/modules/onscreengui/src/renderproperties.cpp b/modules/onscreengui/src/renderproperties.cpp index e59e56221b..0d870c18f4 100644 --- a/modules/onscreengui/src/renderproperties.cpp +++ b/modules/onscreengui/src/renderproperties.cpp @@ -132,7 +132,10 @@ void renderIntProperty(Property* prop, const std::string& ownerName) { ImGui::PushID((ownerName + "." + name).c_str()); IntProperty::ValueType value = *p; - ImGui::SliderInt(name.c_str(), &value, p->minValue(), p->maxValue()); + int min = p->minValue(); + int max = p->maxValue(); + + ImGui::SliderInt(name.c_str(), &value, min, max); if (value != p->value()) executeScript(p->fullyQualifiedIdentifier(), std::to_string(value)); @@ -146,7 +149,9 @@ void renderFloatProperty(Property* prop, const std::string& ownerName) { ImGui::PushID((ownerName + "." + name).c_str()); FloatProperty::ValueType value = *p; - ImGui::SliderFloat(name.c_str(), &value, p->minValue(), p->maxValue()); + float min = p->minValue(); + float max = p->maxValue(); + ImGui::SliderFloat(name.c_str(), &value, min, max); if (value != p->value()) executeScript(p->fullyQualifiedIdentifier(), std::to_string(value)); @@ -160,8 +165,14 @@ void renderVec2Property(Property* prop, const std::string& ownerName) { ImGui::PushID((ownerName + "." + name).c_str()); Vec2Property::ValueType value = *p; - - ImGui::SliderFloat2(name.c_str(), &value.x, std::min(p->minValue().x, p->minValue().y), std::max(p->maxValue().x, p->maxValue().y)); + float min = std::min(p->minValue().x, p->minValue().y); + float max = std::max(p->maxValue().x, p->maxValue().y); + ImGui::SliderFloat2( + name.c_str(), + &value.x, + min, + max + ); if (value != p->value()) executeScript(p->fullyQualifiedIdentifier(), @@ -176,8 +187,15 @@ void renderVec3Property(Property* prop, const std::string& ownerName) { ImGui::PushID((ownerName + "." + name).c_str()); Vec3Property::ValueType value = *p; + float min = std::min(std::min(p->minValue().x, p->minValue().y), p->minValue().z); + float max = std::max(std::max(p->maxValue().x, p->maxValue().y), p->maxValue().z); - ImGui::SliderFloat3(name.c_str(), &value.x, p->minValue().x, p->maxValue().x); + ImGui::SliderFloat3( + name.c_str(), + &value.x, + min, + max + ); if (value != p->value()) executeScript(p->fullyQualifiedIdentifier(), @@ -194,8 +212,17 @@ void renderVec4Property(Property* prop, const std::string& ownerName) { ImGui::PushID((ownerName + "." + name).c_str()); Vec4Property::ValueType value = *p; + float min = std::min(std::min(std::min( + p->minValue().x, p->minValue().y), p->minValue().z), p->minValue().w); + float max = std::max(std::max(std::max( + p->maxValue().x, p->maxValue().y), p->maxValue().z), p->maxValue().w); - ImGui::SliderFloat4(name.c_str(), &value.x, p->minValue().x, p->maxValue().x); + ImGui::SliderFloat4( + name.c_str(), + &value.x, + min, + max + ); if (value != p->value()) executeScript(p->fullyQualifiedIdentifier(), @@ -218,96 +245,4 @@ void renderTriggerProperty(Property* prop, const std::string& ownerName) { ImGui::PopID(); } -//void renderBoolProperty(Property* prop, const std::string& ownerName) { -// BoolProperty* p = static_cast(prop); -// std::string name = p->guiName(); - -// BoolProperty::ValueType value = *p; -// ImGui::Checkbox(name.c_str(), &value); -// p->set(value); -//} - -//void renderOptionProperty(Property* prop, const std::string& ownerName) { -// OptionProperty* p = static_cast(prop); -// std::string name = p->guiName(); - -// int value = *p; -// std::vector options = p->options(); -// for (const OptionProperty::Option& o : options) { -// ImGui::RadioButton(name.c_str(), &value, o.value); -// ImGui::SameLine(); -// ImGui::Text(o.description.c_str()); -// } -// p->set(value); -//} - -//void renderSelectionProperty(Property* prop, const std::string& ownerName) { -// SelectionProperty* p = static_cast(prop); -// std::string name = p->guiName(); - -// if (ImGui::CollapsingHeader(name.c_str())) { -// const std::vector& options = p->options(); -// std::vector newSelectedIndices; - -// std::vector selectedIndices = p->value(); - -// for (int i = 0; i < options.size(); ++i) { -// std::string description = options[i].description; -// bool selected = std::find(selectedIndices.begin(), selectedIndices.end(), i) != selectedIndices.end(); -// ImGui::Checkbox(description.c_str(), &selected); - -// if (selected) -// newSelectedIndices.push_back(i); -// } - -// p->setValue(std::move(newSelectedIndices)); -// } -//} - -//void renderIntProperty(Property* prop, const std::string& ownerName) { -// IntProperty* p = static_cast(prop); -// std::string name = p->guiName(); - -// IntProperty::ValueType value = *p; -// ImGui::SliderInt(name.c_str(), &value, p->minValue(), p->maxValue()); -// p->set(value); -//} - -//void renderFloatProperty(Property* prop, const std::string& ownerName) { -// FloatProperty* p = static_cast(prop); -// std::string name = p->guiName(); - -// FloatProperty::ValueType value = *p; -// ImGui::SliderFloat(name.c_str(), &value, p->minValue(), p->maxValue()); -// p->set(value); -//} - -//void renderVec2Property(Property* prop, const std::string& ownerName) { -// Vec2Property* p = static_cast(prop); -// std::string name = p->guiName(); - -// Vec2Property::ValueType value = *p; - -// ImGui::SliderFloat2(name.c_str(), &value.x, p->minValue().x, p->maxValue().x); -// p->set(value); -//} - - -//void renderVec3Property(Property* prop, const std::string& ownerName) { -// Vec3Property* p = static_cast(prop); -// std::string name = p->guiName(); - -// Vec3Property::ValueType value = *p; - -// ImGui::SliderFloat3(name.c_str(), &value.x, p->minValue().x, p->maxValue().x); -// p->set(value); -//} - -//void renderTriggerProperty(Property* prop, const std::string& ownerName) { -// std::string name = prop->guiName(); -// bool pressed = ImGui::Button(name.c_str()); -// if (pressed) -// prop->set(0); -//} - -} // namespace openspace \ No newline at end of file +} // namespace openspace