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

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

Issue 2961313003: Touch gestures for System Tray/ IME/ Stylus/ Notifications (Closed)
Patch Set: Fixed tdanderson's comments. Created 3 years, 5 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
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 ec269d298b1c80a9d90659bdf29f99a23b9704c1..c71912721a917644d587e4723d8cdc78652cf546 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -16,6 +16,7 @@
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_container.h"
#include "ash/system/tray/tray_event_filter.h"
+#include "ash/wm/maximize_mode/maximize_mode_controller.h"
#include "base/memory/ptr_util.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/compositor/layer.h"
@@ -130,6 +131,26 @@ class TrayBackground : public views::Background {
DISALLOW_COPY_AND_ASSIGN(TrayBackground);
};
+// CloseBubbleObserver is used to delay closing the tray bubbles until the
+// animation completes.
+class CloseBubbleObserver : public ui::ImplicitAnimationObserver {
+ public:
+ explicit CloseBubbleObserver(TrayBackgroundView* tray_background_view)
+ : tray_background_view_(tray_background_view) {}
+
+ ~CloseBubbleObserver() override {}
+
+ void OnImplicitAnimationsCompleted() override {
+ tray_background_view_->CloseBubble();
+ delete this;
+ }
+
+ private:
+ TrayBackgroundView* tray_background_view_ = nullptr;
+
+ DISALLOW_COPY_AND_ASSIGN(CloseBubbleObserver);
+};
+
////////////////////////////////////////////////////////////////////////////////
// TrayBackgroundView
@@ -236,13 +257,12 @@ const char* TrayBackgroundView::GetClassName() const {
return kViewClassName;
}
-void TrayBackgroundView::ChildPreferredSizeChanged(views::View* child) {
- PreferredSizeChanged();
-}
+void TrayBackgroundView::OnGestureEvent(ui::GestureEvent* event) {
+ if (drag_controller())
+ drag_controller_->ProcessGestureEvent(event, this);
-void TrayBackgroundView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
- ActionableView::GetAccessibleNodeData(node_data);
- node_data->SetName(GetAccessibleNameForTray());
+ if (!event->handled())
+ ActionableView::OnGestureEvent(event);
}
void TrayBackgroundView::AboutToRequestFocusFromTabTraversal(bool reverse) {
@@ -252,6 +272,15 @@ void TrayBackgroundView::AboutToRequestFocusFromTabTraversal(bool reverse) {
Shell::Get()->system_tray_notifier()->NotifyFocusOut(reverse);
}
+void TrayBackgroundView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+ ActionableView::GetAccessibleNodeData(node_data);
+ node_data->SetName(GetAccessibleNameForTray());
+}
+
+void TrayBackgroundView::ChildPreferredSizeChanged(views::View* child) {
+ PreferredSizeChanged();
+}
+
std::unique_ptr<views::InkDropRipple> TrayBackgroundView::CreateInkDropRipple()
const {
return base::MakeUnique<views::FloodFillInkDropRipple>(
@@ -306,6 +335,19 @@ void TrayBackgroundView::PaintButtonContents(gfx::Canvas* canvas) {
}
}
+void TrayBackgroundView::ProcessGestureEventForBubble(ui::GestureEvent* event) {
+ if (drag_controller())
+ drag_controller_->ProcessGestureEvent(event, this);
+}
+
+TrayBubbleView* TrayBackgroundView::GetBubbleView() {
+ return nullptr;
+}
+
+void TrayBackgroundView::CloseBubble() {}
+
+void TrayBackgroundView::ShowBubble() {}
+
void TrayBackgroundView::UpdateAfterShelfAlignmentChange() {
tray_container_->UpdateAfterShelfAlignmentChange();
@@ -319,6 +361,11 @@ void TrayBackgroundView::UpdateAfterShelfAlignmentChange() {
GetLocalBounds().InsetsFrom(paint_bounds)));
}
+void TrayBackgroundView::AnchorUpdated() {}
+
+void TrayBackgroundView::BubbleResized(
+ const views::TrayBubbleView* bubble_view) {}
+
void TrayBackgroundView::OnImplicitAnimationsCompleted() {
// If there is another animation in the queue, the reverse animation was
// triggered before the completion of animating to invisible. Do not turn off
@@ -392,10 +439,43 @@ gfx::Insets TrayBackgroundView::GetBubbleAnchorInsets() const {
}
}
-aura::Window* TrayBackgroundView::GetBubbleWindowContainer() const {
- return Shell::GetContainer(
+aura::Window* TrayBackgroundView::GetBubbleWindowContainer() {
+ aura::Window* container = Shell::GetContainer(
tray_container()->GetWidget()->GetNativeWindow()->GetRootWindow(),
kShellWindowId_SettingBubbleContainer);
+
+ // Place the bubble in |container|, or in a window clipped to the work area
+ // in maximize mode, to avoid tray bubble and shelf overlap.
+ if (Shell::Get()
+ ->maximize_mode_controller()
+ ->IsMaximizeModeWindowManagerEnabled()) {
+ if (!clipping_window_.get()) {
+ clipping_window_ = base::MakeUnique<aura::Window>(nullptr);
+ clipping_window_->Init(ui::LAYER_NOT_DRAWN);
+ clipping_window_->layer()->SetMasksToBounds(true);
+ container->AddChild(clipping_window_.get());
+ clipping_window_->Show();
+ }
+ clipping_window_->SetBounds(shelf_->GetUserWorkAreaBounds());
+ return clipping_window_.get();
+ }
+ return container;
+}
+
+void TrayBackgroundView::AnimateToTargetBounds(const gfx::Rect& target_bounds,
+ bool close_bubble) {
+ const int kAnimationDurationMS = 200;
+
+ ui::ScopedLayerAnimationSettings settings(
+ GetBubbleView()->GetWidget()->GetNativeView()->layer()->GetAnimator());
+ settings.SetTransitionDuration(
+ base::TimeDelta::FromMilliseconds(kAnimationDurationMS));
+ settings.SetTweenType(gfx::Tween::EASE_OUT);
+ settings.SetPreemptionStrategy(
+ ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+ if (close_bubble)
+ settings.AddObserver(new CloseBubbleObserver(this));
+ GetBubbleView()->GetWidget()->SetBounds(target_bounds);
}
std::unique_ptr<views::InkDropMask> TrayBackgroundView::CreateInkDropMask()

Powered by Google App Engine
This is Rietveld 408576698