From d14731120b4a6902c27adf6b76b0c414bef0fac4 Mon Sep 17 00:00:00 2001 From: thecozies <79979276+thecozies@users.noreply.github.com> Date: Tue, 29 Jul 2025 14:46:47 -0500 Subject: [PATCH] pointer events property support and apply ptr events None to select arrow svg --- src/ui/elements/ui_select.cpp | 2 ++ src/ui/elements/ui_style.cpp | 11 +++++++++++ src/ui/elements/ui_style.h | 1 + src/ui/elements/ui_types.h | 5 +++++ 4 files changed, 19 insertions(+) diff --git a/src/ui/elements/ui_select.cpp b/src/ui/elements/ui_select.cpp index d02a840..886076a 100644 --- a/src/ui/elements/ui_select.cpp +++ b/src/ui/elements/ui_select.cpp @@ -195,6 +195,8 @@ namespace recompui { arrow->set_width(select_element_caret_size); arrow->set_height(select_element_caret_size); arrow->set_color(theme::color::TextDim); + // makes clicking on the arrow pass click interactions through to whats beneath it + arrow->set_pointer_events(PointerEvents::None); add_style(&hover_style, hover_state); add_style(&focus_style, focus_state); diff --git a/src/ui/elements/ui_style.cpp b/src/ui/elements/ui_style.cpp index 00e104b..c800871 100644 --- a/src/ui/elements/ui_style.cpp +++ b/src/ui/elements/ui_style.cpp @@ -717,4 +717,15 @@ namespace recompui { set_or_add_transformation(Rml::Transforms::Rotate2D(degrees)); } + void Style::set_pointer_events(PointerEvents pointer_events) { + switch (pointer_events) { + case PointerEvents::None: + set_property(Rml::PropertyId::PointerEvents, Rml::Style::PointerEvents::None); + break; + case PointerEvents::Auto: + set_property(Rml::PropertyId::PointerEvents, Rml::Style::PointerEvents::Auto); + break; + } + } + } // namespace recompui diff --git a/src/ui/elements/ui_style.h b/src/ui/elements/ui_style.h index 8362c64..63b100b 100644 --- a/src/ui/elements/ui_style.h +++ b/src/ui/elements/ui_style.h @@ -119,6 +119,7 @@ namespace recompui { void set_tab_index_auto(); void set_tab_index_none(); void set_focusable(bool focusable); + void set_pointer_events(PointerEvents pointer_events); virtual bool is_element() { return false; } ResourceId get_resource_id() { return resource_id; } }; diff --git a/src/ui/elements/ui_types.h b/src/ui/elements/ui_types.h index 8078e00..9743923 100644 --- a/src/ui/elements/ui_types.h +++ b/src/ui/elements/ui_types.h @@ -60,6 +60,11 @@ namespace recompui { Count }; + enum class PointerEvents { + None, + Auto + }; + template >> constexpr uint32_t Events(Enum first) { return 1u << static_cast(first);