diff options
author | Benjamin Otte <otte@redhat.com> | 2010-08-29 16:40:48 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-09-26 15:11:33 +0200 |
commit | 47ee99619806ccee5dd3d1d709e1f2032ea92442 (patch) | |
tree | 97f4624919396863fa0a59b8933dc3d3dd9d3b5c /gdk/x11 | |
parent | 571e749d60aaef991dcf8cad50d1cfeb4f9fdd12 (diff) | |
download | gtk+-47ee99619806ccee5dd3d1d709e1f2032ea92442.tar.gz |
x11: Use G_DEFINE_TYPE() to define GdkVisual
Also add a priv pointer to GdkVisual and use it for the GdkVisualPrivate
structure. Then Make GdkVisualPrivate actually private to
gdkvisual-x11.c and make other callers use proper function calls to
access it.
Diffstat (limited to 'gdk/x11')
-rw-r--r-- | gdk/x11/gdkcolor-x11.c | 2 | ||||
-rw-r--r-- | gdk/x11/gdkprivate-x11.h | 8 | ||||
-rw-r--r-- | gdk/x11/gdkscreen-x11.h | 4 | ||||
-rw-r--r-- | gdk/x11/gdkvisual-x11.c | 173 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 4 | ||||
-rw-r--r-- | gdk/x11/gdkx.h | 4 |
6 files changed, 90 insertions, 105 deletions
diff --git a/gdk/x11/gdkcolor-x11.c b/gdk/x11/gdkcolor-x11.c index bbfae0d971..dba39d9e8d 100644 --- a/gdk/x11/gdkcolor-x11.c +++ b/gdk/x11/gdkcolor-x11.c @@ -157,7 +157,7 @@ gdk_colormap_new (GdkVisual *visual, colormap->visual = visual; private->screen = gdk_visual_get_screen (visual); - xvisual = ((GdkVisualPrivate*) visual)->xvisual; + xvisual = gdk_x11_visual_get_xvisual (visual); xdisplay = GDK_SCREEN_XDISPLAY (private->screen); xrootwin = GDK_SCREEN_XROOTWIN (private->screen); diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h index f04d5d5b94..2e2edd4d9e 100644 --- a/gdk/x11/gdkprivate-x11.h +++ b/gdk/x11/gdkprivate-x11.h @@ -43,7 +43,6 @@ #include "config.h" typedef struct _GdkCursorPrivate GdkCursorPrivate; -typedef struct _GdkVisualPrivate GdkVisualPrivate; struct _GdkCursorPrivate { @@ -54,13 +53,6 @@ struct _GdkCursorPrivate guint serial; }; -struct _GdkVisualPrivate -{ - GdkVisual visual; - Visual *xvisual; - GdkScreen *screen; -}; - void _gdk_x11_error_handler_push (void); void _gdk_x11_error_handler_pop (void); diff --git a/gdk/x11/gdkscreen-x11.h b/gdk/x11/gdkscreen-x11.h index 98cca0e2a6..81662e2390 100644 --- a/gdk/x11/gdkscreen-x11.h +++ b/gdk/x11/gdkscreen-x11.h @@ -70,8 +70,8 @@ struct _GdkScreenX11 guint need_refetch_wm_name : 1; /* Visual Part */ - GdkVisualPrivate *system_visual; - GdkVisualPrivate **visuals; + GdkVisual *system_visual; + GdkVisual **visuals; gint nvisuals; gint available_depths[7]; gint navailable_depths; diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c index e984241824..051f19ad91 100644 --- a/gdk/x11/gdkvisual-x11.c +++ b/gdk/x11/gdkvisual-x11.c @@ -34,6 +34,11 @@ #include "gdkscreen-x11.h" #include "gdkinternals.h" +struct _GdkVisualPrivate +{ + Visual *xvisual; + GdkScreen *screen; +}; struct _GdkVisualClass { @@ -63,34 +68,23 @@ static const gchar *const visual_names[] = #endif /* G_ENABLE_DEBUG */ -GType -gdk_visual_get_type (void) +G_DEFINE_TYPE (GdkVisual, gdk_visual, G_TYPE_OBJECT) + +static void +gdk_visual_class_init (GdkVisualClass *visual_class) { - static GType object_type = 0; + GObjectClass *object_class = G_OBJECT_CLASS (visual_class); - if (!object_type) - { - const GTypeInfo object_info = - { - sizeof (GdkVisualClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) NULL, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GdkVisualPrivate), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL, - }; - - object_type = g_type_register_static (G_TYPE_OBJECT, - g_intern_static_string ("GdkVisual"), - &object_info, 0); - } - - return object_type; + g_type_class_add_private (object_class, sizeof (GdkVisualPrivate)); } +static void +gdk_visual_init (GdkVisual *visual) +{ + visual->priv = G_TYPE_INSTANCE_GET_PRIVATE (visual, + GDK_TYPE_VISUAL, + GdkVisualPrivate); +} void _gdk_visual_init (GdkScreen *screen) @@ -109,9 +103,9 @@ _gdk_visual_init (GdkScreen *screen) GdkScreenX11 *screen_x11; XVisualInfo *visual_list; XVisualInfo visual_template; - GdkVisualPrivate *temp_visual; + GdkVisual *temp_visual; Visual *default_xvisual; - GdkVisualPrivate **visuals; + GdkVisual **visuals; int nxvisuals; int nvisuals; int i, j; @@ -123,7 +117,7 @@ _gdk_visual_init (GdkScreen *screen) visual_template.screen = screen_x11->screen_num; visual_list = XGetVisualInfo (screen_x11->xdisplay, VisualScreenMask, &visual_template, &nxvisuals); - visuals = g_new (GdkVisualPrivate *, nxvisuals); + visuals = g_new (GdkVisual *, nxvisuals); for (i = 0; i < nxvisuals; i++) visuals[i] = g_object_new (GDK_TYPE_VISUAL, NULL); @@ -132,7 +126,7 @@ _gdk_visual_init (GdkScreen *screen) nvisuals = 0; for (i = 0; i < nxvisuals; i++) { - visuals[nvisuals]->screen = screen; + visuals[nvisuals]->priv->screen = screen; if (visual_list[i].depth >= 1) { @@ -143,64 +137,64 @@ _gdk_visual_init (GdkScreen *screen) #endif /* __cplusplus */ { case StaticGray: - visuals[nvisuals]->visual.type = GDK_VISUAL_STATIC_GRAY; + visuals[nvisuals]->type = GDK_VISUAL_STATIC_GRAY; break; case GrayScale: - visuals[nvisuals]->visual.type = GDK_VISUAL_GRAYSCALE; + visuals[nvisuals]->type = GDK_VISUAL_GRAYSCALE; break; case StaticColor: - visuals[nvisuals]->visual.type = GDK_VISUAL_STATIC_COLOR; + visuals[nvisuals]->type = GDK_VISUAL_STATIC_COLOR; break; case PseudoColor: - visuals[nvisuals]->visual.type = GDK_VISUAL_PSEUDO_COLOR; + visuals[nvisuals]->type = GDK_VISUAL_PSEUDO_COLOR; break; case TrueColor: - visuals[nvisuals]->visual.type = GDK_VISUAL_TRUE_COLOR; + visuals[nvisuals]->type = GDK_VISUAL_TRUE_COLOR; break; case DirectColor: - visuals[nvisuals]->visual.type = GDK_VISUAL_DIRECT_COLOR; + visuals[nvisuals]->type = GDK_VISUAL_DIRECT_COLOR; break; } - visuals[nvisuals]->visual.depth = visual_list[i].depth; - visuals[nvisuals]->visual.byte_order = + visuals[nvisuals]->depth = visual_list[i].depth; + visuals[nvisuals]->byte_order = (ImageByteOrder(screen_x11->xdisplay) == LSBFirst) ? GDK_LSB_FIRST : GDK_MSB_FIRST; - visuals[nvisuals]->visual.red_mask = visual_list[i].red_mask; - visuals[nvisuals]->visual.green_mask = visual_list[i].green_mask; - visuals[nvisuals]->visual.blue_mask = visual_list[i].blue_mask; - visuals[nvisuals]->visual.colormap_size = visual_list[i].colormap_size; - visuals[nvisuals]->visual.bits_per_rgb = visual_list[i].bits_per_rgb; - visuals[nvisuals]->xvisual = visual_list[i].visual; - - if ((visuals[nvisuals]->visual.type == GDK_VISUAL_TRUE_COLOR) || - (visuals[nvisuals]->visual.type == GDK_VISUAL_DIRECT_COLOR)) + visuals[nvisuals]->red_mask = visual_list[i].red_mask; + visuals[nvisuals]->green_mask = visual_list[i].green_mask; + visuals[nvisuals]->blue_mask = visual_list[i].blue_mask; + visuals[nvisuals]->colormap_size = visual_list[i].colormap_size; + visuals[nvisuals]->bits_per_rgb = visual_list[i].bits_per_rgb; + visuals[nvisuals]->priv->xvisual = visual_list[i].visual; + + if ((visuals[nvisuals]->type == GDK_VISUAL_TRUE_COLOR) || + (visuals[nvisuals]->type == GDK_VISUAL_DIRECT_COLOR)) { - gdk_visual_decompose_mask (visuals[nvisuals]->visual.red_mask, - &visuals[nvisuals]->visual.red_shift, - &visuals[nvisuals]->visual.red_prec); + gdk_visual_decompose_mask (visuals[nvisuals]->red_mask, + &visuals[nvisuals]->red_shift, + &visuals[nvisuals]->red_prec); - gdk_visual_decompose_mask (visuals[nvisuals]->visual.green_mask, - &visuals[nvisuals]->visual.green_shift, - &visuals[nvisuals]->visual.green_prec); + gdk_visual_decompose_mask (visuals[nvisuals]->green_mask, + &visuals[nvisuals]->green_shift, + &visuals[nvisuals]->green_prec); - gdk_visual_decompose_mask (visuals[nvisuals]->visual.blue_mask, - &visuals[nvisuals]->visual.blue_shift, - &visuals[nvisuals]->visual.blue_prec); + gdk_visual_decompose_mask (visuals[nvisuals]->blue_mask, + &visuals[nvisuals]->blue_shift, + &visuals[nvisuals]->blue_prec); } else { - visuals[nvisuals]->visual.red_mask = 0; - visuals[nvisuals]->visual.red_shift = 0; - visuals[nvisuals]->visual.red_prec = 0; + visuals[nvisuals]->red_mask = 0; + visuals[nvisuals]->red_shift = 0; + visuals[nvisuals]->red_prec = 0; - visuals[nvisuals]->visual.green_mask = 0; - visuals[nvisuals]->visual.green_shift = 0; - visuals[nvisuals]->visual.green_prec = 0; + visuals[nvisuals]->green_mask = 0; + visuals[nvisuals]->green_shift = 0; + visuals[nvisuals]->green_prec = 0; - visuals[nvisuals]->visual.blue_mask = 0; - visuals[nvisuals]->visual.blue_shift = 0; - visuals[nvisuals]->visual.blue_prec = 0; + visuals[nvisuals]->blue_mask = 0; + visuals[nvisuals]->blue_shift = 0; + visuals[nvisuals]->blue_prec = 0; } nvisuals += 1; @@ -214,27 +208,27 @@ _gdk_visual_init (GdkScreen *screen) { for (j = i+1; j < nvisuals; j++) { - if (visuals[j]->visual.depth >= visuals[i]->visual.depth) + if (visuals[j]->depth >= visuals[i]->depth) { - if ((visuals[j]->visual.depth == 8) && (visuals[i]->visual.depth == 8)) + if ((visuals[j]->depth == 8) && (visuals[i]->depth == 8)) { - if (visuals[j]->visual.type == GDK_VISUAL_PSEUDO_COLOR) + if (visuals[j]->type == GDK_VISUAL_PSEUDO_COLOR) { temp_visual = visuals[j]; visuals[j] = visuals[i]; visuals[i] = temp_visual; } - else if ((visuals[i]->visual.type != GDK_VISUAL_PSEUDO_COLOR) && - visuals[j]->visual.type > visuals[i]->visual.type) + else if ((visuals[i]->type != GDK_VISUAL_PSEUDO_COLOR) && + visuals[j]->type > visuals[i]->type) { temp_visual = visuals[j]; visuals[j] = visuals[i]; visuals[i] = temp_visual; } } - else if ((visuals[j]->visual.depth > visuals[i]->visual.depth) || - ((visuals[j]->visual.depth == visuals[i]->visual.depth) && - (visuals[j]->visual.type > visuals[i]->visual.type))) + else if ((visuals[j]->depth > visuals[i]->depth) || + ((visuals[j]->depth == visuals[i]->depth) && + (visuals[j]->type > visuals[i]->type))) { temp_visual = visuals[j]; visuals[j] = visuals[i]; @@ -246,17 +240,17 @@ _gdk_visual_init (GdkScreen *screen) for (i = 0; i < nvisuals; i++) { - if (default_xvisual->visualid == visuals[i]->xvisual->visualid) + if (default_xvisual->visualid == visuals[i]->priv->xvisual->visualid) screen_x11->system_visual = visuals[i]; /* For now, we only support 8888 ARGB for the "rgba visual". * Additional formats (like ABGR) could be added later if they * turn up. */ - if (visuals[i]->visual.depth == 32 && - (visuals[i]->visual.red_mask == 0xff0000 && - visuals[i]->visual.green_mask == 0x00ff00 && - visuals[i]->visual.blue_mask == 0x0000ff)) + if (visuals[i]->depth == 32 && + (visuals[i]->red_mask == 0xff0000 && + visuals[i]->green_mask == 0x00ff00 && + visuals[i]->blue_mask == 0x0000ff)) { screen_x11->rgba_visual = GDK_VISUAL (visuals[i]); } @@ -275,9 +269,9 @@ _gdk_visual_init (GdkScreen *screen) { for (j = 0; j < nvisuals; j++) { - if (visuals[j]->visual.depth == possible_depths[i]) + if (visuals[j]->depth == possible_depths[i]) { - screen_x11->available_depths[screen_x11->navailable_depths++] = visuals[j]->visual.depth; + screen_x11->available_depths[screen_x11->navailable_depths++] = visuals[j]->depth; break; } } @@ -291,9 +285,9 @@ _gdk_visual_init (GdkScreen *screen) { for (j = 0; j < nvisuals; j++) { - if (visuals[j]->visual.type == possible_types[i]) + if (visuals[j]->type == possible_types[i]) { - screen_x11->available_types[screen_x11->navailable_types++] = visuals[j]->visual.type; + screen_x11->available_types[screen_x11->navailable_types++] = visuals[j]->type; break; } } @@ -397,7 +391,7 @@ gdk_visual_get_best_with_depth (gint depth) return_val = NULL; for (i = 0; i < screen_x11->nvisuals; i++) - if (depth == screen_x11->visuals[i]->visual.depth) + if (depth == screen_x11->visuals[i]->depth) { return_val = (GdkVisual *) screen_x11->visuals[i]; break; @@ -426,7 +420,7 @@ gdk_visual_get_best_with_type (GdkVisualType visual_type) return_val = NULL; for (i = 0; i < screen_x11->nvisuals; i++) - if (visual_type == screen_x11->visuals[i]->visual.type) + if (visual_type == screen_x11->visuals[i]->type) { return_val = (GdkVisual *) screen_x11->visuals[i]; break; @@ -455,8 +449,8 @@ gdk_visual_get_best_with_both (gint depth, return_val = NULL; for (i = 0; i < screen_x11->nvisuals; i++) - if ((depth == screen_x11->visuals[i]->visual.depth) && - (visual_type == screen_x11->visuals[i]->visual.type)) + if ((depth == screen_x11->visuals[i]->depth) && + (visual_type == screen_x11->visuals[i]->type)) { return_val = (GdkVisual *) screen_x11->visuals[i]; break; @@ -566,7 +560,7 @@ gdk_x11_screen_lookup_visual (GdkScreen *screen, screen_x11 = GDK_SCREEN_X11 (screen); for (i = 0; i < screen_x11->nvisuals; i++) - if (xvisualid == screen_x11->visuals[i]->xvisual->visualid) + if (xvisualid == screen_x11->visuals[i]->priv->xvisual->visualid) return (GdkVisual *) screen_x11->visuals[i]; return NULL; @@ -589,14 +583,13 @@ gdkx_visual_get (VisualID xvisualid) static void gdk_visual_add (GdkVisual *visual) { - GdkVisualPrivate *private = (GdkVisualPrivate *) visual; - GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (private->screen); + GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (visual->priv->screen); if (!screen_x11->visual_hash) screen_x11->visual_hash = g_hash_table_new ((GHashFunc) gdk_visual_hash, (GEqualFunc) gdk_visual_equal); - g_hash_table_insert (screen_x11->visual_hash, private->xvisual, visual); + g_hash_table_insert (screen_x11->visual_hash, visual->priv->xvisual, visual); } static void @@ -652,7 +645,7 @@ gdk_x11_visual_get_xvisual (GdkVisual *visual) { g_return_val_if_fail (visual != NULL, NULL); - return ((GdkVisualPrivate*) visual)->xvisual; + return visual->priv->xvisual; } /** @@ -670,5 +663,5 @@ gdk_visual_get_screen (GdkVisual *visual) { g_return_val_if_fail (GDK_IS_VISUAL (visual), NULL); - return ((GdkVisualPrivate*) visual)->screen; + return visual->priv->screen; } diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index fecaefc53f..820b3790b9 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -727,7 +727,7 @@ _gdk_window_impl_new (GdkWindow *window, xattributes_mask = 0; - xvisual = ((GdkVisualPrivate*) private->visual)->xvisual; + xvisual = gdk_x11_visual_get_xvisual (private->visual); if (attributes_mask & GDK_WA_NOREDIR) { @@ -762,7 +762,7 @@ _gdk_window_impl_new (GdkWindow *window, { class = InputOutput; - if ((((GdkVisualPrivate *)gdk_screen_get_system_visual (screen))->xvisual) == xvisual) + if ((gdk_screen_get_system_visual (screen)) == private->visual) { draw_impl->colormap = gdk_screen_get_system_colormap (screen); g_object_ref (draw_impl->colormap); diff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx.h index e08449e4d4..99094a6335 100644 --- a/gdk/x11/gdkx.h +++ b/gdk/x11/gdkx.h @@ -76,7 +76,6 @@ gint gdk_x11_get_default_screen (void); #define GDK_SCREEN_XDISPLAY(screen) (GDK_SCREEN_X11 (screen)->xdisplay) #define GDK_SCREEN_XSCREEN(screen) (GDK_SCREEN_X11 (screen)->xscreen) #define GDK_SCREEN_XNUMBER(screen) (GDK_SCREEN_X11 (screen)->screen_num) -#define GDK_VISUAL_XVISUAL(vis) (((GdkVisualPrivate *) vis)->xvisual) #define GDK_WINDOW_XWINDOW GDK_DRAWABLE_XID #else /* GDK_COMPILATION */ @@ -95,10 +94,11 @@ gint gdk_x11_get_default_screen (void); #define GDK_SCREEN_XDISPLAY(screen) (gdk_x11_display_get_xdisplay (gdk_screen_get_display (screen))) #define GDK_SCREEN_XSCREEN(screen) (gdk_x11_screen_get_xscreen (screen)) #define GDK_SCREEN_XNUMBER(screen) (gdk_x11_screen_get_screen_number (screen)) -#define GDK_VISUAL_XVISUAL(visual) (gdk_x11_visual_get_xvisual (visual)) #endif /* GDK_COMPILATION */ +#define GDK_VISUAL_XVISUAL(visual) (gdk_x11_visual_get_xvisual (visual)) + GdkVisual* gdk_x11_screen_lookup_visual (GdkScreen *screen, VisualID xvisualid); #ifndef GDK_MULTIHEAD_SAFE |