diff options
-rw-r--r-- | CruUI/main.cpp | 15 | ||||
-rw-r--r-- | CruUI/ui/control.cpp | 4 | ||||
-rw-r--r-- | CruUI/ui/control.h | 1 | ||||
-rw-r--r-- | CruUI/ui/controls/linear_layout.cpp | 7 | ||||
-rw-r--r-- | CruUI/ui/controls/linear_layout.h | 13 | ||||
-rw-r--r-- | CruUI/ui/controls/text_block.cpp | 4 | ||||
-rw-r--r-- | CruUI/ui/controls/toggle_button.cpp | 2 | ||||
-rw-r--r-- | CruUI/ui/layout_base.h | 31 |
8 files changed, 34 insertions, 43 deletions
diff --git a/CruUI/main.cpp b/CruUI/main.cpp index 3c10f73b..90743e81 100644 --- a/CruUI/main.cpp +++ b/CruUI/main.cpp @@ -9,7 +9,8 @@ using cru::String; using cru::Application; using cru::ui::Window; using cru::ui::MeasureMode; -using cru::ui::MeasureLength; +using cru::ui::Alignment; +using cru::ui::LayoutLength; using cru::ui::controls::LinearLayout; using cru::ui::controls::TextBlock; using cru::ui::controls::ToggleButton; @@ -82,7 +83,7 @@ int APIENTRY wWinMain( }); const auto inner_layout = LinearLayout::Create(LinearLayout::Orientation::Horizontal); - LinearLayout::SetAlignment(inner_layout, cru::ui::Alignment::End); + inner_layout->GetLayoutParams()->width.alignment = Alignment::End; layout->AddChild(inner_layout); @@ -96,7 +97,7 @@ int APIENTRY wWinMain( inner_layout->AddChild(toggle_button); - auto&& create_text_block = [](const String& text, const MeasureLength& width = MeasureLength::Content(), const MeasureLength& height = MeasureLength::Content()) + auto&& create_text_block = [](const String& text, const LayoutLength& width = LayoutLength::Content(), const LayoutLength& height = LayoutLength::Content()) { const auto text_block = TextBlock::Create(text); text_block->GetLayoutParams()->width = width; @@ -105,7 +106,7 @@ int APIENTRY wWinMain( }; { - const auto text_block = create_text_block(L"Hello World!!!", MeasureLength::Exactly(200), MeasureLength::Exactly(80)); + const auto text_block = create_text_block(L"Hello World!!!", LayoutLength::Exactly(200), LayoutLength::Exactly(80)); text_block->mouse_click_event.AddHandler([layout](cru::ui::events::MouseButtonEventArgs& args) { @@ -116,18 +117,18 @@ int APIENTRY wWinMain( } { - const auto text_block = create_text_block(L"This is a very very very very very long sentence!!!", MeasureLength::Stretch(), MeasureLength::Stretch()); + const auto text_block = create_text_block(L"This is a very very very very very long sentence!!!", LayoutLength::Stretch(), LayoutLength::Stretch()); text_block->SetSelectable(true); layout->AddChild(text_block); } { const auto text_block = TextBlock::Create(L"This is a little short sentence!!!"); - LinearLayout::SetAlignment(text_block, cru::ui::Alignment::Start); + text_block->GetLayoutParams()->width.alignment = Alignment::Start; layout->AddChild(text_block); } - layout->AddChild(create_text_block(L"By crupest!!!", MeasureLength::Stretch(), MeasureLength::Stretch())); + layout->AddChild(create_text_block(L"By crupest!!!", LayoutLength::Stretch(), LayoutLength::Stretch())); window.AddChild(layout); diff --git a/CruUI/ui/control.cpp b/CruUI/ui/control.cpp index 0b19c20b..81543a4d 100644 --- a/CruUI/ui/control.cpp +++ b/CruUI/ui/control.cpp @@ -505,7 +505,7 @@ namespace cru { if (!layout_params->Validate()) throw std::runtime_error("LayoutParams is not valid. Please check it."); - auto&& get_available_length_for_child = [](const MeasureLength& layout_length, const float available_length) -> float + auto&& get_available_length_for_child = [](const LayoutLength& layout_length, const float available_length) -> float { switch (layout_length.mode) { @@ -537,7 +537,7 @@ namespace cru { max_child_size.height = size.height; }); - auto&& calculate_final_length = [](const MeasureLength& layout_length, const float length_for_children, const float max_child_length) -> float + auto&& calculate_final_length = [](const LayoutLength& layout_length, const float length_for_children, const float max_child_length) -> float { switch (layout_length.mode) { diff --git a/CruUI/ui/control.h b/CruUI/ui/control.h index c69486c9..ced7f0e3 100644 --- a/CruUI/ui/control.h +++ b/CruUI/ui/control.h @@ -31,6 +31,7 @@ namespace cru { friend class Window; friend class LayoutManager; + protected: struct WindowConstructorTag {}; //Used for constructor for class Window. diff --git a/CruUI/ui/controls/linear_layout.cpp b/CruUI/ui/controls/linear_layout.cpp index 66005b2e..116802ba 100644 --- a/CruUI/ui/controls/linear_layout.cpp +++ b/CruUI/ui/controls/linear_layout.cpp @@ -25,7 +25,7 @@ namespace cru::ui::controls if (!layout_params->Validate()) throw std::runtime_error("LayoutParams is not valid. Please check it."); - auto&& get_available_length_for_child = [](const MeasureLength& layout_length, const float available_length) -> float + auto&& get_available_length_for_child = [](const LayoutLength& layout_length, const float available_length) -> float { switch (layout_length.mode) { @@ -119,7 +119,7 @@ namespace cru::ui::controls actual_size_for_children.height -= rest_available_size_for_children.height; } - auto&& calculate_final_length = [](const MeasureLength& layout_length, const float length_for_children, const float max_child_length) -> float + auto&& calculate_final_length = [](const LayoutLength& layout_length, const float length_for_children, const float max_child_length) -> float { switch (layout_length.mode) { @@ -144,8 +144,9 @@ namespace cru::ui::controls float current_anchor_length = 0; ForeachChild([this, ¤t_anchor_length, rect](Control* control) { + const auto layout_params = control->GetLayoutParams(); const auto size = control->GetDesiredSize(); - const auto alignment = GetAlignment(control); + const auto alignment = orientation_ == Orientation::Horizontal ? layout_params->height.alignment : layout_params->width.alignment; auto&& calculate_anchor = [alignment](const float layout_length, const float control_length) -> float { diff --git a/CruUI/ui/controls/linear_layout.h b/CruUI/ui/controls/linear_layout.h index 7c1fb2a8..ead56081 100644 --- a/CruUI/ui/controls/linear_layout.h +++ b/CruUI/ui/controls/linear_layout.h @@ -6,20 +6,7 @@ namespace cru::ui::controls { class LinearLayout : public Control { - private: - constexpr static auto alignment_key = L"linear_layout_alignment"; - public: - static Alignment GetAlignment(Control* control) - { - return control->GetAdditionalProperty<Alignment>(alignment_key).value_or(Alignment::Center); - } - - static void SetAlignment(Control* control, Alignment alignment) - { - control->SetAdditionalProperty(alignment_key, alignment); - } - enum class Orientation { Horizontal, diff --git a/CruUI/ui/controls/text_block.cpp b/CruUI/ui/controls/text_block.cpp index 45f0d574..fa5e6903 100644 --- a/CruUI/ui/controls/text_block.cpp +++ b/CruUI/ui/controls/text_block.cpp @@ -206,7 +206,7 @@ namespace cru if (layout_params->width.mode == MeasureMode::Stretch && layout_params->height.mode == MeasureMode::Stretch) return available_size; - auto&& get_measure_length = [](const MeasureLength& layout_length, const float available_length) -> float + auto&& get_measure_length = [](const LayoutLength& layout_length, const float available_length) -> float { switch (layout_length.mode) { @@ -236,7 +236,7 @@ namespace cru const Size measure_result(metrics.width, metrics.height); - auto&& calculate_final_length = [](const MeasureLength& layout_length, const float measure_length, const float measure_result_length) -> float + auto&& calculate_final_length = [](const LayoutLength& layout_length, const float measure_length, const float measure_result_length) -> float { if ((layout_length.mode == MeasureMode::Stretch || layout_length.mode == MeasureMode::Exactly) diff --git a/CruUI/ui/controls/toggle_button.cpp b/CruUI/ui/controls/toggle_button.cpp index 94685b6e..9812a6f4 100644 --- a/CruUI/ui/controls/toggle_button.cpp +++ b/CruUI/ui/controls/toggle_button.cpp @@ -112,7 +112,7 @@ namespace cru::ui::controls { const auto layout_params = GetLayoutParams(); - auto&& get_measure_length = [](const MeasureLength& layout_length, const float available_length, const float fix_length) -> float + auto&& get_measure_length = [](const LayoutLength& layout_length, const float available_length, const float fix_length) -> float { switch (layout_length.mode) { diff --git a/CruUI/ui/layout_base.h b/CruUI/ui/layout_base.h index 80a204c4..c3af463a 100644 --- a/CruUI/ui/layout_base.h +++ b/CruUI/ui/layout_base.h @@ -26,27 +26,27 @@ namespace cru Stretch }; - struct MeasureLength final + struct LayoutLength final { - constexpr static MeasureLength Exactly(const float length) + constexpr static LayoutLength Exactly(const float length, const Alignment alignment = Alignment::Center) { - return MeasureLength(MeasureMode::Exactly, length); + return LayoutLength(MeasureMode::Exactly, length, alignment); } - constexpr static MeasureLength Content() + constexpr static LayoutLength Content(const Alignment alignment = Alignment::Center) { - return MeasureLength(MeasureMode::Content, 0); + return LayoutLength(MeasureMode::Content, 0, alignment); } - constexpr static MeasureLength Stretch() + constexpr static LayoutLength Stretch(const Alignment alignment = Alignment::Center) { - return MeasureLength(MeasureMode::Stretch, 0); + return LayoutLength(MeasureMode::Stretch, 0, alignment); } - constexpr MeasureLength() = default; + constexpr LayoutLength() = default; - constexpr explicit MeasureLength(const MeasureMode mode, const float length) - : length(length), mode(mode) + constexpr explicit LayoutLength(const MeasureMode mode, const float length, const Alignment alignment) + : length(length), mode(mode), alignment(alignment) { } @@ -56,7 +56,7 @@ namespace cru if (mode == MeasureMode::Exactly && length < 0.0) { #ifdef CRU_DEBUG - ::OutputDebugStringW(L"MeasureLength validation error: mode is Exactly but length is less than 0.\n"); + ::OutputDebugStringW(L"LayoutLength validation error: mode is Exactly but length is less than 0.\n"); #endif return false; } @@ -65,6 +65,7 @@ namespace cru float length = 0.0; MeasureMode mode = MeasureMode::Content; + Alignment alignment = Alignment::Center; }; struct BasicLayoutParams final @@ -81,22 +82,22 @@ namespace cru if (!width.Validate()) { #ifdef CRU_DEBUG - ::OutputDebugStringW(L"Width(MeasureLength) is not valid."); + ::OutputDebugStringW(L"Width(LayoutLength) is not valid."); #endif return false; } if (!height.Validate()) { #ifdef CRU_DEBUG - ::OutputDebugStringW(L"Height(MeasureLength) is not valid."); + ::OutputDebugStringW(L"Height(LayoutLength) is not valid."); #endif return false; } return true; } - MeasureLength width; - MeasureLength height; + LayoutLength width; + LayoutLength height; }; |