| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef MASH_WM_BRIDGE_WM_WINDOW_MUS_H_ | |
| 6 #define MASH_WM_BRIDGE_WM_WINDOW_MUS_H_ | |
| 7 | |
| 8 #include <memory> | |
| 9 | |
| 10 #include "ash/common/wm/wm_window.h" | |
| 11 #include "base/macros.h" | |
| 12 #include "base/observer_list.h" | |
| 13 #include "components/mus/public/cpp/window_observer.h" | |
| 14 | |
| 15 namespace ash { | |
| 16 namespace wm { | |
| 17 class WmLayoutManager; | |
| 18 } | |
| 19 } | |
| 20 | |
| 21 namespace views { | |
| 22 class Widget; | |
| 23 } | |
| 24 | |
| 25 namespace mash { | |
| 26 namespace wm { | |
| 27 | |
| 28 class MusLayoutManagerAdapter; | |
| 29 class WmRootWindowControllerMus; | |
| 30 | |
| 31 // WmWindow implementation for mus. | |
| 32 // | |
| 33 // WmWindowMus is tied to the life of the underlying mus::Window (it is stored | |
| 34 // as an owned property). | |
| 35 class WmWindowMus : public ash::wm::WmWindow, public mus::WindowObserver { | |
| 36 public: | |
| 37 // Indicates the source of the widget creation. | |
| 38 enum class WidgetCreationType { | |
| 39 // The widget was created internally, and not at the request of a client. | |
| 40 // For example, overview mode creates a number of widgets. These widgets are | |
| 41 // created with a type of INTERNAL. | |
| 42 INTERNAL, | |
| 43 | |
| 44 // The widget was created for a client. In other words there is a client | |
| 45 // embedded in the mus::Window. For example, when Chrome creates a new | |
| 46 // browser window the window manager is asked to create the mus::Window. | |
| 47 // The window manager creates a mus::Window and a views::Widget to show the | |
| 48 // non-client frame decorations. In this case the creation type is | |
| 49 // FOR_CLIENT. | |
| 50 | |
| 51 FOR_CLIENT, | |
| 52 }; | |
| 53 | |
| 54 explicit WmWindowMus(mus::Window* window); | |
| 55 // NOTE: this class is owned by the corresponding window. You shouldn't delete | |
| 56 // TODO(sky): friend deleter and make private. | |
| 57 ~WmWindowMus() override; | |
| 58 | |
| 59 // Returns a WmWindow for an mus::Window, creating if necessary. | |
| 60 static WmWindowMus* Get(mus::Window* window); | |
| 61 | |
| 62 static WmWindowMus* Get(views::Widget* widget); | |
| 63 | |
| 64 static mus::Window* GetMusWindow(ash::wm::WmWindow* wm_window) { | |
| 65 return const_cast<mus::Window*>( | |
| 66 GetMusWindow(const_cast<const ash::wm::WmWindow*>(wm_window))); | |
| 67 } | |
| 68 static const mus::Window* GetMusWindow(const ash::wm::WmWindow* wm_window); | |
| 69 | |
| 70 static std::vector<WmWindow*> FromMusWindows( | |
| 71 const std::vector<mus::Window*>& mus_windows); | |
| 72 | |
| 73 // Sets the widget associated with the window. The widget is used to query | |
| 74 // state, such as min/max size. The widget is not owned by the WmWindowMus. | |
| 75 void set_widget(views::Widget* widget, WidgetCreationType type) { | |
| 76 widget_ = widget; | |
| 77 widget_creation_type_ = type; | |
| 78 } | |
| 79 | |
| 80 mus::Window* mus_window() { return window_; } | |
| 81 const mus::Window* mus_window() const { return window_; } | |
| 82 | |
| 83 WmRootWindowControllerMus* GetRootWindowControllerMus() { | |
| 84 return const_cast<WmRootWindowControllerMus*>( | |
| 85 const_cast<const WmWindowMus*>(this)->GetRootWindowControllerMus()); | |
| 86 } | |
| 87 const WmRootWindowControllerMus* GetRootWindowControllerMus() const; | |
| 88 | |
| 89 static WmWindowMus* AsWmWindowMus(ash::wm::WmWindow* window) { | |
| 90 return static_cast<WmWindowMus*>(window); | |
| 91 } | |
| 92 static const WmWindowMus* AsWmWindowMus(const ash::wm::WmWindow* window) { | |
| 93 return static_cast<const WmWindowMus*>(window); | |
| 94 } | |
| 95 | |
| 96 ash::wm::WindowState* GetWindowState() { | |
| 97 return ash::wm::WmWindow::GetWindowState(); | |
| 98 } | |
| 99 | |
| 100 // See description of |children_use_extended_hit_region_|. | |
| 101 bool ShouldUseExtendedHitRegion() const; | |
| 102 | |
| 103 // WmWindow: | |
| 104 const ash::wm::WmWindow* GetRootWindow() const override; | |
| 105 ash::wm::WmRootWindowController* GetRootWindowController() override; | |
| 106 ash::wm::WmGlobals* GetGlobals() const override; | |
| 107 void SetName(const char* name) override; | |
| 108 base::string16 GetTitle() const override; | |
| 109 void SetShellWindowId(int id) override; | |
| 110 int GetShellWindowId() const override; | |
| 111 ash::wm::WmWindow* GetChildByShellWindowId(int id) override; | |
| 112 ui::wm::WindowType GetType() const override; | |
| 113 ui::Layer* GetLayer() override; | |
| 114 display::Display GetDisplayNearestWindow() override; | |
| 115 bool HasNonClientArea() override; | |
| 116 int GetNonClientComponent(const gfx::Point& location) override; | |
| 117 gfx::Point ConvertPointToTarget(const ash::wm::WmWindow* target, | |
| 118 const gfx::Point& point) const override; | |
| 119 gfx::Point ConvertPointToScreen(const gfx::Point& point) const override; | |
| 120 gfx::Point ConvertPointFromScreen(const gfx::Point& point) const override; | |
| 121 gfx::Rect ConvertRectToScreen(const gfx::Rect& rect) const override; | |
| 122 gfx::Rect ConvertRectFromScreen(const gfx::Rect& rect) const override; | |
| 123 gfx::Size GetMinimumSize() const override; | |
| 124 gfx::Size GetMaximumSize() const override; | |
| 125 bool GetTargetVisibility() const override; | |
| 126 bool IsVisible() const override; | |
| 127 void SetOpacity(float opacity) override; | |
| 128 float GetTargetOpacity() const override; | |
| 129 void SetTransform(const gfx::Transform& transform) override; | |
| 130 gfx::Transform GetTargetTransform() const override; | |
| 131 bool IsSystemModal() const override; | |
| 132 bool GetBoolProperty(ash::wm::WmWindowProperty key) override; | |
| 133 int GetIntProperty(ash::wm::WmWindowProperty key) override; | |
| 134 const ash::wm::WindowState* GetWindowState() const override; | |
| 135 ash::wm::WmWindow* GetToplevelWindow() override; | |
| 136 void SetParentUsingContext(ash::wm::WmWindow* context, | |
| 137 const gfx::Rect& screen_bounds) override; | |
| 138 void AddChild(ash::wm::WmWindow* window) override; | |
| 139 ash::wm::WmWindow* GetParent() override; | |
| 140 const ash::wm::WmWindow* GetTransientParent() const override; | |
| 141 std::vector<ash::wm::WmWindow*> GetTransientChildren() override; | |
| 142 void SetLayoutManager( | |
| 143 std::unique_ptr<ash::wm::WmLayoutManager> layout_manager) override; | |
| 144 ash::wm::WmLayoutManager* GetLayoutManager() override; | |
| 145 void SetVisibilityAnimationType(int type) override; | |
| 146 void SetVisibilityAnimationDuration(base::TimeDelta delta) override; | |
| 147 void SetVisibilityAnimationTransition( | |
| 148 ::wm::WindowVisibilityAnimationTransition transition) override; | |
| 149 void Animate(::wm::WindowAnimationType type) override; | |
| 150 void StopAnimatingProperty( | |
| 151 ui::LayerAnimationElement::AnimatableProperty property) override; | |
| 152 void SetChildWindowVisibilityChangesAnimated() override; | |
| 153 void SetMasksToBounds(bool value) override; | |
| 154 void SetBounds(const gfx::Rect& bounds) override; | |
| 155 void SetBoundsWithTransitionDelay(const gfx::Rect& bounds, | |
| 156 base::TimeDelta delta) override; | |
| 157 void SetBoundsDirect(const gfx::Rect& bounds) override; | |
| 158 void SetBoundsDirectAnimated(const gfx::Rect& bounds) override; | |
| 159 void SetBoundsDirectCrossFade(const gfx::Rect& bounds) override; | |
| 160 void SetBoundsInScreen(const gfx::Rect& bounds_in_screen, | |
| 161 const display::Display& dst_display) override; | |
| 162 gfx::Rect GetBoundsInScreen() const override; | |
| 163 const gfx::Rect& GetBounds() const override; | |
| 164 gfx::Rect GetTargetBounds() override; | |
| 165 void ClearRestoreBounds() override; | |
| 166 void SetRestoreBoundsInScreen(const gfx::Rect& bounds) override; | |
| 167 gfx::Rect GetRestoreBoundsInScreen() const override; | |
| 168 bool Contains(const ash::wm::WmWindow* other) const override; | |
| 169 void SetShowState(ui::WindowShowState show_state) override; | |
| 170 ui::WindowShowState GetShowState() const override; | |
| 171 void SetRestoreShowState(ui::WindowShowState show_state) override; | |
| 172 void SetLockedToRoot(bool value) override; | |
| 173 void SetCapture() override; | |
| 174 bool HasCapture() override; | |
| 175 void ReleaseCapture() override; | |
| 176 bool HasRestoreBounds() const override; | |
| 177 void SetAlwaysOnTop(bool value) override; | |
| 178 bool IsAlwaysOnTop() const override; | |
| 179 void Hide() override; | |
| 180 void Show() override; | |
| 181 void CloseWidget() override; | |
| 182 bool IsFocused() const override; | |
| 183 bool IsActive() const override; | |
| 184 void Activate() override; | |
| 185 void Deactivate() override; | |
| 186 void SetFullscreen() override; | |
| 187 void Maximize() override; | |
| 188 void Minimize() override; | |
| 189 void Unminimize() override; | |
| 190 bool CanMaximize() const override; | |
| 191 bool CanMinimize() const override; | |
| 192 bool CanResize() const override; | |
| 193 bool CanActivate() const override; | |
| 194 void StackChildAtTop(ash::wm::WmWindow* child) override; | |
| 195 void StackChildAtBottom(ash::wm::WmWindow* child) override; | |
| 196 void StackChildAbove(ash::wm::WmWindow* child, | |
| 197 ash::wm::WmWindow* target) override; | |
| 198 void StackChildBelow(ash::wm::WmWindow* child, | |
| 199 ash::wm::WmWindow* target) override; | |
| 200 std::vector<ash::wm::WmWindow*> GetChildren() override; | |
| 201 void ShowResizeShadow(int component) override; | |
| 202 void HideResizeShadow() override; | |
| 203 void SetBoundsInScreenBehaviorForChildren( | |
| 204 BoundsInScreenBehavior behavior) override; | |
| 205 void SetSnapsChildrenToPhysicalPixelBoundary() override; | |
| 206 void SnapToPixelBoundaryIfNecessary() override; | |
| 207 void SetChildrenUseExtendedHitRegion() override; | |
| 208 void SetDescendantsStayInSameRootWindow(bool value) override; | |
| 209 void AddObserver(ash::wm::WmWindowObserver* observer) override; | |
| 210 void RemoveObserver(ash::wm::WmWindowObserver* observer) override; | |
| 211 | |
| 212 private: | |
| 213 // mus::WindowObserver: | |
| 214 void OnTreeChanged(const TreeChangeParams& params) override; | |
| 215 void OnWindowReordered(mus::Window* window, | |
| 216 mus::Window* relative_window, | |
| 217 mus::mojom::OrderDirection direction) override; | |
| 218 void OnWindowSharedPropertyChanged( | |
| 219 mus::Window* window, | |
| 220 const std::string& name, | |
| 221 const std::vector<uint8_t>* old_data, | |
| 222 const std::vector<uint8_t>* new_data) override; | |
| 223 void OnWindowBoundsChanged(mus::Window* window, | |
| 224 const gfx::Rect& old_bounds, | |
| 225 const gfx::Rect& new_bounds) override; | |
| 226 void OnWindowDestroying(mus::Window* window) override; | |
| 227 | |
| 228 mus::Window* window_; | |
| 229 | |
| 230 // The shell window id of this window. Shell window ids are defined in | |
| 231 // ash/common/shell_window_ids.h. | |
| 232 int shell_window_id_ = -1; | |
| 233 | |
| 234 std::unique_ptr<ash::wm::WindowState> window_state_; | |
| 235 | |
| 236 views::Widget* widget_ = nullptr; | |
| 237 | |
| 238 WidgetCreationType widget_creation_type_ = WidgetCreationType::INTERNAL; | |
| 239 | |
| 240 base::ObserverList<ash::wm::WmWindowObserver> observers_; | |
| 241 | |
| 242 std::unique_ptr<MusLayoutManagerAdapter> layout_manager_adapter_; | |
| 243 | |
| 244 std::unique_ptr<gfx::Rect> restore_bounds_in_screen_; | |
| 245 | |
| 246 ui::WindowShowState restore_show_state_ = ui::SHOW_STATE_DEFAULT; | |
| 247 | |
| 248 bool snap_children_to_pixel_boundary_ = false; | |
| 249 | |
| 250 // If true child windows should get a slightly larger hit region to make | |
| 251 // resizing easier. | |
| 252 bool children_use_extended_hit_region_ = false; | |
| 253 | |
| 254 DISALLOW_COPY_AND_ASSIGN(WmWindowMus); | |
| 255 }; | |
| 256 | |
| 257 } // namespace wm | |
| 258 } // namespace mash | |
| 259 | |
| 260 #endif // MASH_WM_BRIDGE_WM_WINDOW_MUS_H_ | |
| OLD | NEW |