Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: ui/views/layout/box_layout.h

Issue 2836313002: BoxLayout now suports per-view margins. (Closed)
Patch Set: BoxLayout now uses Margins property on the view Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/views/layout/box_layout.cc » ('j') | ui/views/view.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/layout/box_layout.h
diff --git a/ui/views/layout/box_layout.h b/ui/views/layout/box_layout.h
index 9a87984d51f77cec0caa488860fa6dc1986f9e28..62672d02532e9b4e4700f70f1c1a66778845c07b 100644
--- a/ui/views/layout/box_layout.h
+++ b/ui/views/layout/box_layout.h
@@ -105,6 +105,31 @@ class VIEWS_EXPORT BoxLayout : public LayoutManager {
int GetPreferredHeightForWidth(const View* host, int width) const override;
private:
+ // This struct is used internally to "wrap" a child view in order to obviate
+ // the need for the main layout logic to be aware of the per-view margins.
+ // Since each view is a rectangle of a certain size, this wrapper, coupled
+ // with any margins set will increase the apparent size of the view. All
+ // necessary view size/position methods required for the layout logic add or
+ // subtract the margins where appropriate to ensure the actual visible size
+ // of the view doesn't include the margins.
+ struct ViewWrapper {
+ ViewWrapper();
+ ViewWrapper(View* view);
+ ViewWrapper(const ViewWrapper& wrapper) = delete;
+ ~ViewWrapper();
+ int GetHeightForWidth(int width) const;
+ gfx::Size GetPreferredSize() const;
+ void SetBoundsRect(const gfx::Rect& bounds);
+ View* view() const { return view_; }
+ bool visible() const;
+
+ private:
+ View* view_;
+ gfx::Insets margins_;
+ };
+
+ using FlexMap = std::map<const View*, int>;
+
// Returns the flex for the specified |view|.
int GetFlexForView(const View* view) const;
@@ -126,10 +151,10 @@ class VIEWS_EXPORT BoxLayout : public LayoutManager {
// Returns the main axis size for the given view. |child_area_width| is needed
// to calculate the height of the view when the orientation is vertical.
- int MainAxisSizeForView(const View* view, int child_area_width) const;
+ int MainAxisSizeForView(const ViewWrapper& view, int child_area_width) const;
// Returns the cross axis size for the given view.
- int CrossAxisSizeForView(const View* view) const;
+ int CrossAxisSizeForView(const ViewWrapper& view) const;
// The preferred size for the dialog given the width of the child area.
gfx::Size GetPreferredSizeForChildWidth(const View* host,
@@ -156,7 +181,7 @@ class VIEWS_EXPORT BoxLayout : public LayoutManager {
CrossAxisAlignment cross_axis_alignment_;
// A map of views to their flex weights.
- std::map<const View*, int> flex_map_;
+ FlexMap flex_map_;
// The flex weight for views if none is set. Defaults to 0.
int default_flex_;
« no previous file with comments | « no previous file | ui/views/layout/box_layout.cc » ('j') | ui/views/view.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698