| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/logging.h" |
| #include "ui/gfx/screen.h" |
| #include "ui/gfx/screen_type_delegate.h" |
| |
| namespace gfx { |
| |
| namespace { |
| |
| Screen* g_screen_[SCREEN_TYPE_LAST + 1]; |
| ScreenTypeDelegate* g_screen_type_delegate_ = NULL; |
| |
| } // namespace |
| |
| Screen::Screen() { |
| } |
| |
| Screen::~Screen() { |
| } |
| |
| // static |
| Screen* Screen::GetScreenFor(NativeView view) { |
| ScreenType type = SCREEN_TYPE_NATIVE; |
| if (g_screen_type_delegate_) |
| type = g_screen_type_delegate_->GetScreenTypeForNativeView(view); |
| if (type == SCREEN_TYPE_NATIVE) |
| return GetNativeScreen(); |
| DCHECK(g_screen_[type]); |
| return g_screen_[type]; |
| } |
| |
| // static |
| void Screen::SetScreenInstance(ScreenType type, Screen* instance) { |
| DCHECK_LE(type, SCREEN_TYPE_LAST); |
| g_screen_[type] = instance; |
| } |
| |
| // static |
| Screen* Screen::GetScreenByType(ScreenType type) { |
| return g_screen_[type]; |
| } |
| |
| // static |
| void Screen::SetScreenTypeDelegate(ScreenTypeDelegate* delegate) { |
| g_screen_type_delegate_ = delegate; |
| } |
| |
| // static |
| Screen* Screen::GetNativeScreen() { |
| if (!g_screen_[SCREEN_TYPE_NATIVE]) |
| g_screen_[SCREEN_TYPE_NATIVE] = CreateNativeScreen(); |
| return g_screen_[SCREEN_TYPE_NATIVE]; |
| } |
| |
| } // namespace gfx |