display.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
186797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Copyright (c) 2012 The Chromium Authors. All rights reserved. 286797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Use of this source code is governed by a BSD-style license that can be 386797937017f52bff088d02edf64fb931177a7eaJun Nakajima// found in the LICENSE file. 486797937017f52bff088d02edf64fb931177a7eaJun Nakajima 586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#ifndef UI_GFX_DISPLAY_H_ 686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define UI_GFX_DISPLAY_H_ 786797937017f52bff088d02edf64fb931177a7eaJun Nakajima 886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include "base/basictypes.h" 986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include "base/compiler_specific.h" 1086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include "ui/gfx/gfx_export.h" 1186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#include "ui/gfx/rect.h" 1286797937017f52bff088d02edf64fb931177a7eaJun Nakajima 1386797937017f52bff088d02edf64fb931177a7eaJun Nakajimanamespace gfx { 1486797937017f52bff088d02edf64fb931177a7eaJun Nakajima 1586797937017f52bff088d02edf64fb931177a7eaJun Nakajima// This class typically, but does not always, correspond to a physical display 1686797937017f52bff088d02edf64fb931177a7eaJun Nakajima// connected to the system. A fake Display may exist on a headless system, or a 1786797937017f52bff088d02edf64fb931177a7eaJun Nakajima// Display may correspond to a remote, virtual display. 1886797937017f52bff088d02edf64fb931177a7eaJun Nakajima// 1936597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turner// Note: The screen and display currently uses pixel coordinate 2036597756e589622ee6c6628efb47c1b130d5ee85David 'Digit' Turner// system. For platforms that support DIP (density independent pixel), 2186797937017f52bff088d02edf64fb931177a7eaJun Nakajima// |bounds()| and |work_area| will return values in DIP coordinate 2286797937017f52bff088d02edf64fb931177a7eaJun Nakajima// system, not in backing pixels. 2386797937017f52bff088d02edf64fb931177a7eaJun Nakajimaclass UI_EXPORT Display { 2434c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner public: 2534c48ff1e3ad5cd2084ca40188754d45f423750bDavid 'Digit' Turner // Screen Rotation in clock-wise degrees. 2686797937017f52bff088d02edf64fb931177a7eaJun Nakajima enum Rotation { 27852088c7e08182c2de563872d558309815cbfa0dDavid 'Digit' Turner ROTATE_0 = 0, 2886797937017f52bff088d02edf64fb931177a7eaJun Nakajima ROTATE_90, 29bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajima ROTATE_180, 30bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajima ROTATE_270, 31bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajima }; 32bb0140b925cb2adce03ebc0885067ea3bfd19a20Jun Nakajima 3386797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Creates a display with kInvalidDisplayID as default. 3486797937017f52bff088d02edf64fb931177a7eaJun Nakajima Display(); 3586797937017f52bff088d02edf64fb931177a7eaJun Nakajima explicit Display(int64 id); 3686797937017f52bff088d02edf64fb931177a7eaJun Nakajima Display(int64 id, const Rect& bounds); 3786797937017f52bff088d02edf64fb931177a7eaJun Nakajima ~Display(); 3886797937017f52bff088d02edf64fb931177a7eaJun Nakajima 3986797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Returns the forced device scale factor, which is given by 4086797937017f52bff088d02edf64fb931177a7eaJun Nakajima // "--force-device-scale-factor". 4186797937017f52bff088d02edf64fb931177a7eaJun Nakajima static float GetForcedDeviceScaleFactor(); 4286797937017f52bff088d02edf64fb931177a7eaJun Nakajima 4386797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Indicates if a device scale factor is being explicitly enforced from the 4486797937017f52bff088d02edf64fb931177a7eaJun Nakajima // command line via "--force-device-scale-factor". 4586797937017f52bff088d02edf64fb931177a7eaJun Nakajima static bool HasForceDeviceScaleFactor(); 4686797937017f52bff088d02edf64fb931177a7eaJun Nakajima 4786797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Sets/Gets unique identifier associated with the display. 4886797937017f52bff088d02edf64fb931177a7eaJun Nakajima // -1 means invalid display and it doesn't not exit. 4986797937017f52bff088d02edf64fb931177a7eaJun Nakajima int64 id() const { return id_; } 5086797937017f52bff088d02edf64fb931177a7eaJun Nakajima void set_id(int64 id) { id_ = id; } 51aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turner 5286797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Gets/Sets the display's bounds in gfx::Screen's coordinates. 5386797937017f52bff088d02edf64fb931177a7eaJun Nakajima const Rect& bounds() const { return bounds_; } 5486797937017f52bff088d02edf64fb931177a7eaJun Nakajima void set_bounds(const Rect& bounds) { bounds_ = bounds; } 5586797937017f52bff088d02edf64fb931177a7eaJun Nakajima 5686797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Gets/Sets the display's work area in gfx::Screen's coordinates. 5786797937017f52bff088d02edf64fb931177a7eaJun Nakajima const Rect& work_area() const { return work_area_; } 5886797937017f52bff088d02edf64fb931177a7eaJun Nakajima void set_work_area(const Rect& work_area) { work_area_ = work_area; } 59aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turner 6086797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Output device's pixel scale factor. This specifies how much the 6186797937017f52bff088d02edf64fb931177a7eaJun Nakajima // UI should be scaled when the actual output has more pixels than 6286797937017f52bff088d02edf64fb931177a7eaJun Nakajima // standard displays (which is around 100~120dpi.) The potential return 6386797937017f52bff088d02edf64fb931177a7eaJun Nakajima // values depend on each platforms. 6486797937017f52bff088d02edf64fb931177a7eaJun Nakajima float device_scale_factor() const { return device_scale_factor_; } 6586797937017f52bff088d02edf64fb931177a7eaJun Nakajima void set_device_scale_factor(float scale) { device_scale_factor_ = scale; } 6686797937017f52bff088d02edf64fb931177a7eaJun Nakajima 6786797937017f52bff088d02edf64fb931177a7eaJun Nakajima Rotation rotation() const { return rotation_; } 6886797937017f52bff088d02edf64fb931177a7eaJun Nakajima void set_rotation(Rotation rotation) { rotation_ = rotation; } 6986797937017f52bff088d02edf64fb931177a7eaJun Nakajima 70e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner // Utility functions that just return the size of display and 7186797937017f52bff088d02edf64fb931177a7eaJun Nakajima // work area. 7286797937017f52bff088d02edf64fb931177a7eaJun Nakajima const Size& size() const { return bounds_.size(); } 7386797937017f52bff088d02edf64fb931177a7eaJun Nakajima const Size& work_area_size() const { return work_area_.size(); } 7486797937017f52bff088d02edf64fb931177a7eaJun Nakajima 7586797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Returns the work area insets. 7686797937017f52bff088d02edf64fb931177a7eaJun Nakajima Insets GetWorkAreaInsets() const; 776657678c3d86395084f6a699e73614195f06c445David 'Digit' Turner 7886797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Sets the device scale factor and display bounds in pixel. This 7986797937017f52bff088d02edf64fb931177a7eaJun Nakajima // updates the work are using the same insets between old bounds and 8086797937017f52bff088d02edf64fb931177a7eaJun Nakajima // work area. 8186797937017f52bff088d02edf64fb931177a7eaJun Nakajima void SetScaleAndBounds(float device_scale_factor, 826657678c3d86395084f6a699e73614195f06c445David 'Digit' Turner const gfx::Rect& bounds_in_pixel); 8386797937017f52bff088d02edf64fb931177a7eaJun Nakajima 8486797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Sets the display's size. This updates the work area using the same insets 8586797937017f52bff088d02edf64fb931177a7eaJun Nakajima // between old bounds and work area. 8686797937017f52bff088d02edf64fb931177a7eaJun Nakajima void SetSize(const gfx::Size& size_in_pixel); 8786797937017f52bff088d02edf64fb931177a7eaJun Nakajima 8886797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Computes and updates the display's work are using 8986797937017f52bff088d02edf64fb931177a7eaJun Nakajima // |work_area_insets| and the bounds. 9086797937017f52bff088d02edf64fb931177a7eaJun Nakajima void UpdateWorkAreaFromInsets(const gfx::Insets& work_area_insets); 9186797937017f52bff088d02edf64fb931177a7eaJun Nakajima 9286797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Returns the display's size in pixel coordinates. 9386797937017f52bff088d02edf64fb931177a7eaJun Nakajima gfx::Size GetSizeInPixel() const; 9486797937017f52bff088d02edf64fb931177a7eaJun Nakajima 9586797937017f52bff088d02edf64fb931177a7eaJun Nakajima // Returns a string representation of the display; 9686797937017f52bff088d02edf64fb931177a7eaJun Nakajima std::string ToString() const; 9786797937017f52bff088d02edf64fb931177a7eaJun Nakajima 9886797937017f52bff088d02edf64fb931177a7eaJun Nakajima // True if the display contains valid display id. 9986797937017f52bff088d02edf64fb931177a7eaJun Nakajima bool is_valid() const { return id_ != kInvalidDisplayID; } 10086797937017f52bff088d02edf64fb931177a7eaJun Nakajima 10186797937017f52bff088d02edf64fb931177a7eaJun Nakajima // True if the display corresponds to internal panel. 10286797937017f52bff088d02edf64fb931177a7eaJun Nakajima bool IsInternal() const; 10386797937017f52bff088d02edf64fb931177a7eaJun Nakajima 104e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner // Gets/Sets an id of display corresponding to internal panel. 10586797937017f52bff088d02edf64fb931177a7eaJun Nakajima static int64 InternalDisplayId(); 10686797937017f52bff088d02edf64fb931177a7eaJun Nakajima static void SetInternalDisplayId(int64 internal_display_id); 10786797937017f52bff088d02edf64fb931177a7eaJun Nakajima 10886797937017f52bff088d02edf64fb931177a7eaJun Nakajima static const int64 kInvalidDisplayID; 10986797937017f52bff088d02edf64fb931177a7eaJun Nakajima 11086797937017f52bff088d02edf64fb931177a7eaJun Nakajima private: 11186797937017f52bff088d02edf64fb931177a7eaJun Nakajima int64 id_; 112aa8236dc1b1ea300ab18716db5b8fab42aca3ca7David 'Digit' Turner Rect bounds_; 11386797937017f52bff088d02edf64fb931177a7eaJun Nakajima Rect work_area_; 11486797937017f52bff088d02edf64fb931177a7eaJun Nakajima float device_scale_factor_; 11586797937017f52bff088d02edf64fb931177a7eaJun Nakajima Rotation rotation_; 11686797937017f52bff088d02edf64fb931177a7eaJun Nakajima}; 11786797937017f52bff088d02edf64fb931177a7eaJun Nakajima 11886797937017f52bff088d02edf64fb931177a7eaJun Nakajima} // namespace gfx 119e36a683b547e540c68bf9c5578e05b29c8676f47David 'Digit' Turner 12086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#endif // UI_GFX_DISPLAY_H_ 12186797937017f52bff088d02edf64fb931177a7eaJun Nakajima