add trackbar 'sub-consumer' for value label refresh when 'change-on-release'
This commit is contained in:
@@ -50,6 +50,10 @@ void TrackBar::setConsumer(doubleconsumer consumer) {
|
||||
this->consumer = std::move(consumer);
|
||||
}
|
||||
|
||||
void TrackBar::setSubConsumer(doubleconsumer consumer) {
|
||||
this->subconsumer = std::move(consumer);
|
||||
}
|
||||
|
||||
void TrackBar::mouseMove(GUI*, int x, int) {
|
||||
glm::vec2 pos = calcPos();
|
||||
value = x - trackWidth/2;
|
||||
@@ -63,6 +67,9 @@ void TrackBar::mouseMove(GUI*, int x, int) {
|
||||
if (consumer && !changeOnRelease) {
|
||||
consumer(value);
|
||||
}
|
||||
if (subconsumer) {
|
||||
subconsumer(value);
|
||||
}
|
||||
}
|
||||
|
||||
void TrackBar::mouseRelease(GUI*, int, int) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define GRAPHICS_UI_ELEMENTS_TRACKBAR_HPP_
|
||||
|
||||
#include "UINode.hpp"
|
||||
#include "../../../data/dynamic_fwd.hpp"
|
||||
|
||||
namespace gui {
|
||||
class TrackBar : public UINode {
|
||||
@@ -9,6 +10,7 @@ namespace gui {
|
||||
glm::vec4 trackColor {1.0f, 1.0f, 1.0f, 0.4f};
|
||||
doublesupplier supplier = nullptr;
|
||||
doubleconsumer consumer = nullptr;
|
||||
doubleconsumer subconsumer = nullptr;
|
||||
double min;
|
||||
double max;
|
||||
double value;
|
||||
@@ -23,8 +25,9 @@ namespace gui {
|
||||
int trackWidth=12);
|
||||
virtual void draw(const DrawContext* pctx, Assets* assets) override;
|
||||
|
||||
virtual void setSupplier(doublesupplier supplier);
|
||||
virtual void setConsumer(doubleconsumer consumer);
|
||||
virtual void setSupplier(doublesupplier);
|
||||
virtual void setConsumer(doubleconsumer);
|
||||
virtual void setSubConsumer(doubleconsumer);
|
||||
|
||||
virtual void mouseMove(GUI*, int x, int y) override;
|
||||
virtual void mouseRelease(GUI*, int x, int y) override;
|
||||
|
||||
+11
-11
@@ -392,26 +392,26 @@ static std::shared_ptr<UINode> readImage(UiXmlReader& reader, const xml::xmlelem
|
||||
}
|
||||
|
||||
static std::shared_ptr<UINode> readTrackBar(UiXmlReader& reader, const xml::xmlelement& element) {
|
||||
float min = element->attr("min", "0.0").asFloat();
|
||||
float max = element->attr("max", "1.0").asFloat();
|
||||
const auto& env = reader.getEnvironment();
|
||||
const auto& file = reader.getFilename();
|
||||
float minv = element->attr("min", "0.0").asFloat();
|
||||
float maxv = element->attr("max", "1.0").asFloat();
|
||||
float def = element->attr("value", "0.0").asFloat();
|
||||
float step = element->attr("step", "1.0").asFloat();
|
||||
int trackWidth = element->attr("track-width", "12").asInt();
|
||||
auto bar = std::make_shared<TrackBar>(min, max, def, step, trackWidth);
|
||||
auto bar = std::make_shared<TrackBar>(minv, maxv, def, step, trackWidth);
|
||||
_readUINode(reader, element, *bar);
|
||||
if (element->has("consumer")) {
|
||||
bar->setConsumer(scripting::create_number_consumer(
|
||||
reader.getEnvironment(),
|
||||
element->attr("consumer").getText(),
|
||||
reader.getFilename()
|
||||
));
|
||||
env, element->attr("consumer").getText(), file));
|
||||
}
|
||||
if (element->has("sub-consumer")) {
|
||||
bar->setSubConsumer(scripting::create_number_consumer(
|
||||
env, element->attr("sub-consumer").getText(), file));
|
||||
}
|
||||
if (element->has("supplier")) {
|
||||
bar->setSupplier(scripting::create_number_supplier(
|
||||
reader.getEnvironment(),
|
||||
element->attr("supplier").getText(),
|
||||
reader.getFilename()
|
||||
));
|
||||
env, element->attr("supplier").getText(), file));
|
||||
}
|
||||
if (element->has("track-color")) {
|
||||
bar->setTrackColor(element->attr("track-color").asColor());
|
||||
|
||||
Reference in New Issue
Block a user