display.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_export.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: The screen and display currently uses pixel coordinate
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// system. For platforms that support DIP (density independent pixel),
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |bounds()| and |work_area| will return values in DIP coordinate
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// system, not in backing pixels.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UI_EXPORT Display {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a display with kInvalidDisplayID as default.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Display();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Display(int64 id);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Display(int64 id, const Rect& bounds);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~Display();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the forced device scale factor, which is given by
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "--force-device-scale-factor".
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static float GetForcedDeviceScaleFactor();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns 64-bit persistent ID for the specified manufacturer's ID and
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // serial#.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int64 GetID(uint16 manufacturer_id, uint32 serial_number);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets/Gets unique identifier associated with the display.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // -1 means invalid display and it doesn't not exit.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 id() const { return id_; }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_id(int64 id) { id_ = id; }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets/Sets the display's bounds in gfx::Screen's coordinates.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Rect& bounds() const { return bounds_; }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_bounds(const Rect& bounds) { bounds_ = bounds; }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets/Sets the display's work area in gfx::Screen's coordinates.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Rect& work_area() const { return work_area_; }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_work_area(const Rect& work_area) { work_area_ = work_area; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Output device's pixel scale factor. This specifies how much the
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // UI should be scaled when the actual output has more pixels than
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // standard displays (which is around 100~120dpi.) The potential return
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // values depend on each platforms.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float device_scale_factor() const { return device_scale_factor_; }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_device_scale_factor(float scale) { device_scale_factor_ = scale; }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Utility functions that just return the size of display and
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // work area.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Size& size() const { return bounds_.size(); }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Size& work_area_size() const { return work_area_.size(); }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the work area insets.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Insets GetWorkAreaInsets() const;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the device scale factor and display bounds in pixel. This
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // updates the work are using the same insets between old bounds and
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // work area.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetScaleAndBounds(float device_scale_factor,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const gfx::Rect& bounds_in_pixel);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the display's size. This updates the work area using the same insets
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between old bounds and work area.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetSize(const gfx::Size& size_in_pixel);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Computes and updates the display's work are using
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |work_area_insets| and the bounds.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateWorkAreaFromInsets(const gfx::Insets& work_area_insets);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the display's size in pixel coordinates.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Size GetSizeInPixel() const;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(oshima|skuhne): Eliminate the use of bounds_in_pixel in events_x.cc
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and remove bounds_in_pixel from gfx::Display.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the display's bounds in pixel coordinates.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Rect& bounds_in_pixel() const { return bounds_in_pixel_; }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a string representation of the display;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ToString() const;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the display contains valid display id.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_valid() const { return id_ != kInvalidDisplayID; }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int64 kInvalidDisplayID;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 id_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rect bounds_;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rect work_area_;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Rect bounds_in_pixel_;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float device_scale_factor_;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_DISPLAY_H_
108