| 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 "ui/views/widget/native_widget_aura.h" | 5 #include "ui/views/widget/native_widget_aura.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "third_party/skia/include/core/SkRegion.h" | 9 #include "third_party/skia/include/core/SkRegion.h" |
| 10 #include "ui/aura/client/activation_change_observer.h" | 10 #include "ui/aura/client/activation_change_observer.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 | 53 |
| 54 void SetRestoreBounds(aura::Window* window, const gfx::Rect& bounds) { | 54 void SetRestoreBounds(aura::Window* window, const gfx::Rect& bounds) { |
| 55 window->SetProperty(aura::client::kRestoreBoundsKey, new gfx::Rect(bounds)); | 55 window->SetProperty(aura::client::kRestoreBoundsKey, new gfx::Rect(bounds)); |
| 56 } | 56 } |
| 57 | 57 |
| 58 } // namespace | 58 } // namespace |
| 59 | 59 |
| 60 //////////////////////////////////////////////////////////////////////////////// | 60 //////////////////////////////////////////////////////////////////////////////// |
| 61 // NativeWidgetAura, public: | 61 // NativeWidgetAura, public: |
| 62 | 62 |
| 63 NativeWidgetAura::NativeWidgetAura(internal::NativeWidgetDelegate* delegate) | 63 NativeWidgetAura::NativeWidgetAura( |
| 64 internal::NativeWidgetDelegate* delegate, gfx::NativeView parent) |
| 64 : delegate_(delegate), | 65 : delegate_(delegate), |
| 65 ALLOW_THIS_IN_INITIALIZER_LIST(desktop_helper_( | 66 ALLOW_THIS_IN_INITIALIZER_LIST(desktop_helper_( |
| 66 ViewsDelegate::views_delegate ? | 67 ViewsDelegate::views_delegate ? |
| 67 ViewsDelegate::views_delegate->CreateNativeWidgetHelper(this) : | 68 ViewsDelegate::views_delegate->CreateNativeWidgetHelper(this, parent): |
| 68 NULL)), | 69 NULL)), |
| 69 ALLOW_THIS_IN_INITIALIZER_LIST(window_(new aura::Window(this))), | 70 ALLOW_THIS_IN_INITIALIZER_LIST(window_(new aura::Window(this))), |
| 70 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), | 71 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), |
| 71 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), | 72 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), |
| 72 can_activate_(true), | 73 can_activate_(true), |
| 73 destroying_(false), | 74 destroying_(false), |
| 74 cursor_(gfx::kNullCursor), | 75 cursor_(gfx::kNullCursor), |
| 75 saved_window_state_(ui::SHOW_STATE_DEFAULT) { | 76 saved_window_state_(ui::SHOW_STATE_DEFAULT) { |
| 76 } | 77 } |
| 77 | 78 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 SetAlwaysOnTop(params.keep_on_top); | 130 SetAlwaysOnTop(params.keep_on_top); |
| 130 // If the parent is not specified, find the default parent for | 131 // If the parent is not specified, find the default parent for |
| 131 // the |window_| using the desired |window_bounds|. | 132 // the |window_| using the desired |window_bounds|. |
| 132 if (!parent) { | 133 if (!parent) { |
| 133 parent = aura::client::GetStackingClient(params.GetParent())-> | 134 parent = aura::client::GetStackingClient(params.GetParent())-> |
| 134 GetDefaultParent(window_, window_bounds); | 135 GetDefaultParent(window_, window_bounds); |
| 135 } else if (window_bounds == gfx::Rect()) { | 136 } else if (window_bounds == gfx::Rect()) { |
| 136 // If a parent is specified but no bounds are given, | 137 // If a parent is specified but no bounds are given, |
| 137 // use the origin of the parent's display so that the widget | 138 // use the origin of the parent's display so that the widget |
| 138 // will be added to the same display as the parent. | 139 // will be added to the same display as the parent. |
| 139 gfx::Rect bounds = gfx::Screen::GetDisplayNearestWindow(parent).bounds(); | 140 gfx::Rect bounds = gfx::Screen::GetScreenFor(parent)-> |
| 141 GetDisplayNearestWindow(parent).bounds(); |
| 140 window_bounds.set_origin(bounds.origin()); | 142 window_bounds.set_origin(bounds.origin()); |
| 141 } | 143 } |
| 142 window_->SetParent(parent); | 144 window_->SetParent(parent); |
| 143 } | 145 } |
| 144 | 146 |
| 145 // Wait to set the bounds until we have a parent. That way we can know our | 147 // Wait to set the bounds until we have a parent. That way we can know our |
| 146 // true state/bounds (the LayoutManager may enforce a particular | 148 // true state/bounds (the LayoutManager may enforce a particular |
| 147 // state/bounds). | 149 // state/bounds). |
| 148 if (IsMaximized()) | 150 if (IsMaximized()) |
| 149 SetRestoreBounds(window_, window_bounds); | 151 SetRestoreBounds(window_, window_bounds); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 | 279 |
| 278 internal::InputMethodDelegate* NativeWidgetAura::GetInputMethodDelegate() { | 280 internal::InputMethodDelegate* NativeWidgetAura::GetInputMethodDelegate() { |
| 279 return this; | 281 return this; |
| 280 } | 282 } |
| 281 | 283 |
| 282 void NativeWidgetAura::CenterWindow(const gfx::Size& size) { | 284 void NativeWidgetAura::CenterWindow(const gfx::Size& size) { |
| 283 gfx::Rect parent_bounds(window_->parent()->GetBoundsInRootWindow()); | 285 gfx::Rect parent_bounds(window_->parent()->GetBoundsInRootWindow()); |
| 284 // When centering window, we take the intersection of the host and | 286 // When centering window, we take the intersection of the host and |
| 285 // the parent. We assume the root window represents the visible | 287 // the parent. We assume the root window represents the visible |
| 286 // rect of a single screen. | 288 // rect of a single screen. |
| 287 gfx::Rect work_area = | 289 gfx::Rect work_area = gfx::Screen::GetScreenFor(window_)-> |
| 288 gfx::Screen::GetDisplayNearestWindow(window_).work_area(); | 290 GetDisplayNearestWindow(window_).work_area(); |
| 289 | 291 |
| 290 aura::client::ScreenPositionClient* screen_position_client = | 292 aura::client::ScreenPositionClient* screen_position_client = |
| 291 aura::client::GetScreenPositionClient(window_->GetRootWindow()); | 293 aura::client::GetScreenPositionClient(window_->GetRootWindow()); |
| 292 if (screen_position_client) { | 294 if (screen_position_client) { |
| 293 gfx::Point origin = work_area.origin(); | 295 gfx::Point origin = work_area.origin(); |
| 294 screen_position_client->ConvertPointFromScreen(window_->GetRootWindow(), | 296 screen_position_client->ConvertPointFromScreen(window_->GetRootWindow(), |
| 295 &origin); | 297 &origin); |
| 296 work_area.set_origin(origin); | 298 work_area.set_origin(origin); |
| 297 } | 299 } |
| 298 | 300 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 } | 387 } |
| 386 return window_->GetBoundsInScreen(); | 388 return window_->GetBoundsInScreen(); |
| 387 } | 389 } |
| 388 | 390 |
| 389 void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) { | 391 void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) { |
| 390 aura::RootWindow* root = window_->GetRootWindow(); | 392 aura::RootWindow* root = window_->GetRootWindow(); |
| 391 if (root) { | 393 if (root) { |
| 392 aura::client::ScreenPositionClient* screen_position_client = | 394 aura::client::ScreenPositionClient* screen_position_client = |
| 393 aura::client::GetScreenPositionClient(root); | 395 aura::client::GetScreenPositionClient(root); |
| 394 if (screen_position_client) { | 396 if (screen_position_client) { |
| 395 gfx::Display dst_display = gfx::Screen::GetDisplayMatching(bounds); | 397 gfx::Display dst_display = |
| 398 gfx::Screen::GetScreenFor(window_)->GetDisplayMatching(bounds); |
| 396 screen_position_client->SetBounds(window_, bounds, dst_display); | 399 screen_position_client->SetBounds(window_, bounds, dst_display); |
| 397 return; | 400 return; |
| 398 } | 401 } |
| 399 } | 402 } |
| 400 window_->SetBounds(bounds); | 403 window_->SetBounds(bounds); |
| 401 } | 404 } |
| 402 | 405 |
| 403 void NativeWidgetAura::SetSize(const gfx::Size& size) { | 406 void NativeWidgetAura::SetSize(const gfx::Size& size) { |
| 404 window_->SetBounds(gfx::Rect(window_->bounds().origin(), size)); | 407 window_->SetBounds(gfx::Rect(window_->bounds().origin(), size)); |
| 405 } | 408 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 cursor_client->SetCursor(cursor); | 587 cursor_client->SetCursor(cursor); |
| 585 } | 588 } |
| 586 | 589 |
| 587 void NativeWidgetAura::ClearNativeFocus() { | 590 void NativeWidgetAura::ClearNativeFocus() { |
| 588 if (window_ && window_->GetFocusManager() && | 591 if (window_ && window_->GetFocusManager() && |
| 589 window_->Contains(window_->GetFocusManager()->GetFocusedWindow())) | 592 window_->Contains(window_->GetFocusManager()->GetFocusedWindow())) |
| 590 window_->GetFocusManager()->SetFocusedWindow(window_, NULL); | 593 window_->GetFocusManager()->SetFocusedWindow(window_, NULL); |
| 591 } | 594 } |
| 592 | 595 |
| 593 gfx::Rect NativeWidgetAura::GetWorkAreaBoundsInScreen() const { | 596 gfx::Rect NativeWidgetAura::GetWorkAreaBoundsInScreen() const { |
| 594 return gfx::Screen::GetDisplayNearestWindow(GetNativeView()).work_area(); | 597 return gfx::Screen::GetScreenFor(GetNativeView())-> |
| 598 GetDisplayNearestWindow(GetNativeView()).work_area(); |
| 595 } | 599 } |
| 596 | 600 |
| 597 void NativeWidgetAura::SetInactiveRenderingDisabled(bool value) { | 601 void NativeWidgetAura::SetInactiveRenderingDisabled(bool value) { |
| 598 if (!value) { | 602 if (!value) { |
| 599 active_window_observer_.reset(); | 603 active_window_observer_.reset(); |
| 600 } else { | 604 } else { |
| 601 active_window_observer_.reset( | 605 active_window_observer_.reset( |
| 602 new NativeWidgetAuraWindowObserver(window_, delegate_)); | 606 new NativeWidgetAuraWindowObserver(window_, delegate_)); |
| 603 } | 607 } |
| 604 } | 608 } |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 908 return false; | 912 return false; |
| 909 } | 913 } |
| 910 | 914 |
| 911 namespace internal { | 915 namespace internal { |
| 912 | 916 |
| 913 //////////////////////////////////////////////////////////////////////////////// | 917 //////////////////////////////////////////////////////////////////////////////// |
| 914 // internal::NativeWidgetPrivate, public: | 918 // internal::NativeWidgetPrivate, public: |
| 915 | 919 |
| 916 // static | 920 // static |
| 917 NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget( | 921 NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget( |
| 918 internal::NativeWidgetDelegate* delegate) { | 922 internal::NativeWidgetDelegate* delegate, |
| 919 return new NativeWidgetAura(delegate); | 923 gfx::NativeView parent) { |
| 924 return new NativeWidgetAura(delegate, parent); |
| 920 } | 925 } |
| 921 | 926 |
| 922 // static | 927 // static |
| 923 NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeView( | 928 NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeView( |
| 924 gfx::NativeView native_view) { | 929 gfx::NativeView native_view) { |
| 925 return reinterpret_cast<NativeWidgetPrivate*>(native_view->user_data()); | 930 return reinterpret_cast<NativeWidgetPrivate*>(native_view->user_data()); |
| 926 } | 931 } |
| 927 | 932 |
| 928 // static | 933 // static |
| 929 NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeWindow( | 934 NativeWidgetPrivate* NativeWidgetPrivate::GetNativeWidgetForNativeWindow( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1004 return aura::Env::GetInstance()->is_mouse_button_down(); | 1009 return aura::Env::GetInstance()->is_mouse_button_down(); |
| 1005 } | 1010 } |
| 1006 | 1011 |
| 1007 // static | 1012 // static |
| 1008 bool NativeWidgetPrivate::IsTouchDown() { | 1013 bool NativeWidgetPrivate::IsTouchDown() { |
| 1009 return aura::Env::GetInstance()->is_touch_down(); | 1014 return aura::Env::GetInstance()->is_touch_down(); |
| 1010 } | 1015 } |
| 1011 | 1016 |
| 1012 } // namespace internal | 1017 } // namespace internal |
| 1013 } // namespace views | 1018 } // namespace views |
| OLD | NEW |