[gtk+] Convert a bunch of visual related calls to use the screen vtable



commit ae146a281750926eee6c5fafb88414999ffa6821
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Dec 6 23:19:58 2010 +0100

    Convert a bunch of visual related calls to use the screen vtable

 gdk/gdkinternals.h       |   19 ++++++
 gdk/gdkscreen.c          |   40 ++++++++++++
 gdk/gdkvisual.c          |  150 +++++++++++++++++++++++++++++++++++++++++++
 gdk/x11/gdkprivate-x11.h |   21 ++++++
 gdk/x11/gdkscreen-x11.c  |   10 +++
 gdk/x11/gdkvisual-x11.c  |  158 +++++++--------------------------------------
 6 files changed, 265 insertions(+), 133 deletions(-)
---
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index 264955a..d0fa21d 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -372,6 +372,8 @@ struct _GdkScreenClass
   void         (* get_monitor_geometry)  (GdkScreen    *screen,
 					  gint          monitor_num,
 					  GdkRectangle *dest);
+  GList *      (* list_visuals)          (GdkScreen *screen);
+  GdkVisual *  (* get_system_visual)     (GdkScreen *screen);
   GdkVisual *  (* get_rgba_visual)       (GdkScreen *screen);
   gboolean     (* is_composited)         (GdkScreen *screen);
   gchar *      (* make_display_name)     (GdkScreen *screen);
@@ -382,6 +384,23 @@ struct _GdkScreenClass
   gboolean     (* get_setting)           (GdkScreen   *screen,
 					  const gchar *name,
 					  GValue      *value);
+  gint         (* visual_get_best_depth) (GdkScreen   *screen);
+  GdkVisualType (* visual_get_best_type) (GdkScreen   *screen);
+  GdkVisual *  (* visual_get_best)       (GdkScreen   *screen);
+  GdkVisual *  (* visual_get_best_with_depth) (GdkScreen   *screen,
+					       gint depth);
+  GdkVisual *  (* visual_get_best_with_type) (GdkScreen   *screen,
+					      GdkVisualType visual_type);
+  GdkVisual *  (* visual_get_best_with_both) (GdkScreen   *screen,
+					      gint depth,
+					      GdkVisualType visual_type);
+  void         (* query_depths)          (GdkScreen   *screen,
+					  gint **depths,
+					  gint  *count);
+  void         (* query_visual_types)    (GdkScreen   *screen,
+					  GdkVisualType **visual_types,
+					  gint           *count);
+
 
   /* Signals: */
   void (*size_changed) (GdkScreen *screen);
diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c
index f092db7..df316a6 100644
--- a/gdk/gdkscreen.c
+++ b/gdk/gdkscreen.c
@@ -768,6 +768,46 @@ gdk_screen_get_monitor_geometry (GdkScreen    *screen,
 }
 
 /**
+ * gdk_screen_list_visuals:
+ * @screen: the relevant #GdkScreen.
+ *
+ * Lists the available visuals for the specified @screen.
+ * A visual describes a hardware image data format.
+ * For example, a visual might support 24-bit color, or 8-bit color,
+ * and might expect pixels to be in a certain format.
+ *
+ * Call g_list_free() on the return value when you're finished with it.
+ *
+ * Return value: (transfer container) (element-type GdkVisual):
+ *     a list of visuals; the list must be freed, but not its contents
+ *
+ * Since: 2.2
+ **/
+GList *
+gdk_screen_list_visuals (GdkScreen *screen)
+{
+  return GDK_SCREEN_GET_CLASS(screen)->list_visuals (screen);
+}
+
+/**
+ * gdk_screen_get_system_visual:
+ * @screen: a #GdkScreen.
+ *
+ * Get the system's default visual for @screen.
+ * This is the visual for the root window of the display.
+ * The return value should not be freed.
+ *
+ * Return value: (transfer none): the system visual
+ *
+ * Since: 2.2
+ **/
+GdkVisual *
+gdk_screen_get_system_visual (GdkScreen * screen)
+{
+  return GDK_SCREEN_GET_CLASS(screen)->get_system_visual (screen);
+}
+
+/**
  * gdk_screen_get_rgba_visual:
  * @screen: a #GdkScreen
  *
diff --git a/gdk/gdkvisual.c b/gdk/gdkvisual.c
index cba4a7b..15f681d 100644
--- a/gdk/gdkvisual.c
+++ b/gdk/gdkvisual.c
@@ -23,6 +23,7 @@
 
 #include "config.h"
 
+#include "gdkinternals.h"
 #include "gdkvisual.h"
 
 #include "gdkscreen.h"
@@ -91,6 +92,155 @@ gdk_visual_get_system (void)
 }
 
 /**
+ * gdk_visual_get_best_depth:
+ *
+ * Get the best available depth for the default GDK screen.  "Best"
+ * means "largest," i.e. 32 preferred over 24 preferred over 8 bits
+ * per pixel.
+ *
+ * Return value: best available depth
+ **/
+gint
+gdk_visual_get_best_depth (void)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best_depth (screen);
+}
+
+/**
+ * gdk_visual_get_best_type:
+ *
+ * Return the best available visual type for the default GDK screen.
+ *
+ * Return value: best visual type
+ **/
+GdkVisualType
+gdk_visual_get_best_type (void)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best_type (screen);
+}
+
+/**
+ * gdk_visual_get_best:
+ *
+ * Get the visual with the most available colors for the default
+ * GDK screen. The return value should not be freed.
+ *
+ * Return value: (transfer none): best visual
+ **/
+GdkVisual*
+gdk_visual_get_best (void)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best (screen);
+}
+
+/**
+ * gdk_visual_get_best_with_depth:
+ * @depth: a bit depth
+ *
+ * Get the best visual with depth @depth for the default GDK screen.
+ * Color visuals and visuals with mutable colormaps are preferred
+ * over grayscale or fixed-colormap visuals. The return value should not
+ * be freed. %NULL may be returned if no visual supports @depth.
+ *
+ * Return value: (transfer none): best visual for the given depth
+ **/
+GdkVisual*
+gdk_visual_get_best_with_depth (gint depth)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best_with_depth (screen, depth);
+}
+
+/**
+ * gdk_visual_get_best_with_type:
+ * @visual_type: a visual type
+ *
+ * Get the best visual of the given @visual_type for the default GDK screen.
+ * Visuals with higher color depths are considered better. The return value
+ * should not be freed. %NULL may be returned if no visual has type
+ * @visual_type.
+ *
+ * Return value: (transfer none): best visual of the given type
+ **/
+GdkVisual*
+gdk_visual_get_best_with_type (GdkVisualType visual_type)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best_with_type (screen,
+								  visual_type);
+}
+
+/**
+ * gdk_visual_get_best_with_both:
+ * @depth: a bit depth
+ * @visual_type: a visual type
+ *
+ * Combines gdk_visual_get_best_with_depth() and gdk_visual_get_best_with_type().
+ *
+ * Return value: (transfer none): best visual with both @depth and
+ *     @visual_type, or %NULL if none
+ **/
+GdkVisual*
+gdk_visual_get_best_with_both (gint          depth,
+			       GdkVisualType visual_type)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  return GDK_SCREEN_GET_CLASS(screen)->visual_get_best_with_both (screen, depth, visual_type);
+}
+
+/**
+ * gdk_query_depths:
+ * @depths: (out) (array): return location for available depths
+ * @count: (out): return location for number of available depths
+ *
+ * This function returns the available bit depths for the default
+ * screen. It's equivalent to listing the visuals
+ * (gdk_list_visuals()) and then looking at the depth field in each
+ * visual, removing duplicates.
+ *
+ * The array returned by this function should not be freed.
+ *
+ **/
+void
+gdk_query_depths  (gint **depths,
+		   gint  *count)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  GDK_SCREEN_GET_CLASS(screen)->query_depths (screen, depths, count);
+}
+
+/**
+ * gdk_query_visual_types:
+ * @visual_types: return location for the available visual types
+ * @count: return location for the number of available visual types
+ *
+ * This function returns the available visual types for the default
+ * screen. It's equivalent to listing the visuals
+ * (gdk_list_visuals()) and then looking at the type field in each
+ * visual, removing duplicates.
+ *
+ * The array returned by this function should not be freed.
+ **/
+void
+gdk_query_visual_types (GdkVisualType **visual_types,
+			gint           *count)
+{
+  GdkScreen *screen = gdk_screen_get_default();
+
+  GDK_SCREEN_GET_CLASS(screen)->query_visual_types (screen, visual_types, count);
+}
+
+/**
  * gdk_visual_get_visual_type:
  * @visual: A #GdkVisual.
  *
diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
index f9a4c12..31c4e90 100644
--- a/gdk/x11/gdkprivate-x11.h
+++ b/gdk/x11/gdkprivate-x11.h
@@ -54,6 +54,27 @@ void _gdk_x11_error_handler_pop  (void);
 
 Colormap _gdk_visual_get_x11_colormap (GdkVisual *visual);
 
+gint          _gdk_screen_x11_visual_get_best_depth      (GdkScreen      *screen);
+GdkVisualType _gdk_screen_x11_visual_get_best_type       (GdkScreen      *screen);
+GdkVisual *   _gdk_screen_x11_get_system_visual          (GdkScreen      *screen);
+GdkVisual*    _gdk_screen_x11_visual_get_best            (GdkScreen      *screen);
+GdkVisual*    _gdk_screen_x11_visual_get_best_with_depth (GdkScreen      *screen,
+							  gint            depth);
+GdkVisual*    _gdk_screen_x11_visual_get_best_with_type  (GdkScreen      *screen,
+							  GdkVisualType   visual_type);
+GdkVisual*    _gdk_screen_x11_visual_get_best_with_both  (GdkScreen      *screen,
+							  gint            depth,
+							  GdkVisualType   visual_type);
+void          _gdk_screen_x11_query_depths               (GdkScreen      *screen,
+							  gint          **depths,
+							  gint           *count);
+void          _gdk_screen_x11_query_visual_types         (GdkScreen      *screen,
+							  GdkVisualType **visual_types,
+							  gint           *count);
+GList *       _gdk_screen_x11_list_visuals               (GdkScreen      *screen);
+
+
+
 void _gdk_xid_table_insert (GdkDisplay *display,
 			    XID        *xid,
 			    gpointer    data);
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index 5510d63..f9cda43 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -1721,6 +1721,7 @@ _gdk_screen_x11_class_init (GdkScreenX11Class *klass)
   screen_class->get_monitor_height_mm = gdk_screen_x11_get_monitor_height_mm;
   screen_class->get_monitor_plug_name = gdk_screen_x11_get_monitor_plug_name;
   screen_class->get_monitor_geometry = gdk_screen_x11_get_monitor_geometry;
+  screen_class->get_system_visual = _gdk_screen_x11_get_system_visual;
   screen_class->get_rgba_visual = gdk_screen_x11_get_rgba_visual;
   screen_class->is_composited = gdk_screen_x11_is_composited;
   screen_class->make_display_name = gdk_screen_x11_make_display_name;
@@ -1728,6 +1729,15 @@ _gdk_screen_x11_class_init (GdkScreenX11Class *klass)
   screen_class->get_window_stack = gdk_screen_x11_get_window_stack;
   screen_class->broadcast_client_message = gdk_screen_x11_broadcast_client_message;
   screen_class->get_setting = gdk_screen_x11_get_setting;
+  screen_class->visual_get_best_depth = _gdk_screen_x11_visual_get_best_depth;
+  screen_class->visual_get_best_type = _gdk_screen_x11_visual_get_best_type;
+  screen_class->visual_get_best = _gdk_screen_x11_visual_get_best;
+  screen_class->visual_get_best_with_depth = _gdk_screen_x11_visual_get_best_with_depth;
+  screen_class->visual_get_best_with_type = _gdk_screen_x11_visual_get_best_with_type;
+  screen_class->visual_get_best_with_both = _gdk_screen_x11_visual_get_best_with_both;
+  screen_class->query_depths = _gdk_screen_x11_query_depths;
+  screen_class->query_visual_types = _gdk_screen_x11_query_visual_types;
+  screen_class->list_visuals = _gdk_screen_x11_list_visuals;
 
   signals[WINDOW_MANAGER_CHANGED] =
     g_signal_new (g_intern_static_string ("window_manager_changed"),
diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
index 59acba2..f2ba3ca 100644
--- a/gdk/x11/gdkvisual-x11.c
+++ b/gdk/x11/gdkvisual-x11.c
@@ -338,89 +338,39 @@ _gdk_visual_init (GdkScreen *screen)
   screen_x11->nvisuals = nvisuals;
 }
 
-/**
- * gdk_visual_get_best_depth:
- * 
- * Get the best available depth for the default GDK screen.  "Best"
- * means "largest," i.e. 32 preferred over 24 preferred over 8 bits
- * per pixel.
- * 
- * Return value: best available depth
- **/
 gint
