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

Unified Diff: ash/system/tray/tray_background_view.cc

Issue 10834338: Move non SystemTray specific code to TrayBackgroundView (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test Created 8 years, 4 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/system/tray/tray_background_view.h ('k') | ash/system/web_notification/web_notification_tray.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/tray/tray_background_view.cc
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 0a2a196561af7ce97d1e7c9b6128cd793c431459..766577f571808a53364c02fc77ec3e8b81ac5496 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -11,6 +11,7 @@
#include "ash/system/status_area_widget_delegate.h"
#include "ash/system/tray/tray_constants.h"
#include "ui/aura/window.h"
+#include "ui/compositor/layer_animation_observer.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/skia_util.h"
#include "ui/views/background.h"
@@ -32,6 +33,33 @@ const int kTrayContainerHorizontalPaddingVerticalAlignment = 1;
namespace ash {
namespace internal {
+// Observe the tray layer animation and update the anchor when it changes.
+// TODO(stevenjb): Observe or mirror the actual animation, not just the start
+// and end points.
+class TrayLayerAnimationObserver : public ui::LayerAnimationObserver {
+ public:
+ explicit TrayLayerAnimationObserver(TrayBackgroundView* host)
+ : host_(host) {
+ }
+
+ virtual void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) {
+ host_->AnchorUpdated();
+ }
+
+ virtual void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) {
+ host_->AnchorUpdated();
+ }
+
+ virtual void OnLayerAnimationScheduled(ui::LayerAnimationSequence* sequence) {
+ host_->AnchorUpdated();
+ }
+
+ private:
+ TrayBackgroundView* host_;
+
+ DISALLOW_COPY_AND_ASSIGN(TrayLayerAnimationObserver);
+};
+
class TrayBackground : public views::Background {
public:
TrayBackground() : alpha_(kTrayBackgroundAlpha) {}
@@ -131,7 +159,9 @@ TrayBackgroundView::TrayBackgroundView(
ALLOW_THIS_IN_INITIALIZER_LIST(hide_background_animator_(
this, 0, kTrayBackgroundAlpha)),
ALLOW_THIS_IN_INITIALIZER_LIST(hover_background_animator_(
- this, 0, kTrayBackgroundHoverAlpha - kTrayBackgroundAlpha)) {
+ this, 0, kTrayBackgroundHoverAlpha - kTrayBackgroundAlpha)),
+ ALLOW_THIS_IN_INITIALIZER_LIST(layer_animation_observer_(
+ new TrayLayerAnimationObserver(this))) {
set_notify_enter_exit_on_child(true);
// Initially we want to paint the background, but without the hover effect.
@@ -144,6 +174,16 @@ TrayBackgroundView::TrayBackgroundView(
}
TrayBackgroundView::~TrayBackgroundView() {
+ if (GetWidget()) {
+ GetWidget()->GetNativeView()->layer()->GetAnimator()->RemoveObserver(
+ layer_animation_observer_.get());
+ }
+}
+
+void TrayBackgroundView::Initialize() {
+ GetWidget()->GetNativeView()->layer()->GetAnimator()->AddObserver(
+ layer_animation_observer_.get());
+ SetBorder();
}
void TrayBackgroundView::OnMouseEntered(const ui::MouseEvent& event) {
@@ -160,6 +200,21 @@ void TrayBackgroundView::ChildPreferredSizeChanged(views::View* child) {
PreferredSizeChanged();
}
+void TrayBackgroundView::OnPaintFocusBorder(gfx::Canvas* canvas) {
+ // The tray itself expands to the right and bottom edge of the screen to make
+ // sure clicking on the edges brings up the popup. However, the focus border
+ // should be only around the container.
+ if (GetWidget() && GetWidget()->IsActive())
+ DrawBorder(canvas, GetContentsBounds());
+}
+
+void TrayBackgroundView::AboutToRequestFocusFromTabTraversal(bool reverse) {
+ // Return focus to the login view. See crbug.com/120500.
+ views::View* v = GetNextFocusableView();
+ if (v)
+ v->AboutToRequestFocusFromTabTraversal(reverse);
+}
+
bool TrayBackgroundView::PerformAction(const ui::Event& event) {
return false;
}
« no previous file with comments | « ash/system/tray/tray_background_view.h ('k') | ash/system/web_notification/web_notification_tray.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698