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

Unified Diff: ash/shelf/shelf_widget.cc

Issue 1877543002: Revise the shelf alignment locking mechanism. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update and cleanup tests. Created 4 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 | « ash/shelf/shelf_view_unittest.cc ('k') | ash/shelf/shelf_widget_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_widget.cc
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc
index 1a3e9b6bccfb0d65290f0053e0944c0ba3d8f8de..01e6cbf632d37867eb78555d85822ee341ed0d90 100644
--- a/ash/shelf/shelf_widget.cc
+++ b/ash/shelf/shelf_widget.cc
@@ -13,6 +13,7 @@
#include "ash/shelf/shelf_layout_manager.h"
#include "ash/shelf/shelf_model.h"
#include "ash/shelf/shelf_navigator.h"
+#include "ash/shelf/shelf_util.h"
#include "ash/shelf/shelf_view.h"
#include "ash/shelf/shelf_widget.h"
#include "ash/shell.h"
@@ -41,6 +42,8 @@
#include "ui/wm/core/easy_resize_window_targeter.h"
#include "ui/wm/public/activation_client.h"
+namespace ash {
+
namespace {
// Size of black border at bottom (or side) of shelf.
const int kNumBlackPixels = 3;
@@ -54,11 +57,11 @@ const int kTimeToUnDimMs = 200; // Fast in activating.
// Class used to slightly dim shelf items when maximized and visible.
class DimmerView : public views::View,
public views::WidgetDelegate,
- ash::BackgroundAnimatorDelegate {
+ BackgroundAnimatorDelegate {
public:
// If |disable_dimming_animations_for_test| is set, all alpha animations will
// be performed instantly.
- DimmerView(ash::ShelfWidget* shelf_widget,
+ DimmerView(ShelfWidget* shelf_widget,
bool disable_dimming_animations_for_test);
~DimmerView() override;
@@ -72,7 +75,7 @@ class DimmerView : public views::View,
views::Widget* GetWidget() override { return View::GetWidget(); }
const views::Widget* GetWidget() const override { return View::GetWidget(); }
- // ash::BackgroundAnimatorDelegate overrides:
+ // BackgroundAnimatorDelegate overrides:
void UpdateBackground(int alpha) override {
alpha_ = alpha;
SchedulePaint();
@@ -108,8 +111,8 @@ class DimmerView : public views::View,
DISALLOW_COPY_AND_ASSIGN(DimmerEventFilter);
};
- // The owning shelf.
- ash::ShelfWidget* shelf_;
+ // The owning shelf widget.
+ ShelfWidget* shelf_;
// The alpha to use for covering the shelf.
int alpha_;
@@ -124,7 +127,7 @@ class DimmerView : public views::View,
bool disable_dimming_animations_for_test_;
// The animator for the background transitions.
- ash::BackgroundAnimator background_animator_;
+ BackgroundAnimator background_animator_;
// Notification of entering / exiting of the shelf area by mouse.
std::unique_ptr<DimmerEventFilter> event_filter_;
@@ -132,7 +135,7 @@ class DimmerView : public views::View,
DISALLOW_COPY_AND_ASSIGN(DimmerView);
};
-DimmerView::DimmerView(ash::ShelfWidget* shelf_widget,
+DimmerView::DimmerView(ShelfWidget* shelf_widget,
bool disable_dimming_animations_for_test)
: shelf_(shelf_widget),
alpha_(kDimAlpha),
@@ -143,8 +146,7 @@ DimmerView::DimmerView(ash::ShelfWidget* shelf_widget,
event_filter_.reset(new DimmerEventFilter(this));
// Make sure it is undimmed at the beginning and then fire off the dimming
// animation.
- background_animator_.SetPaintsBackground(false,
- ash::BACKGROUND_CHANGE_IMMEDIATE);
+ background_animator_.SetPaintsBackground(false, BACKGROUND_CHANGE_IMMEDIATE);
SetHovered(false);
}
@@ -159,8 +161,9 @@ void DimmerView::SetHovered(bool hovered) {
hovered |= force_hovered_;
background_animator_.SetDuration(hovered ? kTimeToUnDimMs : kTimeToDimMs);
background_animator_.SetPaintsBackground(!hovered,
- disable_dimming_animations_for_test_ ?
- ash::BACKGROUND_CHANGE_IMMEDIATE : ash::BACKGROUND_CHANGE_ANIMATE);
+ disable_dimming_animations_for_test_
+ ? BACKGROUND_CHANGE_IMMEDIATE
+ : BACKGROUND_CHANGE_ANIMATE);
}
void DimmerView::ForceUndimming(bool force) {
@@ -177,37 +180,27 @@ void DimmerView::OnPaintBackground(gfx::Canvas* canvas) {
gfx::ImageSkia shelf_background =
*rb->GetImageNamed(IDR_ASH_SHELF_DIMMING).ToImageSkia();
- if (shelf_->GetAlignment() != ash::SHELF_ALIGNMENT_BOTTOM) {
+ if (!IsHorizontalAlignment(shelf_->GetAlignment())) {
shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage(
- shelf_background,
- shelf_->shelf_layout_manager()->SelectValueForShelfAlignment(
- SkBitmapOperations::ROTATION_90_CW,
- SkBitmapOperations::ROTATION_90_CW,
- SkBitmapOperations::ROTATION_270_CW));
+ shelf_background, shelf_->GetAlignment() == SHELF_ALIGNMENT_LEFT
+ ? SkBitmapOperations::ROTATION_90_CW
+ : SkBitmapOperations::ROTATION_270_CW);
}
paint.setAlpha(alpha_);
- canvas->DrawImageInt(shelf_background,
- 0,
- 0,
- shelf_background.width(),
- shelf_background.height(),
- 0,
- 0,
- width(),
- height(),
- false,
- paint);
+ canvas->DrawImageInt(shelf_background, 0, 0, shelf_background.width(),
+ shelf_background.height(), 0, 0, width(), height(),
+ false, paint);
}
DimmerView::DimmerEventFilter::DimmerEventFilter(DimmerView* owner)
: owner_(owner),
mouse_inside_(false),
touch_inside_(false) {
- ash::Shell::GetInstance()->AddPreTargetHandler(this);
+ Shell::GetInstance()->AddPreTargetHandler(this);
}
DimmerView::DimmerEventFilter::~DimmerEventFilter() {
- ash::Shell::GetInstance()->RemovePreTargetHandler(this);
+ Shell::GetInstance()->RemovePreTargetHandler(this);
}
void DimmerView::DimmerEventFilter::OnMouseEvent(ui::MouseEvent* event) {
@@ -239,17 +232,14 @@ void DimmerView::DimmerEventFilter::OnTouchEvent(ui::TouchEvent* event) {
touch_inside_ = touch_inside;
}
-using ash::ShelfLayoutManager;
-
// ShelfWindowTargeter makes it easier to resize windows with the mouse when the
// window-edge slightly overlaps with the shelf edge. The targeter also makes it
// easier to drag the shelf out with touch while it is hidden.
-class ShelfWindowTargeter : public wm::EasyResizeWindowTargeter,
- public ash::ShelfLayoutManagerObserver {
+class ShelfWindowTargeter : public ::wm::EasyResizeWindowTargeter,
+ public ShelfLayoutManagerObserver {
public:
- ShelfWindowTargeter(aura::Window* container,
- ShelfLayoutManager* shelf)
- : wm::EasyResizeWindowTargeter(container, gfx::Insets(), gfx::Insets()),
+ ShelfWindowTargeter(aura::Window* container, ShelfLayoutManager* shelf)
+ : ::wm::EasyResizeWindowTargeter(container, gfx::Insets(), gfx::Insets()),
shelf_(shelf) {
WillChangeVisibilityState(shelf_->visibility_state());
shelf_->AddObserver(this);
@@ -262,36 +252,30 @@ class ShelfWindowTargeter : public wm::EasyResizeWindowTargeter,
}
private:
- gfx::Insets GetInsetsForAlignment(int distance,
- ash::ShelfAlignment alignment) {
- switch (alignment) {
- case ash::SHELF_ALIGNMENT_BOTTOM:
- return gfx::Insets(distance, 0, 0, 0);
- case ash::SHELF_ALIGNMENT_LEFT:
- return gfx::Insets(0, 0, 0, distance);
- case ash::SHELF_ALIGNMENT_RIGHT:
- return gfx::Insets(0, distance, 0, 0);
- }
- NOTREACHED();
- return gfx::Insets();
+ gfx::Insets GetInsetsForAlignment(int distance, ShelfAlignment alignment) {
+ if (alignment == SHELF_ALIGNMENT_LEFT)
+ return gfx::Insets(0, 0, 0, distance);
+ if (alignment == SHELF_ALIGNMENT_RIGHT)
+ return gfx::Insets(0, distance, 0, 0);
+ return gfx::Insets(distance, 0, 0, 0);
}
- // ash::ShelfLayoutManagerObserver:
+ // ShelfLayoutManagerObserver:
void WillDeleteShelf() override {
shelf_->RemoveObserver(this);
shelf_ = NULL;
}
- void WillChangeVisibilityState(ash::ShelfVisibilityState new_state) override {
+ void WillChangeVisibilityState(ShelfVisibilityState new_state) override {
gfx::Insets mouse_insets;
gfx::Insets touch_insets;
- if (new_state == ash::SHELF_VISIBLE) {
+ if (new_state == SHELF_VISIBLE) {
// Let clicks at the very top of the shelf through so windows can be
// resized with the bottom-right corner and bottom edge.
mouse_insets = GetInsetsForAlignment(
ShelfLayoutManager::kWorkspaceAreaVisibleInset,
shelf_->GetAlignment());
- } else if (new_state == ash::SHELF_AUTO_HIDE) {
+ } else if (new_state == SHELF_AUTO_HIDE) {
// Extend the touch hit target out a bit to allow users to drag shelf out
// while hidden.
touch_insets = GetInsetsForAlignment(
@@ -310,8 +294,6 @@ class ShelfWindowTargeter : public wm::EasyResizeWindowTargeter,
} // namespace
-namespace ash {
-
// The contents view of the Shelf. This view contains ShelfView and
// sizes it to the width of the shelf minus the size of the status area.
class ShelfWidget::DelegateView : public views::WidgetDelegate,
@@ -467,34 +449,25 @@ void ShelfWidget::DelegateView::OnPaintBackground(gfx::Canvas* canvas) {
ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
gfx::ImageSkia shelf_background =
*rb->GetImageSkiaNamed(IDR_ASH_SHELF_BACKGROUND);
- if (SHELF_ALIGNMENT_BOTTOM != shelf_->GetAlignment())
+ const bool horizontal = IsHorizontalAlignment(shelf_->GetAlignment());
+ if (!horizontal) {
shelf_background = gfx::ImageSkiaOperations::CreateRotatedImage(
- shelf_background,
- shelf_->shelf_layout_manager()->SelectValueForShelfAlignment(
- SkBitmapOperations::ROTATION_90_CW,
- SkBitmapOperations::ROTATION_90_CW,
- SkBitmapOperations::ROTATION_270_CW));
+ shelf_background, shelf_->GetAlignment() == SHELF_ALIGNMENT_LEFT
+ ? SkBitmapOperations::ROTATION_90_CW
+ : SkBitmapOperations::ROTATION_270_CW);
+ }
const gfx::Rect dock_bounds(shelf_->shelf_layout_manager()->dock_bounds());
SkPaint paint;
paint.setAlpha(alpha_);
- canvas->DrawImageInt(shelf_background,
- 0,
- 0,
- shelf_background.width(),
- shelf_background.height(),
- (SHELF_ALIGNMENT_BOTTOM == shelf_->GetAlignment() &&
- dock_bounds.x() == 0 && dock_bounds.width() > 0)
- ? dock_bounds.width()
- : 0,
- 0,
- SHELF_ALIGNMENT_BOTTOM == shelf_->GetAlignment()
- ? width() - dock_bounds.width()
- : width(),
- height(),
- false,
- paint);
- if (SHELF_ALIGNMENT_BOTTOM == shelf_->GetAlignment() &&
- dock_bounds.width() > 0) {
+ canvas->DrawImageInt(
+ shelf_background, 0, 0, shelf_background.width(),
+ shelf_background.height(),
+ (horizontal && dock_bounds.x() == 0 && dock_bounds.width() > 0)
+ ? dock_bounds.width()
+ : 0,
+ 0, horizontal ? width() - dock_bounds.width() : width(), height(), false,
+ paint);
+ if (horizontal && dock_bounds.width() > 0) {
// The part of the shelf background that is in the corner below the docked
// windows close to the work area is an arched gradient that blends
// vertically oriented docked background and horizontal shelf.
@@ -504,30 +477,16 @@ void ShelfWidget::DelegateView::OnPaintBackground(gfx::Canvas* canvas) {
shelf_corner, SkBitmapOperations::ROTATION_90_CW);
}
canvas->DrawImageInt(
- shelf_corner,
- 0,
- 0,
- shelf_corner.width(),
- shelf_corner.height(),
+ shelf_corner, 0, 0, shelf_corner.width(), shelf_corner.height(),
dock_bounds.x() > 0 ? dock_bounds.x() : dock_bounds.width() - height(),
- 0,
- height(),
- height(),
- false,
- paint);
+ 0, height(), height(), false, paint);
// The part of the shelf background that is just below the docked windows
// is drawn using the last (lowest) 1-pixel tall strip of the image asset.
// This avoids showing the border 3D shadow between the shelf and the dock.
- canvas->DrawImageInt(shelf_background,
- 0,
- shelf_background.height() - 1,
- shelf_background.width(),
- 1,
+ canvas->DrawImageInt(shelf_background, 0, shelf_background.height() - 1,
+ shelf_background.width(), 1,
dock_bounds.x() > 0 ? dock_bounds.x() + height() : 0,
- 0,
- dock_bounds.width() - height(),
- height(),
- false,
+ 0, dock_bounds.width() - height(), height(), false,
paint);
}
gfx::Rect black_rect =
@@ -728,7 +687,7 @@ bool ShelfWidget::ShelfAlignmentAllowed() {
ShelfAlignment ShelfWidget::GetAlignment() const {
// TODO(msw): This should not be called before |shelf_| is created.
- return shelf_ ? shelf_->GetAlignment() : SHELF_ALIGNMENT_BOTTOM;
+ return shelf_ ? shelf_->alignment() : SHELF_ALIGNMENT_BOTTOM_LOCKED;
}
void ShelfWidget::OnShelfAlignmentChanged() {
« no previous file with comments | « ash/shelf/shelf_view_unittest.cc ('k') | ash/shelf/shelf_widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698