| Index: ui/gfx/screen_aura.cc
|
| diff --git a/ui/gfx/screen_aura.cc b/ui/gfx/screen_aura.cc
|
| index befdeafa7d001f393ec4ad7c911c3c8542217f7c..22bedaa5397f6f9d00689521f864b769ab6ce64b 100644
|
| --- a/ui/gfx/screen_aura.cc
|
| +++ b/ui/gfx/screen_aura.cc
|
| @@ -8,59 +8,96 @@
|
| #include "ui/gfx/display.h"
|
| #include "ui/gfx/native_widget_types.h"
|
| #include "ui/gfx/screen_impl.h"
|
| +#include "ui/gfx/screen_type_delegate.h"
|
|
|
| namespace gfx {
|
|
|
| +#if defined(USE_AURA)
|
| +
|
| // gfx can't depend upon aura, otherwise we have circular dependencies. So,
|
| // gfx::Screen is pluggable and Desktop plugs in the real implementation.
|
| -namespace {
|
| -ScreenImpl* g_instance_ = NULL;
|
| +ScreenImpl* g_instance_[SCREEN_TYPE_COUNT];
|
| +ScreenTypeDelegate* g_type_delegate_;
|
| +ScreenType g_screen_type_force_ = SCREEN_TYPE_COUNT;
|
| +
|
| +// TODO(scottmg): This needs to be always given a context object, rather than
|
| +// using global state. It is currently passed BadTwoWorldsContext() == NULL
|
| +// in many places. http://crbug.com/133312
|
| +ScreenImpl* GetImplForContext(NativeView context) {
|
| + if (!g_type_delegate_)
|
| + return g_instance_[SCREEN_TYPE_NATIVE];
|
| + if (g_screen_type_force_ != SCREEN_TYPE_COUNT)
|
| + return g_instance_[g_screen_type_force_];
|
| + ScreenType type = g_type_delegate_->GetScreenTypeForNativeView(context);
|
| + ScreenImpl* screen_impl = g_instance_[type];
|
| + DCHECK(screen_impl);
|
| + return screen_impl;
|
| +}
|
| +
|
| +// static
|
| +void Screen::ForceScreenTypeOverride(ScreenType type) {
|
| + g_screen_type_force_ = type;
|
| +}
|
| +
|
| +// static
|
| +void Screen::SetInstance(ScreenType type, ScreenImpl* screen) {
|
| + DCHECK(!g_instance_[type]);
|
| + g_instance_[type] = screen;
|
| }
|
|
|
| // static
|
| -void Screen::SetInstance(ScreenImpl* screen) {
|
| - delete g_instance_;
|
| - g_instance_ = screen;
|
| +void Screen::SetScreenTypeDelegate(ScreenTypeDelegate* delegate) {
|
| + DCHECK(!g_type_delegate_);
|
| + g_type_delegate_ = delegate;
|
| }
|
|
|
| +#endif
|
| +
|
| // static
|
| bool Screen::IsDIPEnabled() {
|
| return true;
|
| }
|
|
|
| // static
|
| -Point Screen::GetCursorScreenPoint() {
|
| - return g_instance_->GetCursorScreenPoint();
|
| +Point Screen::GetCursorScreenPoint(NativeView context) {
|
| + return GetImplForContext(context)->GetCursorScreenPoint();
|
| +}
|
| +
|
| +// static
|
| +NativeWindow Screen::GetWindowAtCursorScreenPoint(NativeView context) {
|
| + return GetImplForContext(context)->GetWindowAtCursorScreenPoint();
|
| }
|
|
|
| // static
|
| -NativeWindow Screen::GetWindowAtCursorScreenPoint() {
|
| - return g_instance_->GetWindowAtCursorScreenPoint();
|
| +int Screen::GetNumDisplays(NativeView context) {
|
| + return GetImplForContext(context)->GetNumDisplays();
|
| }
|
|
|
| // static
|
| -int Screen::GetNumDisplays() {
|
| - return g_instance_->GetNumDisplays();
|
| +Display Screen::GetDisplayNearestWindow(NativeView view) {
|
| + return GetImplForContext(view)->GetDisplayNearestWindow(view);
|
| }
|
|
|
| // static
|
| -Display Screen::GetDisplayNearestWindow(NativeView window) {
|
| - return g_instance_->GetDisplayNearestWindow(window);
|
| +Display Screen::GetDisplayNearestPoint(NativeView context, const Point& point) {
|
| + return GetImplForContext(context)->GetDisplayNearestPoint(point);
|
| }
|
|
|
| // static
|
| -Display Screen::GetDisplayNearestPoint(const Point& point) {
|
| - return g_instance_->GetDisplayNearestPoint(point);
|
| +Display Screen::GetDisplayMatching(
|
| + NativeView context, const gfx::Rect& match_rect) {
|
| + return GetImplForContext(context)->GetDisplayMatching(match_rect);
|
| }
|
|
|
| // static
|
| -Display Screen::GetDisplayMatching(const gfx::Rect& match_rect) {
|
| - return g_instance_->GetDisplayMatching(match_rect);
|
| +Display Screen::GetPrimaryDisplay(NativeView context) {
|
| + return GetImplForContext(context)->GetPrimaryDisplay();
|
| }
|
|
|
| // static
|
| -Display Screen::GetPrimaryDisplay() {
|
| - return g_instance_->GetPrimaryDisplay();
|
| +gfx::NativeView Screen::BadTwoWorldsContext() {
|
| + // TODO(scottmg): Any calls to this are a bug. http://crbug.com/133312
|
| + return NULL;
|
| }
|
|
|
| } // namespace gfx
|
|
|