[gtk+/resolution-independence: 1/24] make resolution and font options per monitor



commit c43a02ba554d2969529e2e9274206c7520cdf075
Author: David Zeuthen <davidz redhat com>
Date:   Tue Aug 12 15:39:10 2008 -0400

    make resolution and font options per monitor
    
    For now, only add API and ignore the monitor number. An actual
    implementation will depend on defining new X Settings.
---
 docs/reference/gdk/gdk-sections.txt |    5 ++
 gdk/gdk.symbols                     |    5 ++
 gdk/gdkpango.c                      |   36 +++++++++++++++
 gdk/gdkpango.h                      |    3 +
 gdk/gdkscreen.c                     |   83 +++++++++++++++++++++++++++++++++++
 gdk/gdkscreen.h                     |   13 +++++
 6 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/docs/reference/gdk/gdk-sections.txt b/docs/reference/gdk/gdk-sections.txt
index ce37ae1..aa20eb1 100644
--- a/docs/reference/gdk/gdk-sections.txt
+++ b/docs/reference/gdk/gdk-sections.txt
@@ -225,8 +225,12 @@ gdk_screen_broadcast_client_message
 gdk_screen_get_setting
 gdk_screen_get_font_options
 gdk_screen_set_font_options
+gdk_screen_get_font_options_for_monitor
+gdk_screen_set_font_options_for_monitor
 gdk_screen_get_resolution
 gdk_screen_set_resolution
+gdk_screen_get_resolution_for_monitor
+gdk_screen_set_resolution_for_monitor
 gdk_screen_get_active_window
 gdk_screen_get_window_stack
 <SUBSECTION Spawning>
@@ -874,6 +878,7 @@ gdk_pango_renderer_set_stipple
 gdk_pango_renderer_set_override_color
 gdk_pango_context_get
 gdk_pango_context_get_for_screen
+gdk_pango_context_get_for_screen_for_monitor
 gdk_pango_context_set_colormap
 GdkPangoAttrEmbossed
 GdkPangoAttrEmbossColor
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index cfb54c2..9dd91b7 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -889,6 +889,7 @@ gdk_pango_attr_embossed_new
 gdk_pango_attr_stipple_new
 gdk_pango_context_get
 gdk_pango_context_get_for_screen
+gdk_pango_context_get_for_screen_for_monitor
 #ifndef GDK_DISABLE_DEPRECATED
 gdk_pango_context_set_colormap
 #endif
@@ -1008,8 +1009,12 @@ gdk_screen_get_monitor_at_point
 gdk_screen_get_monitor_at_window
 gdk_screen_set_font_options
 gdk_screen_get_font_options
+gdk_screen_set_font_options_for_monitor
+gdk_screen_get_font_options_for_monitor
 gdk_screen_set_resolution
 gdk_screen_get_resolution
+gdk_screen_get_resolution_for_monitor
+gdk_screen_set_resolution_for_monitor
 #endif
 #endif
 
diff --git a/gdk/gdkpango.c b/gdk/gdkpango.c
index a386403..27c09be 100644
--- a/gdk/gdkpango.c
+++ b/gdk/gdkpango.c
@@ -1496,5 +1496,41 @@ gdk_pango_context_get_for_screen (GdkScreen *screen)
   return context;
 }
 
+/**
+ * gdk_pango_context_get_for_screen_for_monitor:
+ * @screen: the #GdkScreen for which the context is to be created.
+ * @monitor_num: monitor number or -1 to use default monitor
+ * 
+ * Like gdk_pango_context_get_for_screen() but also takes a monitor
+ * number.
+ * 
+ * Return value: a new #PangoContext for @screen
+ *
+ * Since: 2.14
+ **/
+PangoContext *
+gdk_pango_context_get_for_screen_for_monitor (GdkScreen *screen,
+                                              gint monitor_num)
+{
+  PangoFontMap *fontmap;
+  PangoContext *context;
+  const cairo_font_options_t *options;
+  double dpi;
+  
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+
+  fontmap = pango_cairo_font_map_get_default ();
+  
+  context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+
+  options = gdk_screen_get_font_options_for_monitor (screen, monitor_num);
+  pango_cairo_context_set_font_options (context, options);
+
+  dpi = gdk_screen_get_resolution_for_monitor (screen, monitor_num);
+  pango_cairo_context_set_resolution (context, dpi);
+
+  return context;
+}
+
 #define __GDK_PANGO_C__
 #include "gdkaliasdef.c"
