From 261ed2b44b8aa0d837420f2d6966ac91688c555c Mon Sep 17 00:00:00 2001 From: thecozies <79979276+thecozies@users.noreply.github.com> Date: Mon, 28 Jul 2025 09:54:05 -0500 Subject: [PATCH] flex wrap and context root being assets --- assets/icons/Keyboard.svg | 15 +------ src/ui/core/ui_context.cpp | 8 ++++ src/ui/elements/ui_select.cpp | 2 +- src/ui/elements/ui_style.cpp | 17 ++++++++ src/ui/elements/ui_style.h | 1 + src/ui/elements/ui_types.h | 6 +++ src/ui/ui_player_card.cpp | 73 ++++++++++++++++++++++++++++------- src/ui/ui_player_card.h | 3 ++ 8 files changed, 95 insertions(+), 30 deletions(-) diff --git a/assets/icons/Keyboard.svg b/assets/icons/Keyboard.svg index 5f68e78..880ceb0 100644 --- a/assets/icons/Keyboard.svg +++ b/assets/icons/Keyboard.svg @@ -1,16 +1,3 @@ - - - - - - - - - - - - - - + diff --git a/src/ui/core/ui_context.cpp b/src/ui/core/ui_context.cpp index cff69fc..97d5baf 100644 --- a/src/ui/core/ui_context.cpp +++ b/src/ui/core/ui_context.cpp @@ -5,6 +5,7 @@ #include "slot_map.h" #include "RmlUi/Core/StreamMemory.h" +#include "RmlUi/../../Source/Core/DocumentHeader.h" #include "ultramodern/error_handling.hpp" #include "recomp_ui.h" @@ -238,9 +239,16 @@ recompui::ContextId recompui::create_context() { root->shim = false; ret.open(); + + // TODO: Utilize existing headers (for full continuity between documents) or get absolute path of assets. + Rml::DocumentHeader header = Rml::DocumentHeader(); + header.source = "assets/"; + doc->ProcessHeader(&header); + root->set_width(100.0f, Unit::Percent); root->set_height(100.0f, Unit::Percent); root->set_display(Display::Flex); + ret.close(); doc->Hide(); diff --git a/src/ui/elements/ui_select.cpp b/src/ui/elements/ui_select.cpp index ce8ccf0..2ee2f7c 100644 --- a/src/ui/elements/ui_select.cpp +++ b/src/ui/elements/ui_select.cpp @@ -163,7 +163,7 @@ namespace recompui { ContextId context = get_current_context(); Svg *arrow = context.create_element( &selectarrow_element, - "assets/icons/Arrow.svg" + "icons/Arrow.svg" ); arrow->set_width(24.0f); diff --git a/src/ui/elements/ui_style.cpp b/src/ui/elements/ui_style.cpp index 9029271..f854181 100644 --- a/src/ui/elements/ui_style.cpp +++ b/src/ui/elements/ui_style.cpp @@ -546,6 +546,23 @@ namespace recompui { } } + void Style::set_flex_wrap(FlexWrap flex_wrap) { + switch (flex_wrap) { + case FlexWrap::NoWrap: + set_property(Rml::PropertyId::FlexWrap, Rml::Style::FlexWrap::Nowrap); + break; + case FlexWrap::Wrap: + set_property(Rml::PropertyId::FlexWrap, Rml::Style::FlexWrap::Wrap); + break; + case FlexWrap::WrapReverse: + set_property(Rml::PropertyId::FlexWrap, Rml::Style::FlexWrap::WrapReverse); + break; + default: + assert(false && "Unknown flex wrap."); + break; + } + } + void Style::set_align_items(AlignItems align_items) { set_property(Rml::PropertyId::AlignItems, to_rml(align_items)); } diff --git a/src/ui/elements/ui_style.h b/src/ui/elements/ui_style.h index f656bf5..539d05e 100644 --- a/src/ui/elements/ui_style.h +++ b/src/ui/elements/ui_style.h @@ -91,6 +91,7 @@ namespace recompui { void set_flex(float grow, float shrink); void set_flex(float grow, float shrink, float basis, Unit basis_unit = Unit::Percent); void set_flex_direction(FlexDirection flex_direction); + void set_flex_wrap(FlexWrap flex_wrap); void set_align_items(AlignItems align_items); void set_overflow(Overflow overflow); void set_overflow_x(Overflow overflow); diff --git a/src/ui/elements/ui_types.h b/src/ui/elements/ui_types.h index 726b25c..8078e00 100644 --- a/src/ui/elements/ui_types.h +++ b/src/ui/elements/ui_types.h @@ -222,6 +222,12 @@ namespace recompui { ColumnReverse }; + enum class FlexWrap { + NoWrap, + Wrap, + WrapReverse + }; + enum class AlignItems { FlexStart, FlexEnd, diff --git a/src/ui/ui_player_card.cpp b/src/ui/ui_player_card.cpp index 70ffdd2..75c3492 100644 --- a/src/ui/ui_player_card.cpp +++ b/src/ui/ui_player_card.cpp @@ -1,4 +1,5 @@ #include "ui_player_card.h" +#include "elements/ui_label.h" namespace recompui { @@ -19,26 +20,68 @@ PlayerCard::PlayerCard( const float size = is_assignment_card ? assign_player_card_size : static_player_card_size; const float icon_size = is_assignment_card ? assign_player_card_icon_size : static_player_card_icon_size; + recompui::ContextId context = get_current_context(); + set_display(Display::Flex); set_flex_direction(FlexDirection::Column); - set_align_items(AlignItems::Center); - set_justify_content(JustifyContent::Center); + set_align_items(AlignItems::FlexStart); + set_justify_content(JustifyContent::FlexStart); set_width(size); - set_height(size); - set_border_color(theme::color::BorderSoft); - set_border_width(theme::border::width, Unit::Dp); - set_border_radius(theme::border::radius_sm, Unit::Dp); - set_background_color(theme::color::Transparent); + set_height_auto(); + set_gap(8.0f); - recompui::ContextId context = get_current_context(); - icon = context.create_element(this, "assets/icons/RecordBorder.svg"); + if (!is_assignment_card) { + auto player_label = context.create_element