diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-03-08 00:59:38 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-03-08 00:59:38 +0000 |
commit | 2395ed082603df688b4cb06ac8c51a44148ff414 (patch) | |
tree | 3f4439cbbd35f3f48d4e3870d5198d1ffce874f8 /gtk/gtkpreview.c | |
parent | de1262dcc1693e42e47c5fe6d84e570cdc831552 (diff) | |
download | gdk-pixbuf-2395ed082603df688b4cb06ac8c51a44148ff414.tar.gz |
Added a new function, gtk_preview_reset(), that can be used (under highly
Sat Mar 7 18:46:57 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkpreview.[ch]: Added a new function, gtk_preview_reset(),
that can be used (under highly controlled circumstances),
to change the properties of the preview colormap after
a preview has already been created and destroyed.
Diffstat (limited to 'gtk/gtkpreview.c')
-rw-r--r-- | gtk/gtkpreview.c | 87 |
1 files changed, 79 insertions, 8 deletions
diff --git a/gtk/gtkpreview.c b/gtk/gtkpreview.c index 34e1b31af..5c89808b3 100644 --- a/gtk/gtkpreview.c +++ b/gtk/gtkpreview.c @@ -205,6 +205,76 @@ gtk_preview_class_init (GtkPreviewClass *klass) gtk_preview_dither_init (klass); } +void +gtk_preview_reset (void) +{ + GtkPreviewInfo *info; + + if (!preview_class || !preview_info) + return; + + info = &preview_class->info; + + gtk_preview_uninit(); + + if (info->color_pixels) + { + gdk_colors_free (info->cmap, + info->color_pixels, + info->nred_shades * + info->ngreen_shades * + info->nblue_shades, + 0); + + gdk_colors_free (info->cmap, + info->gray_pixels, + info->ngray_shades, 0); + + g_free (info->color_pixels); + g_free (info->gray_pixels); + } + + if (info->reserved_pixels) + { + gdk_colors_free (info->cmap, + info->reserved_pixels, + info->nreserved, 0); + g_free (info->reserved_pixels); + } + + if (info->cmap && info->cmap_alloced) + gdk_colormap_unref (info->cmap); + + if (info->lookup_red) + { + g_free (info->lookup_red); + g_free (info->lookup_green); + g_free (info->lookup_blue); + } + + if (info->dither_matrix) + { + int i, j; + + for (i= 0 ; i < 8 ; i++) + { + for (j = 0; j < 8 ; j++) + g_free (info->dither_matrix[i][j]); + g_free (info->dither_matrix[i]); + } + g_free (info->dither_matrix); + g_free (info->dither_red); + g_free (info->dither_green); + g_free (info->dither_blue); + } + + preview_class->info = *preview_info; + + gtk_preview_get_visuals (preview_class); + gtk_preview_get_cmaps (preview_class); + gtk_preview_dither_init (preview_class); +} + static void gtk_preview_init (GtkPreview *preview) { @@ -222,6 +292,8 @@ gtk_preview_uninit () GtkPreviewProp *prop; GdkAtom property; + /* FIXME: need to grab the server here to prevent a race condition */ + if (preview_class && !install_cmap && preview_class->info.visual && (preview_class->info.visual->type != GDK_VISUAL_TRUE_COLOR) && (preview_class->info.visual->type != GDK_VISUAL_DIRECT_COLOR)) @@ -557,8 +629,6 @@ gtk_preview_set_expand (GtkPreview *preview, void gtk_preview_set_gamma (double _gamma) { - g_return_if_fail (preview_class == NULL); - if (!preview_info) { preview_info = g_new0 (GtkPreviewInfo, 1); @@ -577,8 +647,6 @@ gtk_preview_set_color_cube (guint nred_shades, guint nblue_shades, guint ngray_shades) { - g_return_if_fail (preview_class == NULL); - if (!preview_info) { preview_info = g_new0 (GtkPreviewInfo, 1); @@ -594,8 +662,6 @@ gtk_preview_set_color_cube (guint nred_shades, void gtk_preview_set_install_cmap (gint _install_cmap) { - /* g_return_if_fail (preview_class == NULL); */ - install_cmap = _install_cmap; } @@ -891,8 +957,10 @@ gtk_preview_get_cmaps (GtkPreviewClass *klass) if (klass->info.visual == gdk_visual_get_system ()) klass->info.cmap = gdk_colormap_get_system (); else - klass->info.cmap = gdk_colormap_new (klass->info.visual, FALSE); - klass->info.cmap_alloced = TRUE; + { + klass->info.cmap = gdk_colormap_new (klass->info.visual, FALSE); + klass->info.cmap_alloced = TRUE; + } klass->info.nred_shades = 0; klass->info.ngreen_shades = 0; @@ -1245,6 +1313,7 @@ gtk_create_8_bit (GtkPreviewClass *klass) pixels[i] = color.pixel; } + pixels = klass->info.gray_pixels; for (i = 0; i < (int) klass->info.ngray_shades; i++) @@ -1431,6 +1500,8 @@ gtk_get_preview_prop (guint *nred, GtkPreviewProp *prop; GdkAtom property; + /* FIXME: need to grab the server here to prevent a race condition */ + property = gdk_atom_intern ("GTK_PREVIEW_INFO", FALSE); if (gdk_property_get (NULL, property, property, |