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

Unified Diff: ui/gfx/screen_gtk.cc

Issue 9960042: Refactor screen/monitor so that gfx::Screen returns monitor object. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DeviceScaleFactor Created 8 years, 8 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_gtk.cc
diff --git a/ui/gfx/screen_gtk.cc b/ui/gfx/screen_gtk.cc
index 1607cc8ea8f1ce2db4ff3e18883ccb5b9872ff70..713269cd6155092abcfca92cb886038cb2e8423c 100644
--- a/ui/gfx/screen_gtk.cc
+++ b/ui/gfx/screen_gtk.cc
@@ -8,9 +8,15 @@
#include <gtk/gtk.h>
#include "base/logging.h"
+#include "ui/gfx/monitor.h"
namespace {
+gfx::SimpleMonitor* GetMonitor() {
+ static gfx::SimpleMonitor* monitor = new gfx::SimpleMonitor();
+ return monitor;
+}
+
bool GetScreenWorkArea(gfx::Rect* out_rect) {
gboolean ok;
guchar* raw_data = NULL;
@@ -46,33 +52,17 @@ bool GetScreenWorkArea(gfx::Rect* out_rect) {
return true;
}
-} // namespace
-
-namespace gfx {
-
-// static
-gfx::Point Screen::GetCursorScreenPoint() {
- gint x, y;
- gdk_display_get_pointer(gdk_display_get_default(), NULL, &x, &y, NULL);
- return gfx::Point(x, y);
-}
+gfx::Rect GetPrimaryMonitorBounds() {
+ GdkScreen* screen = gdk_screen_get_default();
+ GdkRectangle rect;
+ gdk_screen_get_monitor_geometry(screen, 0, &rect);
-// static
-gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeView view) {
- // Do not use the _NET_WORKAREA here, this is supposed to be an area on a
- // specific monitor, and _NET_WORKAREA is a hint from the WM that generally
- // spans across all monitors. This would make the work area larger than the
- // monitor.
- // TODO(danakj) This is a work-around as there is no standard way to get this
- // area, but it is a rect that we should be computing. The standard means
- // to compute this rect would be to watch all windows with
- // _NET_WM_STRUT(_PARTIAL) hints, and subtract their space from the physical
- // area of the monitor to construct a work area.
- return GetMonitorAreaNearestWindow(view);
+ DCHECK_EQ(gdk_screen_get_width(screen), rect.width);
+ DCHECK_EQ(gdk_screen_get_height(screen), rect.height);
+ return gfx::Rect(rect);
}
-// static
-gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeView view) {
+gfx::Rect GetMonitorAreaNearestWindow(gfx::NativeView view) {
GdkScreen* screen = gdk_screen_get_default();
gint monitor_num = 0;
if (view) {
@@ -89,43 +79,15 @@ gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeView view) {
return gfx::Rect(bounds);
}
-// static
-gfx::Rect Screen::GetMonitorWorkAreaNearestPoint(const gfx::Point& point) {
- // TODO(jamiewalch): Restrict this to the work area of the monitor.
- return GetMonitorAreaNearestPoint(point);
-}
-
-// static
-gfx::Rect Screen::GetMonitorAreaNearestPoint(const gfx::Point& point) {
- GdkScreen* screen = gdk_screen_get_default();
- gint monitor = gdk_screen_get_monitor_at_point(screen, point.x(), point.y());
- GdkRectangle bounds;
- gdk_screen_get_monitor_geometry(screen, monitor, &bounds);
- return gfx::Rect(bounds);
-}
-
-// static
-gfx::Rect Screen::GetPrimaryMonitorWorkArea() {
- gfx::Rect rect;
- if (GetScreenWorkArea(&rect))
- return rect.Intersect(GetPrimaryMonitorBounds());
-
- // Return the best we've got.
- return GetPrimaryMonitorBounds();
-}
+} // namespace
-// static
-gfx::Rect Screen::GetPrimaryMonitorBounds() {
- GdkScreen* screen = gdk_screen_get_default();
- GdkRectangle rect;
- gdk_screen_get_monitor_geometry(screen, 0, &rect);
- return gfx::Rect(rect);
-}
+namespace gfx {
// static
-gfx::Rect Screen::GetMonitorWorkAreaMatching(const gfx::Rect& match_rect) {
- // TODO(thestig) Implement multi-monitor support.
- return GetPrimaryMonitorWorkArea();
+gfx::Point Screen::GetCursorScreenPoint() {
+ gint x, y;
+ gdk_display_get_pointer(gdk_display_get_default(), NULL, &x, &y, NULL);
+ return gfx::Point(x, y);
}
// static
@@ -144,9 +106,56 @@ gfx::NativeWindow Screen::GetWindowAtCursorScreenPoint() {
}
// static
-gfx::Size Screen::GetPrimaryMonitorSize() {
+const gfx::Monitor* Screen::GetMonitorNearestWindow(gfx::NativeView view) {
+ gfx::Rect bounds = GetMonitorAreaNearestWindow(view);
+ gfx::SimpleMonitor* monitor = GetMonitor();
+ monitor->set_bounds(bounds);
+ // Do not use the _NET_WORKAREA here, this is supposed to be an area on a
+ // specific monitor, and _NET_WORKAREA is a hint from the WM that generally
+ // spans across all monitors. This would make the work area larger than the
+ // monitor.
+ // TODO(danakj) This is a work-around as there is no standard way to get this
+ // area, but it is a rect that we should be computing. The standard means
+ // to compute this rect would be to watch all windows with
+ // _NET_WM_STRUT(_PARTIAL) hints, and subtract their space from the physical
+ // area of the monitor to construct a work area.
+ monitor->set_work_area(bounds);
+ return monitor;
+}
+
+// static
+const gfx::Monitor* Screen::GetMonitorNearestPoint(const gfx::Point& point) {
GdkScreen* screen = gdk_screen_get_default();
- return gfx::Size(gdk_screen_get_width(screen), gdk_screen_get_height(screen));
+ gint monitor = gdk_screen_get_monitor_at_point(screen, point.x(), point.y());
+ GdkRectangle bounds;
+ gdk_screen_get_monitor_geometry(screen, monitor, &bounds);
+
+ gfx::SimpleMonitor* simple_monitor = GetMonitor();
+ simple_monitor->set_bounds(gfx::Rect(bounds));
+ // TODO(jamiewalch): Restrict this to the work area of the monitor.
+ simple_monitor->set_work_area(gfx::Rect(bounds));
+ return simple_monitor;
+}
+
+// static
+const gfx::Monitor* Screen::GetPrimaryMonitor() {
+ gfx::Rect bounds = GetPrimaryMonitorBounds();
+ gfx::SimpleMonitor* monitor = GetMonitor();
+ monitor->set_bounds(bounds);
+ gfx::Rect rect;
+ if (GetScreenWorkArea(&rect)) {
+ monitor->set_work_area(rect.Intersect(bounds));
+ } else {
+ // Return the best we've got.
+ monitor->set_work_area(bounds);
+ }
+ return monitor;
+}
+
+// static
+const gfx::Monitor* Screen::GetMonitorMatching(const gfx::Rect& match_rect) {
+ // TODO(thestig) Implement multi-monitor support.
+ return GetPrimaryMonitor();
}
// static
« no previous file with comments | « ui/gfx/screen_aura.cc ('k') | ui/gfx/screen_mac.mm » ('j') | ui/gfx/screen_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698