Support alpha-channel in ui::color_picker
This commit is contained in:
parent
17bb412140
commit
d692256580
2 changed files with 24 additions and 6 deletions
|
|
@ -23,6 +23,6 @@ namespace psemek::ui
|
|||
on_value_changed_callback on_value_changed_callback_;
|
||||
};
|
||||
|
||||
std::shared_ptr<color_picker> make_color_picker(element_factory & factory);
|
||||
std::shared_ptr<color_picker> make_color_picker(element_factory & factory, bool alpha = false);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace psemek::ui
|
|||
struct color_picker_impl
|
||||
: color_picker
|
||||
{
|
||||
color_picker_impl(element_factory & factory)
|
||||
color_picker_impl(element_factory & factory, bool alpha)
|
||||
{
|
||||
auto frame = std::make_shared<ui::frame>();
|
||||
frame->set_min_size(geom::vector{250.f, 0.f});
|
||||
|
|
@ -33,7 +33,7 @@ namespace psemek::ui
|
|||
color_view_->set_square(true);
|
||||
|
||||
auto sliders_layout = factory.make_grid_layout();
|
||||
sliders_layout->set_size(3, 2);
|
||||
sliders_layout->set_size(alpha ? 4 : 3, 2);
|
||||
sliders_layout->set_column_weight(0, 0.f);
|
||||
sliders_layout->set_outer_margin(false);
|
||||
|
||||
|
|
@ -55,6 +55,10 @@ namespace psemek::ui
|
|||
blue_label_->set_halign(label::halignment::right);
|
||||
blue_label_->set_valign(label::valignment::center);
|
||||
|
||||
alpha_label_ = factory.make_label("");
|
||||
alpha_label_->set_halign(label::halignment::right);
|
||||
alpha_label_->set_valign(label::valignment::center);
|
||||
|
||||
auto slider_callback = [this](int){
|
||||
set_color(color(), true);
|
||||
};
|
||||
|
|
@ -71,6 +75,10 @@ namespace psemek::ui
|
|||
blue_slider_->set_value_range({0, 255}, false);
|
||||
blue_slider_->on_value_changed(slider_callback, false);
|
||||
|
||||
alpha_slider_ = factory.make_slider();
|
||||
alpha_slider_->set_value_range({0, 255}, false);
|
||||
alpha_slider_->on_value_changed(slider_callback, false);
|
||||
|
||||
hidden_screen->add_child(red_label_, screen::x_policy::fill, screen::y_policy::fill);
|
||||
|
||||
sliders_layout->set(0, 0, hidden_screen);
|
||||
|
|
@ -80,6 +88,12 @@ namespace psemek::ui
|
|||
sliders_layout->set(1, 1, green_slider_);
|
||||
sliders_layout->set(2, 1, blue_slider_);
|
||||
|
||||
if (alpha)
|
||||
{
|
||||
sliders_layout->set(3, 0, alpha_label_);
|
||||
sliders_layout->set(3, 1, alpha_slider_);
|
||||
}
|
||||
|
||||
main_layout->set(0, 0, color_view_);
|
||||
main_layout->set(0, 1, sliders_layout);
|
||||
|
||||
|
|
@ -122,7 +136,7 @@ namespace psemek::ui
|
|||
red_slider_->value(),
|
||||
green_slider_->value(),
|
||||
blue_slider_->value(),
|
||||
255
|
||||
alpha_slider_->value()
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -133,10 +147,12 @@ namespace psemek::ui
|
|||
red_label_ ->set_tagged_text(util::to_string("[color:f00]", static_cast<int>(value[0]), "[/color]"));
|
||||
green_label_->set_tagged_text(util::to_string("[color:0f0]", static_cast<int>(value[1]), "[/color]"));
|
||||
blue_label_ ->set_tagged_text(util::to_string("[color:00f]", static_cast<int>(value[2]), "[/color]"));
|
||||
alpha_label_ ->set_tagged_text(util::to_string("[color:fff]", static_cast<int>(value[3]), "[/color]"));
|
||||
|
||||
red_slider_->set_value(value[0], false);
|
||||
green_slider_->set_value(value[1], false);
|
||||
blue_slider_->set_value(value[2], false);
|
||||
alpha_slider_->set_value(value[3], false);
|
||||
|
||||
if (notify && on_value_changed_callback_)
|
||||
post([cb = on_value_changed_callback_, value]{ cb(value); });
|
||||
|
|
@ -166,16 +182,18 @@ namespace psemek::ui
|
|||
std::shared_ptr<label> red_label_;
|
||||
std::shared_ptr<label> green_label_;
|
||||
std::shared_ptr<label> blue_label_;
|
||||
std::shared_ptr<label> alpha_label_;
|
||||
std::shared_ptr<slider> red_slider_;
|
||||
std::shared_ptr<slider> green_slider_;
|
||||
std::shared_ptr<slider> blue_slider_;
|
||||
std::shared_ptr<slider> alpha_slider_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<color_picker> make_color_picker(element_factory & factory)
|
||||
std::shared_ptr<color_picker> make_color_picker(element_factory & factory, bool alpha)
|
||||
{
|
||||
return std::make_shared<color_picker_impl>(factory);
|
||||
return std::make_shared<color_picker_impl>(factory, alpha);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue