按钮颜色

This commit is contained in:
daiqingshuang 2025-04-21 14:41:24 +08:00
parent 542949e9f5
commit 28980f8c41
7 changed files with 34 additions and 25 deletions

View File

@ -6,7 +6,6 @@
#include "widget/panel_widget/mbox.h"
mbutton::mbutton() {
color_ = { 0.2f, 0.2f, 0.2f, 1 };
slot_.h_alignment(horizontal_alignment_t::center);
slot_.v_alignment(vertical_alignment_t::center);
}
@ -17,7 +16,14 @@ void mbutton::init() {
}
void mbutton::setup_widget(const button_args& in_args) {
mborder<button_args>::setup_widget(in_args);
normal_color_ = in_args.normal_color();
hover_color_ = in_args.hover_color();
pressed_color_ = in_args.pressed_color();
color_ = normal_color_;
slot_.h_alignment(horizontal_alignment_t::center);
slot_.v_alignment(vertical_alignment_t::center);
set_visibility(visibility_t::visible);
}
void mbutton::on_paint(mirage_paint_context& in_context) {
@ -34,7 +40,7 @@ void mbutton::on_paint(mirage_paint_context& in_context) {
void mbutton::on_click(const Eigen::Vector2f& in_position, mouse_button in_button) {
mborder::on_click(in_position, in_button);
std::println(std::cout, "点击 Button: {}, {}", in_position.x(), in_position.y());
color_ = {0.2f, 0.2f, 0.2f, 1};
color_ = pressed_color_;
invalidate(invalidate_reason::paint);
}
@ -47,21 +53,21 @@ void mbutton::on_double_click(const Eigen::Vector2f& in_position, mouse_button i
void mbutton::on_mouse_enter() {
mborder::on_mouse_enter();
std::println(std::cout, "鼠标进入 Button");
color_ = {0.2f, 0.2f, 0.2f, 1};
color_ = hover_color_;
invalidate(invalidate_reason::paint);
}
void mbutton::on_mouse_leave() {
mborder::on_mouse_leave();
std::println(std::cout, "鼠标离开 Button");
color_ = {0.1f, 0.1f, 0.1f, 1};
color_ = normal_color_;
invalidate(invalidate_reason::paint);
}
hit_test_handle mbutton::on_mouse_button_down(const Eigen::Vector2f& in_position, mouse_button in_button) {
mborder::on_mouse_button_down(in_position, in_button);
std::println(std::cout, "鼠标按下 Button: {}, {}", in_position.x(), in_position.y());
color_ = {0.1f, 0.1f, 0.1f, 1};
color_ = pressed_color_;
invalidate(invalidate_reason::paint);
return hit_test_handle::handled();
}
@ -69,7 +75,7 @@ hit_test_handle mbutton::on_mouse_button_down(const Eigen::Vector2f& in_position
hit_test_handle mbutton::on_mouse_button_up(const Eigen::Vector2f& in_position, mouse_button in_button) {
mborder::on_mouse_button_up(in_position, in_button);
std::println(std::cout, "鼠标释放 Button: {}, {}", in_position.x(), in_position.y());
color_ = {0.2f, 0.2f, 0.2f, 1};
color_ = normal_color_;
invalidate(invalidate_reason::paint);
return hit_test_handle::handled();
}

View File

@ -2,7 +2,9 @@
#include "mborder.h"
struct button_args {
WARG(linear_color, color)
WARG(linear_color, normal_color, linear_color(0.2f, 0.2f, 0.2f, 1))
WARG(linear_color, hover_color, linear_color(0.2f, 0.2f, 0.2f, 1))
WARG(linear_color, pressed_color, linear_color(0.1f, 0.1f, 0.1f, 1))
};
class mbutton : public mborder<button_args> {
@ -19,5 +21,9 @@ public:
virtual hit_test_handle on_mouse_button_down(const Eigen::Vector2f& in_position, mouse_button in_button) override;
virtual hit_test_handle on_mouse_button_up(const Eigen::Vector2f& in_position, mouse_button in_button) override;
private:
linear_color normal_color_;
linear_color hover_color_;
linear_color pressed_color_;
linear_color color_;
};

View File

@ -5,10 +5,7 @@
void mimage::setup_widget(const image_args& in_args) {
set_color(in_args.color());
set_image(in_args.image());
if (in_args.sampler())
set_sampler(in_args.sampler());
else
set_sampler(texture_sampler_builder::get_sampler(sampler_type::default_));
set_sampler(in_args.sampler());
}
void mimage::on_paint(mirage_paint_context& in_context) {

View File

@ -5,9 +5,9 @@
class texture;
struct image_args {
WARG(std::shared_ptr<texture>, image)
WARG(linear_color, color)
WARG(std::shared_ptr<texture_sampler>, sampler)
WARG(std::shared_ptr<texture>, image, {})
WARG(linear_color, color, linear_color::white())
WARG(std::shared_ptr<texture_sampler>, sampler, texture_sampler_builder::get_sampler(sampler_type::default_))
};
class mimage : public mleaf_widget<image_args> {

View File

@ -9,9 +9,9 @@
void mtext_block::setup_widget(const text_block_args& in_args) {
text_ = in_args.text();
font_ = in_args.font();
font_size_ = in_args.font_size().value_or(15.f);
line_spacing_ = in_args.line_spacing().value_or(1.2f);
max_width_ = in_args.max_width().value_or(0.f);
font_size_ = in_args.font_size();
line_spacing_ = in_args.line_spacing();
max_width_ = in_args.max_width();
update_layout();
}

View File

@ -5,11 +5,11 @@
class font_face_interface;
struct text_block_args {
WARG(std::u32string, text)
WARG(std::shared_ptr<font_face_interface>, font)
WARG(std::optional<float>, font_size)
WARG(std::optional<float>, line_spacing)
WARG(std::optional<float>, max_width)
WARG(std::u32string, text, {})
WARG(std::shared_ptr<font_face_interface>, font, {})
WARG(float, font_size, 24.f)
WARG(float, line_spacing, 1.2f)
WARG(float, max_width, 0.f)
};
class mtext_block : public mleaf_widget<text_block_args> {

View File

@ -134,9 +134,9 @@ public:
virtual void setup_widget(const ConstructArgs& in_args) {}
};
#define WARG(type, name) \
#define WARG(type, name, default_value) \
protected: \
type name##_{}; \
type name##_ = default_value; \
public: \
const auto& name() const { return name##_; } \
auto& name(const type& in_value) { \