diff --git a/gdk/gdkpango.h b/gdk/gdkpango.h
index 39df0ef..d2e0af9 100644
--- a/gdk/gdkpango.h
+++ b/gdk/gdkpango.h
@@ -104,6 +104,9 @@ void gdk_pango_renderer_set_override_color (GdkPangoRenderer *gdk_renderer,
 
 /************************************************************************/
 
+PangoContext *gdk_pango_context_get_for_screen_for_monitor (GdkScreen    *screen,
+                                                            gint          monitor_num);
+
 PangoContext *gdk_pango_context_get_for_screen (GdkScreen    *screen);
 #ifndef GDK_MULTIHEAD_SAFE
 PangoContext *gdk_pango_context_get            (void);
diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c
index 17c09f9..1df89bb 100644
--- a/gdk/gdkscreen.c
+++ b/gdk/gdkscreen.c
@@ -429,6 +429,25 @@ gdk_screen_set_font_options (GdkScreen                  *screen,
 }
 
 /**
+ * gdk_screen_set_font_options_for_monitor:
+ * @screen: a #GdkScreen
+ * @options: a #cairo_font_options_t, or %NULL to unset any
+ *   previously set default font options.
+ *
+ * Like gdk_screen_set_font_options() but per monitor.
+ *
+ * Since: 2.14
+ **/
+void
+gdk_screen_set_font_options_for_monitor (GdkScreen                  *screen,
+                                         gint                        monitor_num,
+                                         const cairo_font_options_t *options)
+{
+    /* TODO: need to implement per-monitor font options */
+    return gdk_screen_set_font_options (screen, options);
+}
+
+/**
  * gdk_screen_get_font_options:
  * @screen: a #GdkScreen
  * 
@@ -448,6 +467,26 @@ gdk_screen_get_font_options (GdkScreen *screen)
 }
 
 /**
+ * gdk_screen_get_font_options_for_monitor:
+ * @screen: a #GdkScreen
+ * @monitor_num: monitor number or -1 for default monitor
+ * 
+ * Like gdk_screen_get_font_options() but per monitor.
+ * 
+ * Return value: the current font options, or %NULL if no default
+ *  font options have been set.
+ *
+ * Since: 2.14
+ **/
+const cairo_font_options_t *
+gdk_screen_get_font_options_for_monitor (GdkScreen *screen,
+                                         gint       monitor_num)
+{
+    /* TODO: need to implement per-monitor font options */
+    return gdk_screen_get_font_options (screen);
+}
+
+/**
  * gdk_screen_set_resolution:
  * @screen: a #GdkScreen
  * @dpi: the resolution in "dots per inch". (Physical inches aren't actually
@@ -497,6 +536,50 @@ gdk_screen_get_resolution (GdkScreen *screen)
   return screen->resolution;
 }
 
+/**
+ * gdk_screen_get_resolution_for_monitor:
+ * @screen: a #GdkScreen
+ * @monitor_num: monitor number or -1 for default monitor
+ *
+ * Like gdk_screen_get_resolution() but per monitor.
+ * 
+ * Returns: the current resolution or -1 if no resolution has been
+ * set.
+ *
+ * Since: 2.14
+ **/
+gdouble
+gdk_screen_get_resolution_for_monitor (GdkScreen *screen,
+                                       gint       monitor_num)
+{
+#if 0
+  /* Nifty trick to test RI - monitor 0 will have 3 times the user configured DPI */
+  return (monitor_num == 0 ? 3.0 : 1.0) * gdk_screen_get_resolution (screen);
+#endif
+  /* TODO: need to implement per-monitor resolution */
+  return gdk_screen_get_resolution (screen);
+}
+
+/**
+ * gdk_screen_set_resolution_for_monitor:
+ * @screen: a #GdkScreen
+ * @monitor_num: monitor number
+ * @dpi: the resolution in "dots per inch". (Physical inches aren't actually
+ *   involved; the terminology is conventional.)
+ *
+ * Like gdk_screen_set_resolution() but per monitor.
+ *
+ * Since: 2.14
+ **/
+void
+gdk_screen_set_resolution_for_monitor (GdkScreen *screen,
+                                       gint       monitor_num,
+                                       gdouble    dpi)
+{
+  /* TODO: need to implement per-monitor resolution */
+  gdk_screen_set_resolution (screen, dpi);
+}
+
 static void
 gdk_screen_get_property (GObject      *object,
 			 guint         prop_id,
diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h
index b1f3b8e..1a6fc32 100644
--- a/gdk/gdkscreen.h
+++ b/gdk/gdkscreen.h
@@ -118,10 +118,23 @@ void                        gdk_screen_set_font_options (GdkScreen
 							 const cairo_font_options_t *options);
 const cairo_font_options_t *gdk_screen_get_font_options (GdkScreen                  *screen);
 
+void                        gdk_screen_set_font_options_for_monitor (GdkScreen                  *screen,
+                                                                     gint                        monitor_num,
+                                                                     const cairo_font_options_t *options);
+const cairo_font_options_t *gdk_screen_get_font_options_for_monitor (GdkScreen                  *screen,
+                                                                     gint                        monitor_num);
+
 void    gdk_screen_set_resolution (GdkScreen *screen,
 				   gdouble    dpi);
 gdouble gdk_screen_get_resolution (GdkScreen *screen);
 
+gdouble gdk_screen_get_resolution_for_monitor (GdkScreen *screen,
+                                               gint       monitor_num);
+
+void    gdk_screen_set_resolution_for_monitor (GdkScreen *screen,
+                                               gint       monitor_num,
+                                               gdouble    dpi);
+
 GdkWindow *gdk_screen_get_active_window (GdkScreen *screen);
 GList     *gdk_screen_get_window_stack  (GdkScreen *screen);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]