blob: 082e53c81779e50afe2dd78d8d6d8c1247676cc7 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_DISPLAY_SCREEN_INFO_H_
#define UI_DISPLAY_SCREEN_INFO_H_
#include <string>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/display/display_export.h"
#include "ui/display/mojom/screen_orientation.mojom-shared.h"
#include "ui/display/types/display_constants.h"
#include "ui/gfx/display_color_spaces.h"
#include "ui/gfx/geometry/rect.h"
namespace display {
// This structure roughly parallels display::Display. It may be desirable to
// deprecate derived counterparts of ui/display types; see crbug.com/1208469.
struct DISPLAY_EXPORT ScreenInfo {
// Device scale factor. Specifies the ratio between physical and logical
// pixels.
float device_scale_factor = 1.f;
// The color spaces used by output display for various content types.
gfx::DisplayColorSpaces display_color_spaces;
// The screen depth in bits per pixel.
int depth = 0;
// The bits per colour component. This assumes that the colours are balanced
// equally.
int depth_per_component = 0;
// This can be true for black and white printers
bool is_monochrome = false;
// The display frequency in Hz of the monitor. Set to 0 if it fails in the
// monitor frequency query.
float display_frequency = 0;
// This is set from the rcMonitor member of MONITORINFOEX, to whit:
// "A RECT structure that specifies the display monitor rectangle,
// expressed in virtual-screen coordinates. Note that if the monitor
// is not the primary display monitor, some of the rectangle's
// coordinates may be negative values."
gfx::Rect rect;
// This is set from the rcWork member of MONITORINFOEX, to whit:
// "A RECT structure that specifies the work area rectangle of the
// display monitor that can be used by applications, expressed in
// virtual-screen coordinates. Windows uses this rectangle to
// maximize an application on the monitor. The rest of the area in
// rcMonitor contains system windows such as the task bar and side
// bars. Note that if the monitor is not the primary display monitor,
// some of the rectangle's coordinates may be negative values".
gfx::Rect available_rect;
// This is the orientation 'type' or 'name', as in landscape-primary or
// portrait-secondary for examples.
// See ui/display/mojom/screen_orientation.mojom for the full list.
mojom::ScreenOrientation orientation_type =
mojom::ScreenOrientation::kUndefined;
// This is the orientation angle of the displayed content in degrees.
// It is the opposite of the physical rotation.
// TODO(crbug.com/840189): we should use an enum rather than a number here.
uint16_t orientation_angle = 0;
// Whether this Screen is part of a multi-screen extended visual workspace.
bool is_extended = false;
// Whether this screen is designated as the 'primary' screen by the OS
// (otherwise it is a 'secondary' screen).
bool is_primary = false;
// Whether this screen is an 'internal' panel built into the device, like a
// laptop display (otherwise it is 'external', like a wired monitor).
bool is_internal = false;
// A user-friendly label for the screen, determined by the platform.
std::string label;
// Not web-exposed; the display::Display::id(), for internal tracking only.
int64_t display_id = kDefaultDisplayId;
// Expose this constant to Blink.
static constexpr int64_t kInvalidDisplayId = display::kInvalidDisplayId;
ScreenInfo();
ScreenInfo(const ScreenInfo& other);
~ScreenInfo();
ScreenInfo& operator=(const ScreenInfo& other);
bool operator==(const ScreenInfo& other) const;
bool operator!=(const ScreenInfo& other) const;
// Returns a string representation of the screen.
std::string ToString() const;
};
} // namespace display
#endif // UI_DISPLAY_SCREEN_INFO_H_