Adjust alpha color slider to make it work as percentage or value as specified by the preference settings

This commit is contained in:
Martín Capello 2024-01-11 14:26:08 -03:00
parent b10390625f
commit fdafc585c2

View File

@ -13,6 +13,8 @@
#include "app/color_spaces.h" #include "app/color_spaces.h"
#include "app/color_utils.h" #include "app/color_utils.h"
#include "app/modules/gfx.h" #include "app/modules/gfx.h"
#include "app/ui/alpha_entry.h"
#include "app/ui/alpha_slider.h"
#include "app/ui/color_sliders.h" #include "app/ui/color_sliders.h"
#include "app/ui/expr_entry.h" #include "app/ui/expr_entry.h"
#include "app/ui/skin/skin_slider_property.h" #include "app/ui/skin/skin_slider_property.h"
@ -141,19 +143,25 @@ namespace {
private: private:
int minValue() const { int minValue() const {
if (m_absSlider->isVisible()) auto slider = (m_absSlider->isVisible() ? m_absSlider : m_relSlider);
return m_absSlider->getMinValue();
else if (m_relSlider->isVisible()) if (slider->isVisible()) {
return m_relSlider->getMinValue(); int min;
slider->getSliderThemeInfo(&min, nullptr, nullptr);
return min;
}
else else
return 0; return 0;
} }
int maxValue() const { int maxValue() const {
if (m_absSlider->isVisible()) auto slider = (m_absSlider->isVisible() ? m_absSlider : m_relSlider);
return m_absSlider->getMaxValue();
else if (m_relSlider->isVisible()) if (slider->isVisible()) {
return m_relSlider->getMaxValue(); int max;
slider->getSliderThemeInfo(nullptr, &max, nullptr);
return max;
}
else else
return 0; return 0;
} }
@ -373,7 +381,9 @@ void ColorSliders::addSlider(const Channel channel,
ASSERT(!item.label); ASSERT(!item.label);
item.label = new Label(labelText); item.label = new Label(labelText);
item.box = new HBox(); item.box = new HBox();
item.absSlider = new Slider(absMin, absMax, 0); item.absSlider = (channel != Channel::Alpha
? new Slider(absMin, absMax, 0)
: new AlphaSlider(0, AlphaSlider::Type::ALPHA));
item.relSlider = new Slider(relMin, relMax, 0); item.relSlider = new Slider(relMin, relMax, 0);
item.entry = new ColorEntry(item.absSlider, item.relSlider); item.entry = new ColorEntry(item.absSlider, item.relSlider);
@ -468,8 +478,7 @@ void ColorSliders::onEntryChange(const Channel i)
Slider* slider = (m_mode == Mode::Absolute ? Slider* slider = (m_mode == Mode::Absolute ?
m_items[i].absSlider: m_items[i].absSlider:
m_items[i].relSlider); m_items[i].relSlider);
value = std::clamp(value, slider->getMinValue(), slider->getMaxValue()); slider->updateValue(value);
slider->setValue(value);
onControlChange(i); onControlChange(i);
} }
@ -494,7 +503,10 @@ void ColorSliders::updateEntryText(const Channel i)
Slider* slider = (m_mode == Mode::Absolute ? m_items[i].absSlider: Slider* slider = (m_mode == Mode::Absolute ? m_items[i].absSlider:
m_items[i].relSlider); m_items[i].relSlider);
m_items[i].entry->setTextf("%d", slider->getValue()); int value;
slider->getSliderThemeInfo(nullptr, nullptr, &value);
m_items[i].entry->setTextf("%d", value);
if (m_items[i].entry->hasFocus()) if (m_items[i].entry->hasFocus())
m_items[i].entry->selectAllText(); m_items[i].entry->selectAllText();
} }