| OLD | NEW | 
|     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "ash/common/shelf/shelf_layout_manager.h" |     5 #include "ash/common/shelf/shelf_layout_manager.h" | 
|     6  |     6  | 
|     7 #include <algorithm> |     7 #include <algorithm> | 
|     8 #include <cmath> |     8 #include <cmath> | 
|     9 #include <vector> |     9 #include <vector> | 
|    10  |    10  | 
|    11 #include "ash/common/material_design/material_design_controller.h" |    11 #include "ash/common/material_design/material_design_controller.h" | 
|    12 #include "ash/common/session/session_state_delegate.h" |    12 #include "ash/common/session/session_state_delegate.h" | 
|    13 #include "ash/common/shelf/shelf_constants.h" |    13 #include "ash/common/shelf/shelf_constants.h" | 
|    14 #include "ash/common/shelf/shelf_delegate.h" |    14 #include "ash/common/shelf/shelf_delegate.h" | 
|    15 #include "ash/common/shelf/shelf_layout_manager_observer.h" |    15 #include "ash/common/shelf/shelf_layout_manager_observer.h" | 
|    16 #include "ash/common/shelf/wm_shelf.h" |    16 #include "ash/common/shelf/wm_shelf.h" | 
|    17 #include "ash/common/shelf/wm_shelf_util.h" |    17 #include "ash/common/shelf/wm_shelf_util.h" | 
|    18 #include "ash/common/shell_window_ids.h" |    18 #include "ash/common/shell_window_ids.h" | 
|    19 #include "ash/common/system/status_area_widget.h" |    19 #include "ash/common/system/status_area_widget.h" | 
|    20 #include "ash/common/wm/fullscreen_window_finder.h" |    20 #include "ash/common/wm/fullscreen_window_finder.h" | 
|    21 #include "ash/common/wm/mru_window_tracker.h" |    21 #include "ash/common/wm/mru_window_tracker.h" | 
|    22 #include "ash/common/wm/window_state.h" |    22 #include "ash/common/wm/window_state.h" | 
|    23 #include "ash/common/wm/wm_screen_util.h" |    23 #include "ash/common/wm/wm_screen_util.h" | 
|    24 #include "ash/common/wm_lookup.h" |    24 #include "ash/common/wm_lookup.h" | 
|    25 #include "ash/common/wm_root_window_controller.h" |    25 #include "ash/common/wm_root_window_controller.h" | 
|    26 #include "ash/common/wm_root_window_controller_observer.h" |  | 
|    27 #include "ash/common/wm_shell.h" |    26 #include "ash/common/wm_shell.h" | 
|    28 #include "ash/common/wm_window.h" |    27 #include "ash/common/wm_window.h" | 
|    29 #include "base/auto_reset.h" |    28 #include "base/auto_reset.h" | 
|    30 #include "base/command_line.h" |    29 #include "base/command_line.h" | 
|    31 #include "base/i18n/rtl.h" |    30 #include "base/i18n/rtl.h" | 
|    32 #include "ui/base/ui_base_switches.h" |    31 #include "ui/base/ui_base_switches.h" | 
|    33 #include "ui/compositor/layer.h" |    32 #include "ui/compositor/layer.h" | 
|    34 #include "ui/compositor/layer_animation_observer.h" |    33 #include "ui/compositor/layer_animation_observer.h" | 
|    35 #include "ui/compositor/layer_animator.h" |    34 #include "ui/compositor/layer_animator.h" | 
|    36 #include "ui/compositor/scoped_layer_animation_settings.h" |    35 #include "ui/compositor/scoped_layer_animation_settings.h" | 
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    99     if (shelf_) |    98     if (shelf_) | 
|   100       shelf_->update_shelf_observer_ = NULL; |    99       shelf_->update_shelf_observer_ = NULL; | 
|   101   } |   100   } | 
|   102  |   101  | 
|   103   // Shelf we're in. NULL if deleted before we're deleted. |   102   // Shelf we're in. NULL if deleted before we're deleted. | 
|   104   ShelfLayoutManager* shelf_; |   103   ShelfLayoutManager* shelf_; | 
|   105  |   104  | 
|   106   DISALLOW_COPY_AND_ASSIGN(UpdateShelfObserver); |   105   DISALLOW_COPY_AND_ASSIGN(UpdateShelfObserver); | 
|   107 }; |   106 }; | 
|   108  |   107  | 
|   109 // ShelfLayoutManager::RootWindowControllerObserverImpl ------------------------ |  | 
|   110  |  | 
|   111 // NOTE: Some other layout managers also observe for OnShelfAlignmentChanged() |  | 
|   112 // via WmRootWindowControllerObserver instead of via ShellObserver. There are |  | 
|   113 // implicit assumptions that these layout managers run in order. In order to |  | 
|   114 // preserve the ordering, OnShelfAlignmentChanged() is implemented here in terms |  | 
|   115 // of a WmRootWindowControllerObserver instead of a ShellObserver. This gives us |  | 
|   116 // a sane ordering (or at least ordering as we've always had it in ash). |  | 
|   117 class ShelfLayoutManager::RootWindowControllerObserverImpl |  | 
|   118     : public WmRootWindowControllerObserver { |  | 
|   119  public: |  | 
|   120   explicit RootWindowControllerObserverImpl( |  | 
|   121       ShelfLayoutManager* shelf_layout_manager) |  | 
|   122       : shelf_layout_manager_(shelf_layout_manager), |  | 
|   123         root_window_controller_( |  | 
|   124             WmLookup::Get() |  | 
|   125                 ->GetWindowForWidget(shelf_layout_manager->shelf_widget()) |  | 
|   126                 ->GetRootWindowController()) { |  | 
|   127     root_window_controller_->AddObserver(this); |  | 
|   128   } |  | 
|   129   ~RootWindowControllerObserverImpl() override { |  | 
|   130     root_window_controller_->RemoveObserver(this); |  | 
|   131   } |  | 
|   132  |  | 
|   133   // WmRootWindowControllerObserver: |  | 
|   134   void OnShelfAlignmentChanged() override { |  | 
|   135     shelf_layout_manager_->LayoutShelf(); |  | 
|   136   } |  | 
|   137  |  | 
|   138  private: |  | 
|   139   ShelfLayoutManager* shelf_layout_manager_; |  | 
|   140   WmRootWindowController* root_window_controller_; |  | 
|   141  |  | 
|   142   DISALLOW_COPY_AND_ASSIGN(RootWindowControllerObserverImpl); |  | 
|   143 }; |  | 
|   144  |  | 
|   145 // ShelfLayoutManager ---------------------------------------------------------- |   108 // ShelfLayoutManager ---------------------------------------------------------- | 
|   146  |   109  | 
|   147 ShelfLayoutManager::ShelfLayoutManager(ShelfWidget* shelf_widget, |   110 ShelfLayoutManager::ShelfLayoutManager(ShelfWidget* shelf_widget, | 
|   148                                        WmShelf* wm_shelf) |   111                                        WmShelf* wm_shelf) | 
|   149     : updating_bounds_(false), |   112     : updating_bounds_(false), | 
|   150       shelf_widget_(shelf_widget), |   113       shelf_widget_(shelf_widget), | 
|   151       wm_shelf_(wm_shelf), |   114       wm_shelf_(wm_shelf), | 
|   152       window_overlaps_shelf_(false), |   115       window_overlaps_shelf_(false), | 
|   153       mouse_over_shelf_when_auto_hide_timer_started_(false), |   116       mouse_over_shelf_when_auto_hide_timer_started_(false), | 
|   154       gesture_drag_status_(GESTURE_DRAG_NONE), |   117       gesture_drag_status_(GESTURE_DRAG_NONE), | 
|   155       gesture_drag_amount_(0.f), |   118       gesture_drag_amount_(0.f), | 
|   156       gesture_drag_auto_hide_state_(SHELF_AUTO_HIDE_SHOWN), |   119       gesture_drag_auto_hide_state_(SHELF_AUTO_HIDE_SHOWN), | 
|   157       update_shelf_observer_(NULL), |   120       update_shelf_observer_(NULL), | 
|   158       chromevox_panel_height_(0), |   121       chromevox_panel_height_(0), | 
|   159       duration_override_in_ms_(0), |   122       duration_override_in_ms_(0) { | 
|   160       root_window_controller_observer_( |  | 
|   161           new RootWindowControllerObserverImpl(this)) { |  | 
|   162   DCHECK(shelf_widget_); |   123   DCHECK(shelf_widget_); | 
|   163   DCHECK(wm_shelf_); |   124   DCHECK(wm_shelf_); | 
|   164   WmShell::Get()->AddShellObserver(this); |   125   WmShell::Get()->AddShellObserver(this); | 
|   165   WmShell::Get()->AddLockStateObserver(this); |   126   WmShell::Get()->AddLockStateObserver(this); | 
|   166   WmShell::Get()->AddActivationObserver(this); |   127   WmShell::Get()->AddActivationObserver(this); | 
|   167   WmShell::Get()->GetSessionStateDelegate()->AddSessionStateObserver(this); |   128   WmShell::Get()->GetSessionStateDelegate()->AddSessionStateObserver(this); | 
|   168 } |   129 } | 
|   169  |   130  | 
|   170 ShelfLayoutManager::~ShelfLayoutManager() { |   131 ShelfLayoutManager::~ShelfLayoutManager() { | 
|   171   if (update_shelf_observer_) |   132   if (update_shelf_observer_) | 
| (...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1178   gesture_drag_status_ = GESTURE_DRAG_NONE; |  1139   gesture_drag_status_ = GESTURE_DRAG_NONE; | 
|  1179 } |  1140 } | 
|  1180  |  1141  | 
|  1181 int ShelfLayoutManager::GetShelfInsetsForAutoHide() const { |  1142 int ShelfLayoutManager::GetShelfInsetsForAutoHide() const { | 
|  1182   if (invisible_auto_hide_shelf_) |  1143   if (invisible_auto_hide_shelf_) | 
|  1183     return 0; |  1144     return 0; | 
|  1184   return GetShelfConstant(SHELF_INSETS_FOR_AUTO_HIDE); |  1145   return GetShelfConstant(SHELF_INSETS_FOR_AUTO_HIDE); | 
|  1185 } |  1146 } | 
|  1186  |  1147  | 
|  1187 }  // namespace ash |  1148 }  // namespace ash | 
| OLD | NEW |