1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/views/layout/flex_layout_view.h"
6
7 #include <memory>
8
9 namespace views {
10
FlexLayoutView()11 FlexLayoutView::FlexLayoutView()
12 : layout_(SetLayoutManager(std::make_unique<FlexLayout>())),
13 orientation_(layout_->orientation()),
14 main_axis_alignment_(layout_->main_axis_alignment()),
15 cross_axis_alignment_(layout_->cross_axis_alignment()),
16 interior_margin_(layout_->interior_margin()),
17 minimum_cross_axis_size_(layout_->minimum_cross_axis_size()),
18 collapse_margins_(layout_->collapse_margins()),
19 include_host_insets_in_layout_(layout_->include_host_insets_in_layout()),
20 ignore_default_main_axis_margins_(
21 layout_->ignore_default_main_axis_margins()),
22 flex_allocation_order_(layout_->flex_allocation_order()) {}
23
24 FlexLayoutView::~FlexLayoutView() = default;
25
SetOrientation(LayoutOrientation orientation)26 void FlexLayoutView::SetOrientation(LayoutOrientation orientation) {
27 if (orientation_ == orientation)
28 return;
29 layout_->SetOrientation(orientation);
30 orientation_ = orientation;
31 OnPropertyChanged(&orientation_, kPropertyEffectsLayout);
32 }
33
GetOrientation() const34 LayoutOrientation FlexLayoutView::GetOrientation() const {
35 return orientation_;
36 }
37
SetMainAxisAlignment(LayoutAlignment main_axis_alignment)38 void FlexLayoutView::SetMainAxisAlignment(LayoutAlignment main_axis_alignment) {
39 if (main_axis_alignment_ == main_axis_alignment)
40 return;
41 layout_->SetMainAxisAlignment(main_axis_alignment);
42 main_axis_alignment_ = main_axis_alignment;
43 OnPropertyChanged(&main_axis_alignment_, kPropertyEffectsLayout);
44 }
45
GetMainAxisAlignment() const46 LayoutAlignment FlexLayoutView::GetMainAxisAlignment() const {
47 return layout_->main_axis_alignment();
48 }
49
SetCrossAxisAlignment(LayoutAlignment cross_axis_alignment)50 void FlexLayoutView::SetCrossAxisAlignment(
51 LayoutAlignment cross_axis_alignment) {
52 if (cross_axis_alignment_ == cross_axis_alignment)
53 return;
54 layout_->SetCrossAxisAlignment(cross_axis_alignment);
55 cross_axis_alignment_ = cross_axis_alignment;
56 OnPropertyChanged(&cross_axis_alignment_, kPropertyEffectsLayout);
57 }
58
GetCrossAxisAlignment() const59 LayoutAlignment FlexLayoutView::GetCrossAxisAlignment() const {
60 return cross_axis_alignment_;
61 }
62
SetInteriorMargin(const gfx::Insets & interior_margin)63 void FlexLayoutView::SetInteriorMargin(const gfx::Insets& interior_margin) {
64 if (interior_margin_ == interior_margin)
65 return;
66 layout_->SetInteriorMargin(interior_margin);
67 interior_margin_ = interior_margin;
68 OnPropertyChanged(&interior_margin_, kPropertyEffectsLayout);
69 }
70
GetInteriorMargin() const71 const gfx::Insets& FlexLayoutView::GetInteriorMargin() const {
72 return interior_margin_;
73 }
74
SetMinimumCrossAxisSize(int size)75 void FlexLayoutView::SetMinimumCrossAxisSize(int size) {
76 if (minimum_cross_axis_size_ == size)
77 return;
78 layout_->SetMinimumCrossAxisSize(size);
79 minimum_cross_axis_size_ = size;
80 OnPropertyChanged(&minimum_cross_axis_size_, kPropertyEffectsLayout);
81 }
82
GetMinimumCrossAxisSize() const83 int FlexLayoutView::GetMinimumCrossAxisSize() const {
84 return minimum_cross_axis_size_;
85 }
86
SetCollapseMargins(bool collapse_margins)87 void FlexLayoutView::SetCollapseMargins(bool collapse_margins) {
88 if (collapse_margins_ == collapse_margins)
89 return;
90 layout_->SetCollapseMargins(collapse_margins);
91 collapse_margins_ = collapse_margins;
92 OnPropertyChanged(&collapse_margins_, kPropertyEffectsLayout);
93 }
94
GetCollapseMargins() const95 bool FlexLayoutView::GetCollapseMargins() const {
96 return collapse_margins_;
97 }
98
SetIncludeHostInsetsInLayout(bool include_host_insets_in_layout)99 void FlexLayoutView::SetIncludeHostInsetsInLayout(
100 bool include_host_insets_in_layout) {
101 if (include_host_insets_in_layout_ == include_host_insets_in_layout)
102 return;
103 layout_->SetIncludeHostInsetsInLayout(include_host_insets_in_layout);
104 include_host_insets_in_layout_ = include_host_insets_in_layout;
105 OnPropertyChanged(&include_host_insets_in_layout_, kPropertyEffectsLayout);
106 }
107
GetIncludeHostInsetsInLayout() const108 bool FlexLayoutView::GetIncludeHostInsetsInLayout() const {
109 return include_host_insets_in_layout_;
110 }
111
SetIgnoreDefaultMainAxisMargins(bool ignore_default_main_axis_margins)112 void FlexLayoutView::SetIgnoreDefaultMainAxisMargins(
113 bool ignore_default_main_axis_margins) {
114 if (ignore_default_main_axis_margins == ignore_default_main_axis_margins_) {
115 return;
116 }
117 layout_->SetIgnoreDefaultMainAxisMargins(ignore_default_main_axis_margins);
118 ignore_default_main_axis_margins_ = ignore_default_main_axis_margins;
119 OnPropertyChanged(&ignore_default_main_axis_margins_, kPropertyEffectsLayout);
120 }
121
GetIgnoreDefaultMainAxisMargins() const122 bool FlexLayoutView::GetIgnoreDefaultMainAxisMargins() const {
123 return ignore_default_main_axis_margins_;
124 }
125
SetFlexAllocationOrder(FlexAllocationOrder flex_allocation_order)126 void FlexLayoutView::SetFlexAllocationOrder(
127 FlexAllocationOrder flex_allocation_order) {
128 if (flex_allocation_order_ == flex_allocation_order)
129 return;
130 layout_->SetFlexAllocationOrder(flex_allocation_order);
131 flex_allocation_order_ = flex_allocation_order;
132 OnPropertyChanged(&flex_allocation_order_, kPropertyEffectsLayout);
133 }
134
GetFlexAllocationOrder() const135 FlexAllocationOrder FlexLayoutView::GetFlexAllocationOrder() const {
136 return flex_allocation_order_;
137 }
138
GetDefaultFlexRule() const139 FlexRule FlexLayoutView::GetDefaultFlexRule() const {
140 return layout_->GetDefaultFlexRule();
141 }
142
143 } // namespace views
144