-gdk_visual_get_best_depth (void)
+_gdk_screen_x11_visual_get_best_depth (GdkScreen *screen)
 {
-  GdkScreen *screen = gdk_screen_get_default();
-  
   return GDK_SCREEN_X11 (screen)->available_depths[0];
 }
 
-/**
- * gdk_visual_get_best_type:
- * 
- * Return the best available visual type for the default GDK screen.
- * 
- * Return value: best visual type
- **/
 GdkVisualType
-gdk_visual_get_best_type (void)
+_gdk_screen_x11_visual_get_best_type (GdkScreen *screen)
 {
-  GdkScreen *screen = gdk_screen_get_default();
-  
   return GDK_SCREEN_X11 (screen)->available_types[0];
 }
 
-/**
- * gdk_screen_get_system_visual:
- * @screen: a #GdkScreen.
- * 
- * Get the system's default visual for @screen.
- * This is the visual for the root window of the display.
- * The return value should not be freed.
- * 
- * Return value: (transfer none): the system visual
- *
- * Since: 2.2
- **/
 GdkVisual *
-gdk_screen_get_system_visual (GdkScreen * screen)
+_gdk_screen_x11_get_system_visual (GdkScreen * screen)
 {
   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
 
   return ((GdkVisual *) GDK_SCREEN_X11 (screen)->system_visual);
 }
 
