aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2019-09-15 00:22:59 +0800
committer杨宇千 <crupest@outlook.com>2019-09-15 00:22:59 +0800
commit55d98d3259e9f3e184ad6323d1d49d298bd1723b (patch)
treeb986e6e4bc7e0dbfe5f00784722615bc365e7893 /src
parentf9f2fa5ab0c92ed27337ba4894f13f61a7b7cc15 (diff)
downloadcru-55d98d3259e9f3e184ad6323d1d49d298bd1723b.tar.gz
cru-55d98d3259e9f3e184ad6323d1d49d298bd1723b.tar.bz2
cru-55d98d3259e9f3e184ad6323d1d49d298bd1723b.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/ui/controls/flex_layout.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ui/controls/flex_layout.cpp b/src/ui/controls/flex_layout.cpp
index 340710cc..bb8e3c14 100644
--- a/src/ui/controls/flex_layout.cpp
+++ b/src/ui/controls/flex_layout.cpp
@@ -14,6 +14,33 @@ render::RenderObject* FlexLayout::GetRenderObject() const {
return render_object_.get();
}
+FlexChildLayoutData FlexLayout::GetChildLayoutData(Control* control) {
+ const auto& render_objects = render_object_->GetChildren();
+ const auto find_result =
+ std::find(render_objects.cbegin(), render_objects.cend(),
+ control->GetRenderObject());
+ if (find_result == render_objects.cend()) {
+ throw std::logic_error("Control is not a child of FlexLayout.");
+ }
+ int position = find_result - render_objects.cbegin();
+ return *(render_object_->GetChildLayoutData(position));
+}
+
+void FlexLayout::SetChildLayoutData(Control* control,
+ const FlexChildLayoutData& data) {
+ const auto& render_objects = render_object_->GetChildren();
+ const auto find_result =
+ std::find(render_objects.cbegin(), render_objects.cend(),
+ control->GetRenderObject());
+ if (find_result == render_objects.cend()) {
+ throw std::logic_error("Control is not a child of FlexLayout.");
+ }
+ int position = find_result - render_objects.cbegin();
+ const auto d = render_object_->GetChildLayoutData(position);
+ *d = data;
+ if (const auto window = GetWindow()) window->InvalidateLayout();
+}
+
void FlexLayout::OnAddChild(Control* child, int position) {
render_object_->AddChild(child->GetRenderObject(), position);
}