15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_DISPLAY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_DISPLAY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This class typically, but does not always, correspond to a physical display 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// connected to the system. A fake Display may exist on a headless system, or a 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Display may correspond to a remote, virtual display. 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: The screen and display currently uses pixel coordinate 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// system. For platforms that support DIP (density independent pixel), 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |bounds()| and |work_area| will return values in DIP coordinate 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// system, not in backing pixels. 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GFX_EXPORT Display { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Screen Rotation in clock-wise degrees. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum Rotation { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ROTATE_0 = 0, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ROTATE_90, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ROTATE_180, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ROTATE_270, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Touch support for the display. 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) enum TouchSupport { 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TOUCH_SUPPORT_UNKNOWN, 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TOUCH_SUPPORT_AVAILABLE, 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TOUCH_SUPPORT_UNAVAILABLE, 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a display with kInvalidDisplayID as default. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Display(int64 id); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display(int64 id, const Rect& bounds); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Display(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the forced device scale factor, which is given by 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "--force-device-scale-factor". 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static float GetForcedDeviceScaleFactor(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates if a device scale factor is being explicitly enforced from the 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // command line via "--force-device-scale-factor". 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool HasForceDeviceScaleFactor(); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets/Gets unique identifier associated with the display. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // -1 means invalid display and it doesn't not exit. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 id() const { return id_; } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_id(int64 id) { id_ = id; } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the display's bounds in gfx::Screen's coordinates. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Rect& bounds() const { return bounds_; } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_bounds(const Rect& bounds) { bounds_ = bounds; } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the display's work area in gfx::Screen's coordinates. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Rect& work_area() const { return work_area_; } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_work_area(const Rect& work_area) { work_area_ = work_area; } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Output device's pixel scale factor. This specifies how much the 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UI should be scaled when the actual output has more pixels than 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // standard displays (which is around 100~120dpi.) The potential return 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // values depend on each platforms. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float device_scale_factor() const { return device_scale_factor_; } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_device_scale_factor(float scale) { device_scale_factor_ = scale; } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Rotation rotation() const { return rotation_; } 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_rotation(Rotation rotation) { rotation_ = rotation; } 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int RotationAsDegree() const; 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetRotationAsDegree(int rotation); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchSupport touch_support() const { return touch_support_; } 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void set_touch_support(TouchSupport support) { touch_support_ = support; } 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility functions that just return the size of display and 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // work area. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Size& size() const { return bounds_.size(); } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Size& work_area_size() const { return work_area_.size(); } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the work area insets. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Insets GetWorkAreaInsets() const; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the device scale factor and display bounds in pixel. This 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // updates the work are using the same insets between old bounds and 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // work area. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetScaleAndBounds(float device_scale_factor, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& bounds_in_pixel); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the display's size. This updates the work area using the same insets 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // between old bounds and work area. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSize(const gfx::Size& size_in_pixel); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computes and updates the display's work are using 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |work_area_insets| and the bounds. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateWorkAreaFromInsets(const gfx::Insets& work_area_insets); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the display's size in pixel coordinates. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size GetSizeInPixel() const; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a string representation of the display; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ToString() const; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the display contains valid display id. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_valid() const { return id_ != kInvalidDisplayID; } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if the display corresponds to internal panel. 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsInternal() const; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets/Sets an id of display corresponding to internal panel. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int64 InternalDisplayId(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void SetInternalDisplayId(int64 internal_display_id); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int64 kInvalidDisplayID; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 id_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Rect bounds_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Rect work_area_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float device_scale_factor_; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Rotation rotation_; 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchSupport touch_support_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_GFX_DISPLAY_H_ 134