-/**
- * gdk_visual_get_best:
- *
- * Get the visual with the most available colors for the default
- * GDK screen. The return value should not be freed.
- * 
- * Return value: (transfer none): best visual
- **/
 GdkVisual*
-gdk_visual_get_best (void)
+_gdk_screen_x11_visual_get_best (GdkScreen *screen)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default());
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
 
   return (GdkVisual *)screen_x11->visuals[0];
 }
 
-/**
- * gdk_visual_get_best_with_depth:
- * @depth: a bit depth
- * 
- * Get the best visual with depth @depth for the default GDK screen.
- * Color visuals and visuals with mutable colormaps are preferred
- * over grayscale or fixed-colormap visuals. The return value should not
- * be freed. %NULL may be returned if no visual supports @depth.
- * 
- * Return value: (transfer none): best visual for the given depth
- **/
 GdkVisual*
-gdk_visual_get_best_with_depth (gint depth)
+_gdk_screen_x11_visual_get_best_with_depth (GdkScreen *screen,
+					    gint depth)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default ());
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
   GdkVisual *return_val;
   int i;
   
@@ -435,21 +385,11 @@ gdk_visual_get_best_with_depth (gint depth)
   return return_val;
 }
 
-/**
- * gdk_visual_get_best_with_type:
- * @visual_type: a visual type
- *
- * Get the best visual of the given @visual_type for the default GDK screen.
- * Visuals with higher color depths are considered better. The return value
- * should not be freed. %NULL may be returned if no visual has type
- * @visual_type.
- * 
- * Return value: (transfer none): best visual of the given type
- **/
 GdkVisual*
