|  | // Copyright (c) 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 "ui/gfx/screen.h" | 
|  |  | 
|  | #import <UIKit/UIKit.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "ui/gfx/display.h" | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | class ScreenIos : public gfx::Screen { | 
|  | virtual bool IsDIPEnabled() override { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | virtual gfx::Point GetCursorScreenPoint() override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::Point(0, 0); | 
|  | } | 
|  |  | 
|  | virtual gfx::NativeWindow GetWindowUnderCursor() override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::NativeWindow(); | 
|  | } | 
|  |  | 
|  | virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) | 
|  | override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::NativeWindow(); | 
|  | } | 
|  |  | 
|  | virtual int GetNumDisplays() const override { | 
|  | #if TARGET_IPHONE_SIMULATOR | 
|  | // UIScreen does not reliably return correct results on the simulator. | 
|  | return 1; | 
|  | #else | 
|  | return [[UIScreen screens] count]; | 
|  | #endif | 
|  | } | 
|  |  | 
|  | virtual std::vector<gfx::Display> GetAllDisplays() const override { | 
|  | NOTIMPLEMENTED(); | 
|  | return std::vector<gfx::Display>(1, GetPrimaryDisplay()); | 
|  | } | 
|  |  | 
|  | // Returns the display nearest the specified window. | 
|  | virtual gfx::Display GetDisplayNearestWindow( | 
|  | gfx::NativeView view) const override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::Display(); | 
|  | } | 
|  |  | 
|  | // Returns the the display nearest the specified point. | 
|  | virtual gfx::Display GetDisplayNearestPoint( | 
|  | const gfx::Point& point) const override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::Display(); | 
|  | } | 
|  |  | 
|  | // Returns the display that most closely intersects the provided bounds. | 
|  | virtual gfx::Display GetDisplayMatching( | 
|  | const gfx::Rect& match_rect) const override { | 
|  | NOTIMPLEMENTED(); | 
|  | return gfx::Display(); | 
|  | } | 
|  |  | 
|  | // Returns the primary display. | 
|  | virtual gfx::Display GetPrimaryDisplay() const override { | 
|  | UIScreen* mainScreen = [UIScreen mainScreen]; | 
|  | CHECK(mainScreen); | 
|  | gfx::Display display(0, gfx::Rect(mainScreen.bounds)); | 
|  | display.set_device_scale_factor([mainScreen scale]); | 
|  | return display; | 
|  | } | 
|  |  | 
|  | virtual void AddObserver(gfx::DisplayObserver* observer) override { | 
|  | // no display change on iOS. | 
|  | } | 
|  |  | 
|  | virtual void RemoveObserver(gfx::DisplayObserver* observer) override { | 
|  | // no display change on iOS. | 
|  | } | 
|  | }; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | namespace gfx { | 
|  |  | 
|  | Screen* CreateNativeScreen() { | 
|  | return new ScreenIos; | 
|  | } | 
|  |  | 
|  | }  // namespace gfx |