| 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 void SetDefaultFlex(int default_flex); | 98 void SetDefaultFlex(int default_flex); |
| 99 | 99 |
| 100 // Overridden from views::LayoutManager: | 100 // Overridden from views::LayoutManager: |
| 101 void Installed(View* host) override; | 101 void Installed(View* host) override; |
| 102 void ViewRemoved(View* host, View* view) override; | 102 void ViewRemoved(View* host, View* view) override; |
| 103 void Layout(View* host) override; | 103 void Layout(View* host) override; |
| 104 gfx::Size GetPreferredSize(const View* host) const override; | 104 gfx::Size GetPreferredSize(const View* host) const override; |
| 105 int GetPreferredHeightForWidth(const View* host, int width) const override; | 105 int GetPreferredHeightForWidth(const View* host, int width) const override; |
| 106 | 106 |
| 107 private: | 107 private: |
| 108 // This struct is used internally to "wrap" a child view in order to obviate |
| 109 // the need for the main layout logic to be aware of the per-view margins. |
| 110 // Since each view is a rectangle of a certain size, this wrapper, coupled |
| 111 // with any margins set will increase the apparent size of the view. All |
| 112 // necessary view size/position methods required for the layout logic add or |
| 113 // subtract the margins where appropriate to ensure the actual visible size |
| 114 // of the view doesn't include the margins. |
| 115 struct ViewWrapper { |
| 116 ViewWrapper(); |
| 117 ViewWrapper(View* view); |
| 118 ViewWrapper(const ViewWrapper& wrapper) = delete; |
| 119 ~ViewWrapper(); |
| 120 int GetHeightForWidth(int width) const; |
| 121 gfx::Size GetPreferredSize() const; |
| 122 void SetBoundsRect(const gfx::Rect& bounds); |
| 123 View* view() const { return view_; } |
| 124 bool visible() const; |
| 125 |
| 126 private: |
| 127 View* view_; |
| 128 gfx::Insets margins_; |
| 129 }; |
| 130 |
| 131 using FlexMap = std::map<const View*, int>; |
| 132 |
| 108 // Returns the flex for the specified |view|. | 133 // Returns the flex for the specified |view|. |
| 109 int GetFlexForView(const View* view) const; | 134 int GetFlexForView(const View* view) const; |
| 110 | 135 |
| 111 // Returns the size and position along the main axis of |rect|. | 136 // Returns the size and position along the main axis of |rect|. |
| 112 int MainAxisSize(const gfx::Rect& rect) const; | 137 int MainAxisSize(const gfx::Rect& rect) const; |
| 113 int MainAxisPosition(const gfx::Rect& rect) const; | 138 int MainAxisPosition(const gfx::Rect& rect) const; |
| 114 | 139 |
| 115 // Sets the size and position along the main axis of |rect|. | 140 // Sets the size and position along the main axis of |rect|. |
| 116 void SetMainAxisSize(int size, gfx::Rect* rect) const; | 141 void SetMainAxisSize(int size, gfx::Rect* rect) const; |
| 117 void SetMainAxisPosition(int position, gfx::Rect* rect) const; | 142 void SetMainAxisPosition(int position, gfx::Rect* rect) const; |
| 118 | 143 |
| 119 // Returns the size and position along the cross axis of |rect|. | 144 // Returns the size and position along the cross axis of |rect|. |
| 120 int CrossAxisSize(const gfx::Rect& rect) const; | 145 int CrossAxisSize(const gfx::Rect& rect) const; |
| 121 int CrossAxisPosition(const gfx::Rect& rect) const; | 146 int CrossAxisPosition(const gfx::Rect& rect) const; |
| 122 | 147 |
| 123 // Sets the size and position along the cross axis of |rect|. | 148 // Sets the size and position along the cross axis of |rect|. |
| 124 void SetCrossAxisSize(int size, gfx::Rect* rect) const; | 149 void SetCrossAxisSize(int size, gfx::Rect* rect) const; |
| 125 void SetCrossAxisPosition(int size, gfx::Rect* rect) const; | 150 void SetCrossAxisPosition(int size, gfx::Rect* rect) const; |
| 126 | 151 |
| 127 // Returns the main axis size for the given view. |child_area_width| is needed | 152 // Returns the main axis size for the given view. |child_area_width| is needed |
| 128 // to calculate the height of the view when the orientation is vertical. | 153 // to calculate the height of the view when the orientation is vertical. |
| 129 int MainAxisSizeForView(const View* view, int child_area_width) const; | 154 int MainAxisSizeForView(const ViewWrapper& view, int child_area_width) const; |
| 130 | 155 |
| 131 // Returns the cross axis size for the given view. | 156 // Returns the cross axis size for the given view. |
| 132 int CrossAxisSizeForView(const View* view) const; | 157 int CrossAxisSizeForView(const ViewWrapper& view) const; |
| 133 | 158 |
| 134 // The preferred size for the dialog given the width of the child area. | 159 // The preferred size for the dialog given the width of the child area. |
| 135 gfx::Size GetPreferredSizeForChildWidth(const View* host, | 160 gfx::Size GetPreferredSizeForChildWidth(const View* host, |
| 136 int child_area_width) const; | 161 int child_area_width) const; |
| 137 | 162 |
| 138 // The amount of space the layout requires in addition to any space for the | 163 // The amount of space the layout requires in addition to any space for the |
| 139 // child views. | 164 // child views. |
| 140 gfx::Size NonChildSize(const View* host) const; | 165 gfx::Size NonChildSize(const View* host) const; |
| 141 | 166 |
| 142 const Orientation orientation_; | 167 const Orientation orientation_; |
| 143 | 168 |
| 144 // Spacing between child views and host view border. | 169 // Spacing between child views and host view border. |
| 145 gfx::Insets inside_border_insets_; | 170 gfx::Insets inside_border_insets_; |
| 146 | 171 |
| 147 // Spacing to put in between child views. | 172 // Spacing to put in between child views. |
| 148 const int between_child_spacing_; | 173 const int between_child_spacing_; |
| 149 | 174 |
| 150 // The alignment of children in the main axis. This is | 175 // The alignment of children in the main axis. This is |
| 151 // MAIN_AXIS_ALIGNMENT_START by default. | 176 // MAIN_AXIS_ALIGNMENT_START by default. |
| 152 MainAxisAlignment main_axis_alignment_; | 177 MainAxisAlignment main_axis_alignment_; |
| 153 | 178 |
| 154 // The alignment of children in the cross axis. This is | 179 // The alignment of children in the cross axis. This is |
| 155 // CROSS_AXIS_ALIGNMENT_STRETCH by default. | 180 // CROSS_AXIS_ALIGNMENT_STRETCH by default. |
| 156 CrossAxisAlignment cross_axis_alignment_; | 181 CrossAxisAlignment cross_axis_alignment_; |
| 157 | 182 |
| 158 // A map of views to their flex weights. | 183 // A map of views to their flex weights. |
| 159 std::map<const View*, int> flex_map_; | 184 FlexMap flex_map_; |
| 160 | 185 |
| 161 // The flex weight for views if none is set. Defaults to 0. | 186 // The flex weight for views if none is set. Defaults to 0. |
| 162 int default_flex_; | 187 int default_flex_; |
| 163 | 188 |
| 164 // The minimum cross axis size for the layout. | 189 // The minimum cross axis size for the layout. |
| 165 int minimum_cross_axis_size_; | 190 int minimum_cross_axis_size_; |
| 166 | 191 |
| 167 // The view that this BoxLayout is managing the layout for. | 192 // The view that this BoxLayout is managing the layout for. |
| 168 views::View* host_; | 193 views::View* host_; |
| 169 | 194 |
| 170 DISALLOW_IMPLICIT_CONSTRUCTORS(BoxLayout); | 195 DISALLOW_IMPLICIT_CONSTRUCTORS(BoxLayout); |
| 171 }; | 196 }; |
| 172 | 197 |
| 173 } // namespace views | 198 } // namespace views |
| 174 | 199 |
| 175 #endif // UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ | 200 #endif // UI_VIEWS_LAYOUT_BOX_LAYOUT_H_ |
| OLD | NEW |