Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: ui/gfx/screen_win.h

Issue 1426933002: Refactor Windows DPI Point, Rect, and Size for Multiple Monitor DPI Awareness (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/gfx/screen_win.h
diff --git a/ui/gfx/screen_win.h b/ui/gfx/screen_win.h
index 9ece286e919750ac1e1ec8bf167d4548aeec364f..17b37f54a668043f2600285ccb72e88b8570a863 100644
--- a/ui/gfx/screen_win.h
+++ b/ui/gfx/screen_win.h
@@ -8,6 +8,9 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "ui/gfx/display_change_notifier.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/size.h"
#include "ui/gfx/gfx_export.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/win/singleton_hwnd_observer.h"
@@ -19,6 +22,61 @@ class GFX_EXPORT ScreenWin : public Screen {
ScreenWin();
~ScreenWin() override;
+ // Converts a screen pixel point to a DIP point.
+ // The DPI scale is performed relative to the display containing the screen
+ // pixel point maintaining a constant origin on both Screen and DIP (same as
+ // Windows).
+ static Point ScreenToDIPPoint(const Point& pixel_point);
+
+ // Converts a DIP point to a screen pixel point.
+ // The DPI scale is performed relative to the display containing the DIP point
+ // maintaining a constant origin on both Screen and DIP (same as Windows).
+ static Point DIPToScreenPoint(const Point& dip_point);
+
+ // Converts a client pixel relative to |hwnd| to a DIP point.
+ // The DPI scale is performed relative to |hwnd| using an origin of (0, 0).
+ static Point ClientToDIPPoint(HWND hwnd, const Point& client_point);
+
+ // Converts a client DIP point relative to |hwnd| to a client point.
scottmg 2015/10/28 18:48:21 Is this point or pixel?
robliao 2015/10/29 00:30:24 pixel point for consistency with the above. As par
+ // The DPI scale is performed relative to |hwnd| using an origin of (0, 0).
+ static Point DIPToClientPoint(HWND hwnd, const Point& dip_pount);
scottmg 2015/10/28 18:48:21 "pount"
robliao 2015/10/29 00:30:24 Done.
+
+ // WARNING: there is no right way to scale sizes and rects. The implementation
+ // of these strives to maintain a constant size by scaling the size
+ // independent of the origin. An alternative is to get the enclosing rect,
+ // which is the right way for some situations. Understand which you need
+ // before blindly assuming this is the right way.
+
+ // Converts a screen rect to a DIP rect.
+ // The DPI scale is performed relative to the display nearest to |hwnd|
+ // maintaining a constant origin on both Screen and DIP (same as Windows).
+ // If |hwnd| is null, scaling will be performed to the display nearest to
+ // |pixel_bounds|.
+ static Rect ScreenToDIPRect(HWND hwnd, const Rect& pixel_bounds);
+
+ // Converts a DIP rect to a screen rect.
+ // The DPI scale is performed relative to the display nearest to |hwnd|
+ // maintaining a constant origin on both Screen and DIP (same as Windows).
+ // If |hwnd| is null, scaling will be performed to the display nearest to
+ // |dip_bounds|.
+ static Rect DIPToScreenRect(HWND hwnd, const Rect& dip_bounds);
+
+ // Converts a client rect to a DIP rect.
+ // The DPI scale is performed relative to |hwnd| using an origin of (0, 0).
+ static Rect ClientToDIPRect(HWND hwnd, const Rect& pixel_bounds);
+
+ // Converts a DIP rect to a client rect.
+ // The DPI scale is performed relative to |hwnd| using an origin of (0, 0).
+ static Rect DIPToClientRect(HWND hwnd, const Rect& dip_bounds);
+
+ // Converts a screen size to a DIP size.
+ // The DPI scale is performed relative to the display nearest to |hwnd|.
+ static Size ScreenToDIPSize(HWND hwnd, const Size& size_in_pixels);
+
+ // Converts a DIP size to a screen size.
+ // The DPI scale is performed relative to the display nearest to |hwnd|.
+ static Size DIPToScreenSize(HWND hwnd, const Size& dip_size);
+
protected:
// Overridden from gfx::Screen:
gfx::Point GetCursorScreenPoint() override;
@@ -40,6 +98,12 @@ class GFX_EXPORT ScreenWin : public Screen {
virtual NativeWindow GetNativeWindowFromHWND(HWND hwnd) const;
private:
+ static gfx::Display GetDisplayNearestHWND(HWND hwnd);
+ static gfx::Display GetDisplayNearestRect(const Rect& rect);
+ static gfx::Display GetDisplayNearestScreenPoint(const Point& screen_point);
+ static float GetScaleFactorForHWND(HWND hwnd);
+ static float GetScaleFactorForScreenPoint(const Point& screen_point);
+
void OnWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
// Helper implementing the DisplayObserver handling.

Powered by Google App Engine
This is Rietveld 408576698