Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ | 5 #ifndef UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ |
| 6 #define UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ | 6 #define UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 // negative. | 90 // negative. |
| 91 void SetFlexForView(const View* view, int flex); | 91 void SetFlexForView(const View* view, int flex); |
| 92 | 92 |
| 93 // Clears the flex for the given |view|, causing it to use the default | 93 // Clears the flex for the given |view|, causing it to use the default |
| 94 // flex. | 94 // flex. |
| 95 void ClearFlexForView(const View* view); | 95 void ClearFlexForView(const View* view); |
| 96 | 96 |
| 97 // Sets the flex for views to use when none is specified. | 97 // Sets the flex for views to use when none is specified. |
| 98 void SetDefaultFlex(int default_flex); | 98 void SetDefaultFlex(int default_flex); |
| 99 | 99 |
| 100 // Clears the margins for the given |view|. | |
| 101 void ClearMarginsForView(const View* view); | |
| 102 | |
| 103 // Sets the margins for a specific |view|. The margins are the area around | |
| 104 // the outside of the given view into which no other view is placed. This is | |
| 105 // in addition to any other horizontal or vertical spacing. | |
| 106 void SetViewMargins(const View* view, const gfx::Insets& margins); | |
|
sky
2017/04/25 17:28:58
Is there a reason you aren't using a UI property f
| |
| 107 | |
| 100 // Overridden from views::LayoutManager: | 108 // Overridden from views::LayoutManager: |
| 101 void Installed(View* host) override; | 109 void Installed(View* host) override; |
| 102 void ViewRemoved(View* host, View* view) override; | 110 void ViewRemoved(View* host, View* view) override; |
| 103 void Layout(View* host) override; | 111 void Layout(View* host) override; |
| 104 gfx::Size GetPreferredSize(const View* host) const override; | 112 gfx::Size GetPreferredSize(const View* host) const override; |
| 105 int GetPreferredHeightForWidth(const View* host, int width) const override; | 113 int GetPreferredHeightForWidth(const View* host, int width) const override; |
| 106 | 114 |
| 107 private: | 115 private: |
| 116 struct ViewWrapper { | |
|
sky
2017/04/25 17:28:59
Please add a description of this.
| |
| 117 ViewWrapper(); | |
| 118 ViewWrapper(const BoxLayout* layout, const View* view); | |
| 119 ViewWrapper(const ViewWrapper& wrapper); | |
| 120 ~ViewWrapper(); | |
| 121 gfx::Size GetPreferredSize() const; | |
| 122 void SetBoundsRect(const gfx::Rect& bounds); | |
| 123 const View* view() const { return view_; } | |
| 124 bool visible() const; | |
| 125 | |
| 126 private: | |
| 127 const View* view_; | |
| 128 const BoxLayout* layout_; | |
| 129 gfx::Insets margins_; | |
| 130 }; | |
| 131 using MarginMap = std::map<const View*, gfx::Insets>; | |
| 132 using FlexMap = std::map<const View*, int>; | |
| 133 friend struct ViewWrappper; | |
| 134 | |
| 108 // Returns the flex for the specified |view|. | 135 // Returns the flex for the specified |view|. |
| 109 int GetFlexForView(const View* view) const; | 136 int GetFlexForView(const View* view) const; |
| 110 | 137 |
| 111 // Returns the size and position along the main axis of |rect|. | 138 // Returns the size and position along the main axis of |rect|. |
| 112 int MainAxisSize(const gfx::Rect& rect) const; | 139 int MainAxisSize(const gfx::Rect& rect) const; |
| 113 int MainAxisPosition(const gfx::Rect& rect) const; | 140 int MainAxisPosition(const gfx::Rect& rect) const; |
| 114 | 141 |
| 115 // Sets the size and position along the main axis of |rect|. | 142 // Sets the size and position along the main axis of |rect|. |
| 116 void SetMainAxisSize(int size, gfx::Rect* rect) const; | 143 void SetMainAxisSize(int size, gfx::Rect* rect) const; |
| 117 void SetMainAxisPosition(int position, gfx::Rect* rect) const; | 144 void SetMainAxisPosition(int position, gfx::Rect* rect) const; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 132 int CrossAxisSizeForView(const View* view) const; | 159 int CrossAxisSizeForView(const View* view) const; |
| 133 | 160 |
| 134 // The preferred size for the dialog given the width of the child area. | 161 // The preferred size for the dialog given the width of the child area. |
| 135 gfx::Size GetPreferredSizeForChildWidth(const View* host, | 162 gfx::Size GetPreferredSizeForChildWidth(const View* host, |
| 136 int child_area_width) const; | 163 int child_area_width) const; |
| 137 | 164 |
| 138 // The amount of space the layout requires in addition to any space for the | 165 // The amount of space the layout requires in addition to any space for the |
| 139 // child views. | 166 // child views. |
| 140 gfx::Size NonChildSize(const View* host) const; | 167 gfx::Size NonChildSize(const View* host) const; |
| 141 | 168 |
| 169 // Returns the margins for the specified |view|. | |
| 170 gfx::Insets GetViewMargins(const View* view) const; | |
| 171 | |
| 142 const Orientation orientation_; | 172 const Orientation orientation_; |
| 143 | 173 |
| 144 // Spacing between child views and host view border. | 174 // Spacing between child views and host view border. |
| 145 gfx::Insets inside_border_insets_; | 175 gfx::Insets inside_border_insets_; |
| 146 | 176 |
| 147 // Spacing to put in between child views. | 177 // Spacing to put in between child views. |
| 148 const int between_child_spacing_; | 178 const int between_child_spacing_; |
| 149 | 179 |
| 150 // The alignment of children in the main axis. This is | 180 // The alignment of children in the main axis. This is |
| 151 // MAIN_AXIS_ALIGNMENT_START by default. | 181 // MAIN_AXIS_ALIGNMENT_START by default. |
| 152 MainAxisAlignment main_axis_alignment_; | 182 MainAxisAlignment main_axis_alignment_; |
| 153 | 183 |
| 154 // The alignment of children in the cross axis. This is | 184 // The alignment of children in the cross axis. This is |
| 155 // CROSS_AXIS_ALIGNMENT_STRETCH by default. | 185 // CROSS_AXIS_ALIGNMENT_STRETCH by default. |
| 156 CrossAxisAlignment cross_axis_alignment_; | 186 CrossAxisAlignment cross_axis_alignment_; |
| 157 | 187 |
| 158 // A map of views to their flex weights. | 188 // A map of views to their flex weights. |
| 159 std::map<const View*, int> flex_map_; | 189 FlexMap flex_map_; |
| 160 | 190 |
| 161 // The flex weight for views if none is set. Defaults to 0. | 191 // The flex weight for views if none is set. Defaults to 0. |
| 162 int default_flex_; | 192 int default_flex_; |
| 163 | 193 |
| 164 // The minimum cross axis size for the layout. | 194 // The minimum cross axis size for the layout. |
| 165 int minimum_cross_axis_size_; | 195 int minimum_cross_axis_size_; |
| 166 | 196 |
| 167 // The view that this BoxLayout is managing the layout for. | 197 // The view that this BoxLayout is managing the layout for. |
| 168 views::View* host_; | 198 views::View* host_; |
| 169 | 199 |
| 200 // Unique margins around specific views. | |
| 201 MarginMap margin_map_; | |
| 202 | |
| 170 DISALLOW_IMPLICIT_CONSTRUCTORS(BoxLayout); | 203 DISALLOW_IMPLICIT_CONSTRUCTORS(BoxLayout); |
| 171 }; | 204 }; |
| 172 | 205 |
| 173 } // namespace views | 206 } // namespace views |
| 174 | 207 |
| 175 #endif // UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ | 208 #endif // UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ |
| OLD | NEW |