1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// Copyright 2016 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_WIN_SCREEN_WIN_DISPLAY_H_
#define UI_DISPLAY_WIN_SCREEN_WIN_DISPLAY_H_
#include <windows.h>
#include <optional>
#include "ui/display/display.h"
#include "ui/gfx/geometry/rect.h"
namespace display {
namespace win {
namespace internal {
class DisplayInfo;
} // namespace internal
// A display used by ScreenWin.
// It holds a display and additional parameters used for DPI calculations.
class ScreenWinDisplay final {
public:
ScreenWinDisplay();
explicit ScreenWinDisplay(const internal::DisplayInfo& display_info);
ScreenWinDisplay(const Display& display,
const internal::DisplayInfo& display_info);
const Display& display() const { return display_; }
const gfx::Rect& pixel_bounds() const { return pixel_bounds_; }
const gfx::Vector2dF& pixels_per_inch() const { return pixels_per_inch_; }
const gfx::Rect& screen_rect() const { return screen_rect_; }
const gfx::Rect& screen_work_rect() const { return screen_work_rect_; }
// Returns a cached HMONITOR for the display, if any. Fake and headless
// displays won't have an HMONITOR.
const std::optional<HMONITOR>& hmonitor() const { return hmonitor_; }
Display& modifiable_display() { return display_; }
// Clear the cached HMONITOR. This should be called whenever WM_DISPLAYCHANGE
// is received since the handle may no longer be valid.
void InvalidateHMONITOR();
private:
Display display_;
gfx::Rect pixel_bounds_;
gfx::Vector2dF pixels_per_inch_;
// The MONITORINFO::rcMonitor display rectangle in virtual-screen coordinates.
// Used to derive display::Display bounds, and for window placement logic.
gfx::Rect screen_rect_;
// The MONITORINFO::rcWork work area rectangle in virtual-screen coordinates.
// These are display bounds that exclude system UI, like the Windows taskbar.
// Used to derive display::Display work areas, and for window placement logic.
gfx::Rect screen_work_rect_;
// A cached HMONITOR. This may become invalid on WM_DISPLAYCHANGE.
std::optional<HMONITOR> hmonitor_;
};
} // namespace win
} // namespace display
#endif // UI_DISPLAY_WIN_SCREEN_WIN_DISPLAY_H_
|