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