| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/mus/non_client_frame_controller.h" | 5 #include "ash/mus/non_client_frame_controller.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "ash/ash_constants.h" | 13 #include "ash/ash_constants.h" |
| 14 #include "ash/ash_layout_constants.h" | 14 #include "ash/ash_layout_constants.h" |
| 15 #include "ash/frame/custom_frame_view_ash.h" | 15 #include "ash/frame/custom_frame_view_ash.h" |
| 16 #include "ash/mus/frame/detached_title_area_renderer.h" | 16 #include "ash/mus/frame/detached_title_area_renderer.h" |
| 17 #include "ash/mus/move_event_handler.h" | 17 #include "ash/mus/move_event_handler.h" |
| 18 #include "ash/mus/property_util.h" | 18 #include "ash/mus/property_util.h" |
| 19 #include "ash/mus/window_manager.h" | 19 #include "ash/mus/window_manager.h" |
| 20 #include "ash/mus/window_properties.h" | 20 #include "ash/mus/window_properties.h" |
| 21 #include "ash/shared/immersive_fullscreen_controller_delegate.h" | 21 #include "ash/shared/immersive_fullscreen_controller_delegate.h" |
| 22 #include "ash/wm/panels/panel_frame_view.h" | 22 #include "ash/wm/panels/panel_frame_view.h" |
| 23 #include "ash/wm/window_properties.h" | 23 #include "ash/wm/window_properties.h" |
| 24 #include "ash/wm/window_util.h" | 24 #include "ash/wm/window_util.h" |
| 25 #include "ash/wm_window.h" | |
| 26 #include "base/macros.h" | 25 #include "base/macros.h" |
| 27 #include "base/memory/ptr_util.h" | 26 #include "base/memory/ptr_util.h" |
| 28 #include "base/strings/utf_string_conversions.h" | 27 #include "base/strings/utf_string_conversions.h" |
| 29 #include "services/ui/public/interfaces/window_manager.mojom.h" | 28 #include "services/ui/public/interfaces/window_manager.mojom.h" |
| 30 #include "ui/aura/client/aura_constants.h" | 29 #include "ui/aura/client/aura_constants.h" |
| 31 #include "ui/aura/client/transient_window_client.h" | 30 #include "ui/aura/client/transient_window_client.h" |
| 32 #include "ui/aura/mus/property_converter.h" | 31 #include "ui/aura/mus/property_converter.h" |
| 33 #include "ui/aura/mus/property_utils.h" | 32 #include "ui/aura/mus/property_utils.h" |
| 34 #include "ui/aura/mus/window_manager_delegate.h" | 33 #include "ui/aura/mus/window_manager_delegate.h" |
| 35 #include "ui/aura/mus/window_port_mus.h" | 34 #include "ui/aura/mus/window_port_mus.h" |
| 36 #include "ui/aura/window.h" | 35 #include "ui/aura/window.h" |
| 37 #include "ui/base/class_property.h" | 36 #include "ui/base/class_property.h" |
| 38 #include "ui/base/hit_test.h" | 37 #include "ui/base/hit_test.h" |
| 39 #include "ui/compositor/layer.h" | 38 #include "ui/compositor/layer.h" |
| 40 #include "ui/gfx/geometry/vector2d.h" | 39 #include "ui/gfx/geometry/vector2d.h" |
| 41 #include "ui/views/widget/native_widget_aura.h" | 40 #include "ui/views/widget/native_widget_aura.h" |
| 42 #include "ui/views/widget/widget.h" | 41 #include "ui/views/widget/widget.h" |
| 42 #include "ui/wm/core/coordinate_conversion.h" |
| 43 | 43 |
| 44 DECLARE_UI_CLASS_PROPERTY_TYPE(ash::mus::NonClientFrameController*); | 44 DECLARE_UI_CLASS_PROPERTY_TYPE(ash::mus::NonClientFrameController*); |
| 45 | 45 |
| 46 namespace ash { | 46 namespace ash { |
| 47 namespace mus { | 47 namespace mus { |
| 48 namespace { | 48 namespace { |
| 49 | 49 |
| 50 DEFINE_UI_CLASS_PROPERTY_KEY(NonClientFrameController*, | 50 DEFINE_UI_CLASS_PROPERTY_KEY(NonClientFrameController*, |
| 51 kNonClientFrameControllerKey, | 51 kNonClientFrameControllerKey, |
| 52 nullptr); | 52 nullptr); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 // Clip the bounds of the title area to that of the |frame_window_|. | 113 // Clip the bounds of the title area to that of the |frame_window_|. |
| 114 gfx::Rect visible_bounds = title_area_window->bounds(); | 114 gfx::Rect visible_bounds = title_area_window->bounds(); |
| 115 visible_bounds.Intersect(frame_window_->bounds()); | 115 visible_bounds.Intersect(frame_window_->bounds()); |
| 116 // The intersection is in the coordinates of |title_area_window|'s parent, | 116 // The intersection is in the coordinates of |title_area_window|'s parent, |
| 117 // convert to be in |title_area_window| and then to screen. | 117 // convert to be in |title_area_window| and then to screen. |
| 118 visible_bounds -= title_area_window->bounds().origin().OffsetFromOrigin(); | 118 visible_bounds -= title_area_window->bounds().origin().OffsetFromOrigin(); |
| 119 // TODO: this needs updating when parent of |title_area_window| is changed, | 119 // TODO: this needs updating when parent of |title_area_window| is changed, |
| 120 // DCHECK is to ensure when parent changes this code is updated. | 120 // DCHECK is to ensure when parent changes this code is updated. |
| 121 // http://crbug.com/640392. | 121 // http://crbug.com/640392. |
| 122 DCHECK_EQ(frame_window_->parent(), title_area_window->parent()); | 122 DCHECK_EQ(frame_window_->parent(), title_area_window->parent()); |
| 123 result.push_back( | 123 ::wm::ConvertRectToScreen(title_area_window, &visible_bounds); |
| 124 WmWindow::Get(title_area_window)->ConvertRectToScreen(visible_bounds)); | 124 result.push_back(visible_bounds); |
| 125 return result; | 125 return result; |
| 126 } | 126 } |
| 127 | 127 |
| 128 private: | 128 private: |
| 129 void CreateTitleAreaWindow() { | 129 void CreateTitleAreaWindow() { |
| 130 if (GetTitleAreaWindow()) | 130 if (GetTitleAreaWindow()) |
| 131 return; | 131 return; |
| 132 | 132 |
| 133 // TODO(sky): bounds aren't right here. Need to convert to display. | 133 // TODO(sky): bounds aren't right here. Need to convert to display. |
| 134 gfx::Rect bounds = frame_window_->bounds(); | 134 gfx::Rect bounds = frame_window_->bounds(); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 frame_controller_->window()); | 256 frame_controller_->window()); |
| 257 return false; | 257 return false; |
| 258 } | 258 } |
| 259 | 259 |
| 260 private: | 260 private: |
| 261 NonClientFrameController* frame_controller_; | 261 NonClientFrameController* frame_controller_; |
| 262 | 262 |
| 263 DISALLOW_COPY_AND_ASSIGN(ClientViewMus); | 263 DISALLOW_COPY_AND_ASSIGN(ClientViewMus); |
| 264 }; | 264 }; |
| 265 | 265 |
| 266 // Returns the frame insets to use when ShouldUseExtendedHitRegion() returns | 266 // Returns the frame insets to use when ShouldUseExtendedHitRegionForWindow() |
| 267 // true. | 267 // returns true. |
| 268 gfx::Insets GetExtendedHitRegion() { | 268 gfx::Insets GetExtendedHitRegion() { |
| 269 return gfx::Insets(kResizeOutsideBoundsSize, kResizeOutsideBoundsSize, | 269 return gfx::Insets(kResizeOutsideBoundsSize, kResizeOutsideBoundsSize, |
| 270 kResizeOutsideBoundsSize, kResizeOutsideBoundsSize); | 270 kResizeOutsideBoundsSize, kResizeOutsideBoundsSize); |
| 271 } | 271 } |
| 272 | 272 |
| 273 } // namespace | 273 } // namespace |
| 274 | 274 |
| 275 NonClientFrameController::NonClientFrameController( | 275 NonClientFrameController::NonClientFrameController( |
| 276 aura::Window* parent, | 276 aura::Window* parent, |
| 277 aura::Window* context, | 277 aura::Window* context, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 | 326 |
| 327 // Only the caption draws any content. So the caption has its own layer (see | 327 // Only the caption draws any content. So the caption has its own layer (see |
| 328 // above in WmNativeWidgetAura::CreateNonClientFrameView()). The rest of the | 328 // above in WmNativeWidgetAura::CreateNonClientFrameView()). The rest of the |
| 329 // region needs to take part in occlusion in the compositor, but not generate | 329 // region needs to take part in occlusion in the compositor, but not generate |
| 330 // any content to draw. So the layer is marked as opaque and to draw | 330 // any content to draw. So the layer is marked as opaque and to draw |
| 331 // solid-color (but the color is transparent, so nothing is actually drawn). | 331 // solid-color (but the color is transparent, so nothing is actually drawn). |
| 332 ui::Layer* layer = widget_->GetNativeWindow()->layer(); | 332 ui::Layer* layer = widget_->GetNativeWindow()->layer(); |
| 333 layer->SetColor(SK_ColorTRANSPARENT); | 333 layer->SetColor(SK_ColorTRANSPARENT); |
| 334 layer->SetFillsBoundsOpaquely(true); | 334 layer->SetFillsBoundsOpaquely(true); |
| 335 | 335 |
| 336 WmWindow* wm_window = WmWindow::Get(window_); | |
| 337 const gfx::Insets extended_hit_region = | 336 const gfx::Insets extended_hit_region = |
| 338 wm_window->ShouldUseExtendedHitRegion() ? GetExtendedHitRegion() | 337 wm::ShouldUseExtendedHitRegionForWindow(window_) ? GetExtendedHitRegion() |
| 339 : gfx::Insets(); | 338 : gfx::Insets(); |
| 340 window_manager_client_->SetExtendedHitArea(window_, extended_hit_region); | 339 window_manager_client_->SetExtendedHitArea(window_, extended_hit_region); |
| 341 | 340 |
| 342 aura::client::GetTransientWindowClient()->AddObserver(this); | 341 aura::client::GetTransientWindowClient()->AddObserver(this); |
| 343 } | 342 } |
| 344 | 343 |
| 345 // static | 344 // static |
| 346 NonClientFrameController* NonClientFrameController::Get(aura::Window* window) { | 345 NonClientFrameController* NonClientFrameController::Get(aura::Window* window) { |
| 347 return window->GetProperty(kNonClientFrameControllerKey); | 346 return window->GetProperty(kNonClientFrameControllerKey); |
| 348 } | 347 } |
| 349 | 348 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 void NonClientFrameController::OnWillRestackTransientChildAbove( | 467 void NonClientFrameController::OnWillRestackTransientChildAbove( |
| 469 aura::Window* parent, | 468 aura::Window* parent, |
| 470 aura::Window* transient_child) {} | 469 aura::Window* transient_child) {} |
| 471 | 470 |
| 472 void NonClientFrameController::OnDidRestackTransientChildAbove( | 471 void NonClientFrameController::OnDidRestackTransientChildAbove( |
| 473 aura::Window* parent, | 472 aura::Window* parent, |
| 474 aura::Window* transient_child) {} | 473 aura::Window* transient_child) {} |
| 475 | 474 |
| 476 } // namespace mus | 475 } // namespace mus |
| 477 } // namespace ash | 476 } // namespace ash |
| OLD | NEW |