Fix 'mono' package typo
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0054-quartz-add-gdk_screen_-and-gdk_window_get_scale_fact.patch
1 From 13bba88188cc3880d4eba9a93f9109154308d51a Mon Sep 17 00:00:00 2001
2 From: Michael Natterer <mitch@gimp.org>
3 Date: Fri, 18 Jan 2013 15:47:29 +0100
4 Subject: [PATCH 54/68] quartz: add gdk_screen_ and
5  gdk_window_get_scale_factor()
6
7 which return 1.0 normally and 2.0 on retina displays.
8 ---
9  gdk/gdkscreen.h               |    2 ++
10  gdk/gdkwindow.c               |   24 ++++++++++++++++++++++++
11  gdk/gdkwindow.h               |    1 +
12  gdk/gdkwindowimpl.h           |    3 +++
13  gdk/quartz/gdkscreen-quartz.c |   33 +++++++++++++++++++++++++++++++++
14  gdk/quartz/gdkwindow-quartz.c |   22 ++++++++++++++++++++++
15  gdk/x11/gdkscreen-x11.c       |    7 +++++++
16  7 files changed, 92 insertions(+)
17
18 diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
19 index d3d4fe9..0c1e895 100644
20 --- a/gdk/gdkscreen.h
21 +++ b/gdk/gdkscreen.h
22 @@ -109,6 +109,8 @@ gint          gdk_screen_get_monitor_height_mm (GdkScreen *screen,
23                                                  gint       monitor_num);
24  gchar *       gdk_screen_get_monitor_plug_name (GdkScreen *screen,
25                                                  gint       monitor_num);
26 +gdouble       gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
27 +                                                   gint       monitor_num);
28
29  void          gdk_screen_broadcast_client_message  (GdkScreen       *screen,
30                                                     GdkEvent        *event);
31 diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
32 index 3040321..29b96e2 100644
33 --- a/gdk/gdkwindow.c
34 +++ b/gdk/gdkwindow.c
35 @@ -11475,6 +11475,30 @@ gdk_window_get_height (GdkWindow *window)
36    return height;
37  }
38
39 +gdouble
40 +gdk_window_get_scale_factor (GdkWindow *window)
41 +{
42 +  GdkWindowObject *private;
43 +  GdkWindowImplIface *impl_iface;
44 +
45 +  g_return_val_if_fail (GDK_IS_WINDOW (window), 1.0);
46 +
47 +  private = (GdkWindowObject *) window;
48 +  if (private->destroyed)
49 +    return 1.0;
50 +
51 +  window = gdk_window_get_toplevel (window);
52 +
53 +  if (gdk_window_has_impl (private))
54 +    {
55 +      impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
56 +
57 +      if (impl_iface->get_scale_factor)
58 +        return impl_iface->get_scale_factor (window);
59 +    }
60 +
61 +  return 1.0;
62 +}
63
64  #define __GDK_WINDOW_C__
65  #include "gdkaliasdef.c"
66 diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
67 index 572797b..95a3665 100644
68 --- a/gdk/gdkwindow.h
69 +++ b/gdk/gdkwindow.h
70 @@ -341,6 +341,7 @@ GdkDisplay*   gdk_window_get_display           (GdkWindow     *window);
71  GdkVisual*    gdk_window_get_visual            (GdkWindow     *window);
72  int           gdk_window_get_width             (GdkWindow     *window);
73  int           gdk_window_get_height            (GdkWindow     *window);
74 +gdouble       gdk_window_get_scale_factor      (GdkWindow     *window);
75
76  GdkWindow*    gdk_window_at_pointer            (gint          *win_x,
77                                                  gint          *win_y);
78 diff --git a/gdk/gdkwindowimpl.h b/gdk/gdkwindowimpl.h
79 index 3a5029b..d6a0c89 100644
80 --- a/gdk/gdkwindowimpl.h
81 +++ b/gdk/gdkwindowimpl.h
82 @@ -146,6 +146,9 @@ struct _GdkWindowImplIface
83    void         (* input_window_destroy) (GdkWindow       *window);
84    void         (* input_window_crossing)(GdkWindow       *window,
85                                          gboolean         enter);
86 +
87 +  gdouble      (* get_scale_factor)     (GdkWindow       *window);
88 +
89    gboolean     supports_native_bg;
90  };
91
92 diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c
93 index 4bb573b..e6f0c44 100644
94 --- a/gdk/quartz/gdkscreen-quartz.c
95 +++ b/gdk/quartz/gdkscreen-quartz.c
96 @@ -494,6 +494,39 @@ gdk_screen_get_monitor_workarea (GdkScreen    *screen,
97    GDK_QUARTZ_RELEASE_POOL;
98  }
99
100 +/* Protocol to build cleanly for OSX < 10.7 */
101 +@protocol ScaleFactor
102 +- (CGFloat) backingScaleFactor;
103 +@end
104 +
105 +gdouble
106 +gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
107 +                                     gint       monitor_num)
108 +{
109 +  GdkScreenQuartz *quartz_screen;
110 +  NSArray *array;
111 +  NSScreen *nsscreen;
112 +  gdouble scale_factor = 1.0;
113 +
114 +  g_return_val_if_fail (GDK_IS_SCREEN (screen), 1.0);
115 +  g_return_val_if_fail (monitor_num < gdk_screen_get_n_monitors (screen), 1.0);
116 +  g_return_val_if_fail (monitor_num >= 0, 1.0);
117 +
118 +  quartz_screen = GDK_SCREEN_QUARTZ (screen);
119 +
120 +  GDK_QUARTZ_ALLOC_POOL;
121 +
122 +  array = [NSScreen screens];
123 +  nsscreen = [array objectAtIndex:monitor_num];
124 +
125 +  if (gdk_quartz_osx_version() >= GDK_OSX_LION)
126 +    scale_factor = [(id <ScaleFactor>) nsscreen backingScaleFactor];
127 +
128 +  GDK_QUARTZ_RELEASE_POOL;
129 +
130 +  return scale_factor;
131 +}
132 +
133  gchar *
134  gdk_screen_make_display_name (GdkScreen *screen)
135  {
136 diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
137 index 500776d..5b9ceef 100644
138 --- a/gdk/quartz/gdkwindow-quartz.c
139 +++ b/gdk/quartz/gdkwindow-quartz.c
140 @@ -3201,6 +3201,27 @@ _gdk_windowing_window_get_input_shape (GdkWindow *window)
141    return NULL;
142  }
143
144 +/* Protocol to build cleanly for OSX < 10.7 */
145 +@protocol ScaleFactor
146 +- (CGFloat) backingScaleFactor;
147 +@end
148 +
149 +static gdouble
150 +gdk_window_quartz_get_scale_factor (GdkWindow *window)
151 +{
152 +  GdkWindowImplQuartz *impl;
153 +
154 +  if (GDK_WINDOW_DESTROYED (window))
155 +    return 1.0;
156 +
157 +  impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
158 +
159 +  if (gdk_quartz_osx_version() >= GDK_OSX_LION)
160 +    return [(id <ScaleFactor>) impl->toplevel backingScaleFactor];
161 +
162 +  return 1.0;
163 +}
164 +
165  static void
166  gdk_window_impl_iface_init (GdkWindowImplIface *iface)
167  {
168 @@ -3229,4 +3250,5 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
169    iface->destroy = _gdk_quartz_window_destroy;
170    iface->input_window_destroy = _gdk_input_window_destroy;
171    iface->input_window_crossing = _gdk_input_window_crossing;
172 +  iface->get_scale_factor = gdk_window_quartz_get_scale_factor;
173  }
174 diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
175 index 66a0d96..d09d0b6 100644
176 --- a/gdk/x11/gdkscreen-x11.c
177 +++ b/gdk/x11/gdkscreen-x11.c
178 @@ -454,6 +454,13 @@ gdk_screen_get_monitor_plug_name (GdkScreen *screen,
179    return g_strdup (screen_x11->monitors[monitor_num].output_name);
180  }
181
182 +gdouble
183 +gdk_screen_get_monitor_scale_factor (GdkScreen *screen,
184 +                                     gint       monitor_num)
185 +{
186 +  return 1.0;
187 +}
188 +
189  /**
190   * gdk_x11_screen_get_monitor_output:
191   * @screen: a #GdkScreen
192 --
193 1.7.10.2 (Apple Git-33)