aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CruUI/main.cpp15
-rw-r--r--CruUI/ui/control.cpp4
-rw-r--r--CruUI/ui/control.h1
-rw-r--r--CruUI/ui/controls/linear_layout.cpp7
-rw-r--r--CruUI/ui/controls/linear_layout.h13
-rw-r--r--CruUI/ui/controls/text_block.cpp4
-rw-r--r--CruUI/ui/controls/toggle_button.cpp2
-rw-r--r--CruUI/ui/layout_base.h31
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, &current_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;
};