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

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

Issue 2453133002: [ash-md] Makes Wi-Fi header row sticky when network list is scrolled (Closed)
Patch Set: [ash-md] Makes Wi-Fi header row sticky when network list is scrolled (fixed targeting) Created 4 years, 2 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
« ui/views/layout/box_layout.h ('K') | « ui/views/layout/box_layout.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/layout/box_layout.cc
diff --git a/ui/views/layout/box_layout.cc b/ui/views/layout/box_layout.cc
index f81fd68e3cbd6883abf200a59b64fbc39ebfe3bd..63a7faf290adec0593d64c5a72ce793da07b5229 100644
--- a/ui/views/layout/box_layout.cc
+++ b/ui/views/layout/box_layout.cc
@@ -103,49 +103,8 @@ void BoxLayout::Layout(View* host) {
int main_position = MainAxisPosition(child_area);
int total_padding = 0;
int current_flex = 0;
- for (int i = 0; i < host->child_count(); ++i) {
- View* child = host->child_at(i);
- if (!child->visible())
- continue;
-
- // Calculate cross axis size.
- gfx::Rect bounds(child_area);
- SetMainAxisPosition(main_position, &bounds);
- if (cross_axis_alignment_ != CROSS_AXIS_ALIGNMENT_STRETCH) {
- int free_space = CrossAxisSize(bounds) - CrossAxisSizeForView(child);
- int position = CrossAxisPosition(bounds);
- if (cross_axis_alignment_ == CROSS_AXIS_ALIGNMENT_CENTER) {
- position += free_space / 2;
- } else if (cross_axis_alignment_ == CROSS_AXIS_ALIGNMENT_END) {
- position += free_space;
- }
- SetCrossAxisPosition(position, &bounds);
- SetCrossAxisSize(CrossAxisSizeForView(child), &bounds);
- }
-
- // Calculate flex padding.
- int current_padding = 0;
- if (GetFlexForView(child) > 0) {
- current_flex += GetFlexForView(child);
- int quot = (main_free_space * current_flex) / flex_sum;
- int rem = (main_free_space * current_flex) % flex_sum;
- current_padding = quot - total_padding;
- // Use the current remainder to round to the nearest pixel.
- if (std::abs(rem) * 2 >= flex_sum)
- current_padding += main_free_space > 0 ? 1 : -1;
- total_padding += current_padding;
- }
-
- // Set main axis size.
- int child_main_axis_size = MainAxisSizeForView(child, child_area.width());
- SetMainAxisSize(child_main_axis_size + current_padding, &bounds);
- if (MainAxisSize(bounds) > 0 || GetFlexForView(child) > 0)
- main_position += MainAxisSize(bounds) + between_child_spacing_;
-
- // Clamp child view bounds to |child_area|.
- bounds.Intersect(child_area);
- child->SetBoundsRect(bounds);
- }
+ LayoutChildren(host, child_area, main_free_space, flex_sum, main_position,
+ current_flex, &total_padding);
// Flex views should have grown/shrunk to consume all free space.
if (flex_sum)
@@ -176,6 +135,68 @@ int BoxLayout::GetPreferredHeightForWidth(const View* host, int width) const {
return GetPreferredSizeForChildWidth(host, child_width).height();
}
+void BoxLayout::LayoutChild(View* child,
+ const gfx::Rect& child_area,
+ int main_free_space,
+ int flex_sum,
+ int* main_position,
+ int* current_flex,
+ int* total_padding) {
+ // Calculate cross axis size.
+ gfx::Rect bounds(child_area);
+ SetMainAxisPosition(*main_position, &bounds);
+ if (cross_axis_alignment_ != CROSS_AXIS_ALIGNMENT_STRETCH) {
+ int free_space = CrossAxisSize(bounds) - CrossAxisSizeForView(child);
+ int position = CrossAxisPosition(bounds);
+ if (cross_axis_alignment_ == CROSS_AXIS_ALIGNMENT_CENTER) {
+ position += free_space / 2;
+ } else if (cross_axis_alignment_ == CROSS_AXIS_ALIGNMENT_END) {
+ position += free_space;
+ }
+ SetCrossAxisPosition(position, &bounds);
+ SetCrossAxisSize(CrossAxisSizeForView(child), &bounds);
+ }
+
+ // Calculate flex padding.
+ int current_padding = 0;
+ if (GetFlexForView(child) > 0) {
+ *current_flex += GetFlexForView(child);
+ int quot = (main_free_space * *current_flex) / flex_sum;
+ int rem = (main_free_space * *current_flex) % flex_sum;
+ current_padding = quot - *total_padding;
+ // Use the current remainder to round to the nearest pixel.
+ if (std::abs(rem) * 2 >= flex_sum)
+ current_padding += main_free_space > 0 ? 1 : -1;
+ *total_padding += current_padding;
+ }
+
+ // Set main axis size.
+ int child_main_axis_size = MainAxisSizeForView(child, child_area.width());
+ SetMainAxisSize(child_main_axis_size + current_padding, &bounds);
+ if (MainAxisSize(bounds) > 0 || GetFlexForView(child) > 0)
+ *main_position += MainAxisSize(bounds) + between_child_spacing_;
+
+ // Clamp child view bounds to |child_area|.
+ bounds.Intersect(child_area);
+ child->SetBoundsRect(bounds);
+}
+
+void BoxLayout::LayoutChildren(View* host,
+ const gfx::Rect& child_area,
+ int main_free_space,
+ int flex_sum,
+ int main_position,
+ int current_flex,
+ int* total_padding) {
+ for (int i = 0; i < host->child_count(); ++i) {
+ View* child = host->child_at(i);
+ if (!child->visible())
+ continue;
+ LayoutChild(child, child_area, main_free_space, flex_sum, &main_position,
+ &current_flex, total_padding);
+ }
+}
+
void BoxLayout::Installed(View* host) {
DCHECK(!host_);
host_ = host;
« ui/views/layout/box_layout.h ('K') | « ui/views/layout/box_layout.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698