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 3 // found in the LICENSE file. 4 5 #include "ui/gfx/screen.h" 6 7 #include "base/logging.h" 8 #include "ui/gfx/android/device_display_info.h" 9 #include "ui/gfx/display.h" 10 #include "ui/gfx/size_conversions.h" 11 12 namespace gfx { 13 14 class ScreenAndroid : public Screen { 15 public: 16 ScreenAndroid() {} 17 18 virtual bool IsDIPEnabled() OVERRIDE { return true; } 19 20 virtual gfx::Point GetCursorScreenPoint() OVERRIDE { return gfx::Point(); } 21 22 virtual gfx::NativeWindow GetWindowUnderCursor() OVERRIDE { 23 NOTIMPLEMENTED(); 24 return NULL; 25 } 26 27 virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) 28 OVERRIDE { 29 NOTIMPLEMENTED(); 30 return NULL; 31 } 32 33 virtual gfx::Display GetPrimaryDisplay() const OVERRIDE { 34 gfx::DeviceDisplayInfo device_info; 35 const float device_scale_factor = device_info.GetDIPScale(); 36 // Note: GetPhysicalDisplayWidth/Height() does not subtract window 37 // decorations etc. Use it instead of GetDisplayWidth/Height() when 38 // available. 39 const gfx::Rect bounds_in_pixels = 40 gfx::Rect(device_info.GetPhysicalDisplayWidth() 41 ? device_info.GetPhysicalDisplayWidth() 42 : device_info.GetDisplayWidth(), 43 device_info.GetPhysicalDisplayHeight() 44 ? device_info.GetPhysicalDisplayHeight() 45 : device_info.GetDisplayHeight()); 46 const gfx::Rect bounds_in_dip = 47 gfx::Rect(gfx::ToCeiledSize(gfx::ScaleSize( 48 bounds_in_pixels.size(), 1.0f / device_scale_factor))); 49 gfx::Display display(0, bounds_in_dip); 50 if (!gfx::Display::HasForceDeviceScaleFactor()) 51 display.set_device_scale_factor(device_scale_factor); 52 display.SetRotationAsDegree(device_info.GetRotationDegrees()); 53 return display; 54 } 55 56 virtual gfx::Display GetDisplayNearestWindow( 57 gfx::NativeView view) const OVERRIDE { 58 return GetPrimaryDisplay(); 59 } 60 61 virtual gfx::Display GetDisplayNearestPoint( 62 const gfx::Point& point) const OVERRIDE { 63 return GetPrimaryDisplay(); 64 } 65 66 virtual int GetNumDisplays() const OVERRIDE { return 1; } 67 68 virtual std::vector<gfx::Display> GetAllDisplays() const OVERRIDE { 69 return std::vector<gfx::Display>(1, GetPrimaryDisplay()); 70 } 71 72 virtual gfx::Display GetDisplayMatching( 73 const gfx::Rect& match_rect) const OVERRIDE { 74 return GetPrimaryDisplay(); 75 } 76 77 virtual void AddObserver(DisplayObserver* observer) OVERRIDE { 78 // no display change on Android. 79 } 80 81 virtual void RemoveObserver(DisplayObserver* observer) OVERRIDE { 82 // no display change on Android. 83 } 84 85 private: 86 DISALLOW_COPY_AND_ASSIGN(ScreenAndroid); 87 }; 88 89 Screen* CreateNativeScreen() { 90 return new ScreenAndroid; 91 } 92 93 } // namespace gfx 94