diff --git a/src/mirage_widget/src/widget/compound_widget/mbutton.cpp b/src/mirage_widget/src/widget/compound_widget/mbutton.cpp index 26aa88b..6ab8716 100644 --- a/src/mirage_widget/src/widget/compound_widget/mbutton.cpp +++ b/src/mirage_widget/src/widget/compound_widget/mbutton.cpp @@ -40,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_ = pressed_color_; + color_ = normal_color_; invalidate(invalidate_reason::paint); } diff --git a/src/mirage_widget/src/widget/compound_widget/mbutton.h b/src/mirage_widget/src/widget/compound_widget/mbutton.h index 296b97e..30caf1d 100644 --- a/src/mirage_widget/src/widget/compound_widget/mbutton.h +++ b/src/mirage_widget/src/widget/compound_widget/mbutton.h @@ -3,7 +3,7 @@ struct button_args { 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, hover_color, linear_color(0.1f, 0.1f, 0.1f, 1)) WARG(linear_color, pressed_color, linear_color(0.1f, 0.1f, 0.1f, 1)) }; @@ -16,6 +16,7 @@ public: virtual void on_click(const Eigen::Vector2f& in_position, mouse_button in_button) override; virtual void on_double_click(const Eigen::Vector2f& in_position, mouse_button in_button) override; + hit_test_handle on_mouse_move(const Eigen::Vector2f& in_position) override { return hit_test_handle::handled(); } virtual void on_mouse_enter() override; virtual void on_mouse_leave() override; virtual hit_test_handle on_mouse_button_down(const Eigen::Vector2f& in_position, mouse_button in_button) override; diff --git a/src/mirage_widget/src/widget/leaf_widget/mtext_block.cpp b/src/mirage_widget/src/widget/leaf_widget/mtext_block.cpp index 61c0de7..fafe83b 100644 --- a/src/mirage_widget/src/widget/leaf_widget/mtext_block.cpp +++ b/src/mirage_widget/src/widget/leaf_widget/mtext_block.cpp @@ -29,12 +29,6 @@ auto mtext_block::compute_desired_size(float in_layout_scale_multiplier) const - return layout_.total_size; } -hit_test_handle mtext_block::on_mouse_wheel(const Eigen::Vector2f& in_position, const wheel_event& in_delta) { - font_size_ += in_delta.delta_y; - update_layout(); - return mleaf_widget::on_mouse_wheel(in_position, in_delta); -} - void mtext_block::update_layout() { layout_ = font_manager::instance().layout_text(text_, font_, font_size_, max_width_, line_spacing_); invalidate(invalidate_reason::layout); diff --git a/src/mirage_widget/src/widget/leaf_widget/mtext_block.h b/src/mirage_widget/src/widget/leaf_widget/mtext_block.h index 2ee1c1e..801ab52 100644 --- a/src/mirage_widget/src/widget/leaf_widget/mtext_block.h +++ b/src/mirage_widget/src/widget/leaf_widget/mtext_block.h @@ -48,9 +48,7 @@ public: auto get_line_spacing() const { return line_spacing_; } auto get_max_width() const { return max_width_; } - hit_test_handle on_mouse_move(const Eigen::Vector2f& in_position) override { (void)in_position; return hit_test_handle::handled(); } auto compute_desired_size(float in_layout_scale_multiplier) const -> Eigen::Vector2f override; - hit_test_handle on_mouse_wheel(const Eigen::Vector2f& in_position, const wheel_event& in_delta) override; private: void update_layout(); diff --git a/src/mirage_widget/src/widget/panel_widget/mbox.cpp b/src/mirage_widget/src/widget/panel_widget/mbox.cpp index 82ee8f1..e83471a 100644 --- a/src/mirage_widget/src/widget/panel_widget/mbox.cpp +++ b/src/mirage_widget/src/widget/panel_widget/mbox.cpp @@ -5,7 +5,7 @@ void mh_box::arrange_children(const geometry_t& in_allotted_geometry) { arrange_box_children(in_allotted_geometry, get_dpi_scale(), - visibility_t::any_visible, + visibility_t::any_layout, get_slots()); } @@ -17,7 +17,7 @@ Eigen::Vector2f mh_box::compute_desired_size(float in_layout_scale_multiplier) c void mv_box::arrange_children(const geometry_t& in_allotted_geometry) { arrange_box_children(in_allotted_geometry, get_dpi_scale(), - visibility_t::any_visible, + visibility_t::any_layout, get_slots()); } diff --git a/src/mirage_widget/src/window/mwindow_impl.cpp b/src/mirage_widget/src/window/mwindow_impl.cpp index 19318bb..d72886e 100644 --- a/src/mirage_widget/src/window/mwindow_impl.cpp +++ b/src/mirage_widget/src/window/mwindow_impl.cpp @@ -1,3 +1,5 @@ +#include + #include "mwindow.h" #include "geometry/dpi_helper.h" #include "platform_window/platform_window.h" @@ -390,11 +392,10 @@ public: return perform_hit_test(content_widget_.get(), window_pos, hit_func); } - hit_test_result perform_hit_test( + static hit_test_result perform_hit_test( mwidget_interface* widget, const Eigen::Vector2f& window_pos, - const std::function& hit_func) const - { + const std::function& hit_func) { if (!widget) { return {}; } @@ -402,15 +403,15 @@ public: const auto& widget_geo = widget->get_geometry(); // 检查点是否在控件区域内 - auto widget_local_pos = widget_geo.is_under_location(window_pos); + const auto widget_local_pos = widget_geo.is_under_location(window_pos); if (!widget_local_pos) { return {}; } // 先递归查找子控件(从前到后) // 这样可以优先处理上层控件的点击 - for (auto it = widget->get_children().rbegin(); it != widget->get_children().rend(); ++it) { - if (const auto& result = perform_hit_test(it->get(), window_pos, hit_func)) { + for (const auto& it : std::ranges::reverse_view(widget->get_children())) { + if (const auto& result = perform_hit_test(it.get(), window_pos, hit_func)) { return result; } } @@ -427,11 +428,11 @@ public: } // 访问器 - platform_window* get_platform_window() const { + [[nodiscard]] auto get_platform_window() const { return platform_window_.get(); } - const mirage_window_state& get_render_state() const { + [[nodiscard]] const auto& get_render_state() const { return *window_state_; }