-gdk_visual_get_best_with_type (GdkVisualType visual_type)
+_gdk_screen_x11_visual_get_best_with_type (GdkScreen *screen,
+					   GdkVisualType visual_type)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default ());
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
   GdkVisual *return_val;
   int i;
 
@@ -464,21 +404,12 @@ gdk_visual_get_best_with_type (GdkVisualType visual_type)
   return return_val;
 }
 
-/**
- * gdk_visual_get_best_with_both:
- * @depth: a bit depth
- * @visual_type: a visual type
- *
- * Combines gdk_visual_get_best_with_depth() and gdk_visual_get_best_with_type().
- * 
- * Return value: (transfer none): best visual with both @depth and
- *     @visual_type, or %NULL if none
- **/
 GdkVisual*
-gdk_visual_get_best_with_both (gint          depth,
-			       GdkVisualType visual_type)
+_gdk_screen_x11_visual_get_best_with_both (GdkScreen *screen,
+					   gint          depth,
+					   GdkVisualType visual_type)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default ());
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
   GdkVisual *return_val;
   int i;
 
@@ -494,69 +425,30 @@ gdk_visual_get_best_with_both (gint          depth,
   return return_val;
 }
 
-/**
- * gdk_query_depths:
- * @depths: (out) (array): return location for available depths
- * @count: (out): return location for number of available depths
- *
- * This function returns the available bit depths for the default
- * screen. It's equivalent to listing the visuals
- * (gdk_list_visuals()) and then looking at the depth field in each
- * visual, removing duplicates.
- * 
- * The array returned by this function should not be freed.
- * 
- **/
 void
-gdk_query_depths  (gint **depths,
-		   gint  *count)
+_gdk_screen_x11_query_depths  (GdkScreen *screen,
+			       gint **depths,
+			       gint  *count)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default ());
-  
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
+
   *count = screen_x11->navailable_depths;
   *depths = screen_x11->available_depths;
 }
 
-/**
- * gdk_query_visual_types:
- * @visual_types: return location for the available visual types
- * @count: return location for the number of available visual types
- *
- * This function returns the available visual types for the default
- * screen. It's equivalent to listing the visuals
- * (gdk_list_visuals()) and then looking at the type field in each
- * visual, removing duplicates.
- * 
- * The array returned by this function should not be freed.
- **/
 void
-gdk_query_visual_types (GdkVisualType **visual_types,
-			gint           *count)
+_gdk_screen_x11_query_visual_types (GdkScreen *screen,
+				    GdkVisualType **visual_types,
+				    gint           *count)
 {
-  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (gdk_screen_get_default ());
+  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
   
   *count = screen_x11->navailable_types;
   *visual_types = screen_x11->available_types;
 }
 
-/**
- * gdk_screen_list_visuals:
- * @screen: the relevant #GdkScreen.
- *  
- * Lists the available visuals for the specified @screen.
- * A visual describes a hardware image data format.
- * For example, a visual might support 24-bit color, or 8-bit color,
- * and might expect pixels to be in a certain format.
- *
- * Call g_list_free() on the return value when you're finished with it.
- * 
- * Return value: (transfer container) (element-type GdkVisual):
- *     a list of visuals; the list must be freed, but not its contents
- *
- * Since: 2.2
- **/
 GList *
-gdk_screen_list_visuals (GdkScreen *screen)
+_gdk_screen_x11_list_visuals (GdkScreen *screen)
 {
   GList *list;
   GdkScreenX11 *screen_x11;



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