Index: ash/common/shelf/app_list_button.cc |
diff --git a/ash/common/shelf/app_list_button.cc b/ash/common/shelf/app_list_button.cc |
index b8cc2564eab7541a42793019f8cae43e108332f1..cc3485818c6ab8136f0a25715998a2e462c70bb0 100644 |
--- a/ash/common/shelf/app_list_button.cc |
+++ b/ash/common/shelf/app_list_button.cc |
@@ -287,16 +287,22 @@ void AppListButton::SetDrawBackgroundAsActive(bool draw_background_as_active) { |
} |
gfx::Point AppListButton::GetCenterPoint() const { |
- // During shelf hide/show animations, width and height may not be equal. Take |
- // the greater of the two as the one that represents the normal size of the |
- // button. |
- int center = std::max(width(), height()) / 2.f; |
- gfx::Point centroid(center, center); |
- // For the left shelf alignment, we need to right-justify. For other shelf |
- // alignments, left/top justification (i.e. no adjustments are necessary). |
- if (SHELF_ALIGNMENT_LEFT == wm_shelf_->GetAlignment()) |
- centroid.set_x(width() - center); |
- return centroid; |
+ // For a bottom-aligned shelf, the button bounds could have a larger height |
+ // than width (in the case of touch-dragging the shelf updwards) or a larger |
+ // width than height (in the case of a shelf hide/show animation), so adjust |
+ // the y-position of the circle's center to ensure correct layout. Similarly |
+ // adjust the x-position for a left- or right-aligned shelf. |
+ const int x_mid = width() / 2.f; |
+ const int y_mid = height() / 2.f; |
+ ShelfAlignment alignment = wm_shelf_->GetAlignment(); |
+ if (alignment == SHELF_ALIGNMENT_BOTTOM) { |
+ return gfx::Point(x_mid, x_mid); |
+ } else if (alignment == SHELF_ALIGNMENT_RIGHT) { |
+ return gfx::Point(y_mid, y_mid); |
+ } else { |
+ DCHECK_EQ(alignment, SHELF_ALIGNMENT_LEFT); |
+ return gfx::Point(width() - y_mid, y_mid); |
+ } |
} |
} // namespace ash |