From 74295aeddffbeb40b9ea138b071f736f8ae0bcbb Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Fri, 26 Apr 2002 19:45:22 +0000 Subject: [PATCH] This commit fixes binary compatibility, which I broke with my recent cell Fri Apr 26 21:46:42 2002 Kristian Rietveld This commit fixes binary compatibility, which I broke with my recent cell renderer commits :/. * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the cell_background field and use this as object data. This way we keep the field private and dont break ABI. * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and stock_detail from _GtkCellRendererPixbuf * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo with above mentioned fields. And update everything. --- ChangeLog | 17 +++++++++ ChangeLog.pre-2-10 | 17 +++++++++ ChangeLog.pre-2-2 | 17 +++++++++ ChangeLog.pre-2-4 | 17 +++++++++ ChangeLog.pre-2-6 | 17 +++++++++ ChangeLog.pre-2-8 | 17 +++++++++ gtk/gtkcellrenderer.c | 34 +++++++++++++----- gtk/gtkcellrenderer.h | 3 -- gtk/gtkcellrendererpixbuf.c | 71 ++++++++++++++++++++++++------------- gtk/gtkcellrendererpixbuf.h | 4 --- 10 files changed, 174 insertions(+), 40 deletions(-) diff --git a/ChangeLog b/ChangeLog index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index bd28c20ed3..4838e9190d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,20 @@ +Fri Apr 26 21:46:42 2002 Kristian Rietveld + + This commit fixes binary compatibility, which I broke with my + recent cell renderer commits :/. + + * gtk/gtkcellrenderer.h: move cell_background out of _GtkCellRenderer + + * gtk/gtkcellrenderer.c: create GtkCellRendererInfo, with the + cell_background field and use this as object data. This way we keep + the field private and dont break ABI. + + * gtk/gtkcellrendererpixbuf.h: remove stock_id, stock_size and + stock_detail from _GtkCellRendererPixbuf + + * gtk/gtkcellrendererpixbuf.c: create a GtkCellRendererPixbufInfo + with above mentioned fields. And update everything. + Fri Apr 26 21:42:02 2002 Kristian Rietveld * gdk/x11/gdkdrawable-x11.h: include X11/Xlib.h, fixes the build diff --git a/gtk/gtkcellrenderer.c b/gtk/gtkcellrenderer.c index 6327da9eb3..34dd331a52 100644 --- a/gtk/gtkcellrenderer.c +++ b/gtk/gtkcellrenderer.c @@ -51,6 +51,13 @@ enum { PROP_CELL_BACKGROUND_SET }; +#define CELLINFO_KEY "gtk-cell-renderer-info" + +typedef struct _GtkCellRendererInfo GtkCellRendererInfo; +struct _GtkCellRendererInfo +{ + GdkColor cell_background; +}; GtkType gtk_cell_renderer_get_type (void) @@ -81,6 +88,8 @@ gtk_cell_renderer_get_type (void) static void gtk_cell_renderer_init (GtkCellRenderer *cell) { + GtkCellRendererInfo *cellinfo; + cell->mode = GTK_CELL_RENDERER_MODE_INERT; cell->visible = TRUE; cell->width = -1; @@ -89,6 +98,9 @@ gtk_cell_renderer_init (GtkCellRenderer *cell) cell->yalign = 0.5; cell->xpad = 0; cell->ypad = 0; + + cellinfo = g_new0 (GtkCellRendererInfo, 1); + g_object_set_data_full (G_OBJECT (cell), CELLINFO_KEY, cellinfo, g_free); } static void @@ -237,6 +249,7 @@ gtk_cell_renderer_get_property (GObject *object, GParamSpec *pspec) { GtkCellRenderer *cell = GTK_CELL_RENDERER (object); + GtkCellRendererInfo *cellinfo = g_object_get_data (object, CELLINFO_KEY); switch (param_id) { @@ -274,9 +287,9 @@ gtk_cell_renderer_get_property (GObject *object, { GdkColor color; - color.red = cell->cell_background.red; - color.green = cell->cell_background.green; - color.blue = cell->cell_background.blue; + color.red = cellinfo->cell_background.red; + color.green = cellinfo->cell_background.green; + color.blue = cellinfo->cell_background.blue; g_value_set_boxed (value, &color); } @@ -362,6 +375,8 @@ static void set_cell_bg_color (GtkCellRenderer *cell, GdkColor *color) { + GtkCellRendererInfo *cellinfo = g_object_get_data (G_OBJECT (cell), CELLINFO_KEY); + if (color) { if (!cell->cell_background_set) @@ -370,9 +385,9 @@ set_cell_bg_color (GtkCellRenderer *cell, g_object_notify (G_OBJECT (cell), "cell_background_set"); } - cell->cell_background.red = color->red; - cell->cell_background.green = color->green; - cell->cell_background.blue = color->blue; + cellinfo->cell_background.red = color->red; + cellinfo->cell_background.green = color->green; + cellinfo->cell_background.blue = color->blue; } else { @@ -459,6 +474,7 @@ gtk_cell_renderer_render (GtkCellRenderer *cell, GtkCellRendererState flags) { gboolean selected = FALSE; + GtkCellRendererInfo *cellinfo = g_object_get_data (G_OBJECT (cell), CELLINFO_KEY); g_return_if_fail (GTK_IS_CELL_RENDERER (cell)); g_return_if_fail (GTK_CELL_RENDERER_GET_CLASS (cell)->render != NULL); @@ -470,9 +486,9 @@ gtk_cell_renderer_render (GtkCellRenderer *cell, GdkColor color; GdkGC *gc; - color.red = cell->cell_background.red; - color.green = cell->cell_background.green; - color.blue = cell->cell_background.blue; + color.red = cellinfo->cell_background.red; + color.green = cellinfo->cell_background.green; + color.blue = cellinfo->cell_background.blue; gc = gdk_gc_new (window); gdk_gc_set_rgb_fg_color (gc, &color); diff --git a/gtk/gtkcellrenderer.h b/gtk/gtkcellrenderer.h index 16e9ca97a5..87a8f9be9c 100644 --- a/gtk/gtkcellrenderer.h +++ b/gtk/gtkcellrenderer.h @@ -69,10 +69,7 @@ struct _GtkCellRenderer guint visible : 1; guint is_expander : 1; guint is_expanded : 1; - guint cell_background_set : 1; - - GdkColor cell_background; }; struct _GtkCellRendererClass diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c index 4db396c15e..e2d840f594 100644 --- a/gtk/gtkcellrendererpixbuf.c +++ b/gtk/gtkcellrendererpixbuf.c @@ -62,6 +62,15 @@ enum { static gpointer parent_class; +#define CELLINFO_KEY "gtk-cell-renderer-pixbuf-info" + +typedef struct _GtkCellRendererPixbufInfo GtkCellRendererPixbufInfo; +struct _GtkCellRendererPixbufInfo +{ + gchar *stock_id; + GtkIconSize stock_size; + gchar *stock_detail; +}; GtkType gtk_cell_renderer_pixbuf_get_type (void) @@ -92,7 +101,11 @@ gtk_cell_renderer_pixbuf_get_type (void) static void gtk_cell_renderer_pixbuf_init (GtkCellRendererPixbuf *cellpixbuf) { - cellpixbuf->stock_size = GTK_ICON_SIZE_MENU; + GtkCellRendererPixbufInfo *cellinfo; + + cellinfo = g_new0 (GtkCellRendererPixbufInfo, 1); + cellinfo->stock_size = GTK_ICON_SIZE_MENU; + g_object_set_data (G_OBJECT (cellpixbuf), CELLINFO_KEY, cellinfo); } static void @@ -169,15 +182,19 @@ static void gtk_cell_renderer_pixbuf_finalize (GObject *object) { GtkCellRendererPixbuf *cellpixbuf = GTK_CELL_RENDERER_PIXBUF (object); + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (object, CELLINFO_KEY); - if (cellpixbuf->pixbuf && cellpixbuf->stock_id) + if (cellpixbuf->pixbuf && cellinfo->stock_id) g_object_unref (cellpixbuf->pixbuf); - if (cellpixbuf->stock_id) - g_free (cellpixbuf->stock_id); + if (cellinfo->stock_id) + g_free (cellinfo->stock_id); - if (cellpixbuf->stock_detail) - g_free (cellpixbuf->stock_detail); + if (cellinfo->stock_detail) + g_free (cellinfo->stock_detail); + + g_free (cellinfo); + g_object_set_data (object, CELLINFO_KEY, NULL); (* G_OBJECT_CLASS (parent_class)->finalize) (object); } @@ -189,6 +206,7 @@ gtk_cell_renderer_pixbuf_get_property (GObject *object, GParamSpec *pspec) { GtkCellRendererPixbuf *cellpixbuf = GTK_CELL_RENDERER_PIXBUF (object); + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (object, CELLINFO_KEY); switch (param_id) { @@ -205,13 +223,13 @@ gtk_cell_renderer_pixbuf_get_property (GObject *object, cellpixbuf->pixbuf_expander_closed ? G_OBJECT (cellpixbuf->pixbuf_expander_closed) : NULL); break; case PROP_STOCK_ID: - g_value_set_string (value, cellpixbuf->stock_id); + g_value_set_string (value, cellinfo->stock_id); break; case PROP_STOCK_SIZE: - g_value_set_enum (value, cellpixbuf->stock_size); + g_value_set_enum (value, cellinfo->stock_size); break; case PROP_STOCK_DETAIL: - g_value_set_string (value, cellpixbuf->stock_detail); + g_value_set_string (value, cellinfo->stock_detail); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); @@ -228,6 +246,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object, { GdkPixbuf *pixbuf; GtkCellRendererPixbuf *cellpixbuf = GTK_CELL_RENDERER_PIXBUF (object); + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (object, CELLINFO_KEY); switch (param_id) { @@ -256,19 +275,19 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object, cellpixbuf->pixbuf_expander_closed = pixbuf; break; case PROP_STOCK_ID: - if (cellpixbuf->stock_id) - g_free (cellpixbuf->stock_id); - cellpixbuf->stock_id = g_strdup (g_value_get_string (value)); + if (cellinfo->stock_id) + g_free (cellinfo->stock_id); + cellinfo->stock_id = g_strdup (g_value_get_string (value)); g_object_notify (G_OBJECT (object), "stock_id"); break; case PROP_STOCK_SIZE: - cellpixbuf->stock_size = g_value_get_enum (value); + cellinfo->stock_size = g_value_get_enum (value); g_object_notify (G_OBJECT (object), "stock_size"); break; case PROP_STOCK_DETAIL: - if (cellpixbuf->stock_detail) - g_free (cellpixbuf->stock_detail); - cellpixbuf->stock_detail = g_strdup (g_value_get_string (value)); + if (cellinfo->stock_detail) + g_free (cellinfo->stock_detail); + cellinfo->stock_detail = g_strdup (g_value_get_string (value)); g_object_notify (G_OBJECT (object), "stock_detail"); break; default: @@ -276,7 +295,7 @@ gtk_cell_renderer_pixbuf_set_property (GObject *object, break; } - if (cellpixbuf->pixbuf && cellpixbuf->stock_id) + if (cellpixbuf->pixbuf && cellinfo->stock_id) { g_object_unref (cellpixbuf->pixbuf); cellpixbuf->pixbuf = NULL; @@ -306,13 +325,15 @@ static void gtk_cell_renderer_pixbuf_create_stock_pixbuf (GtkCellRendererPixbuf *cellpixbuf, GtkWidget *widget) { + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (G_OBJECT (cellpixbuf), CELLINFO_KEY); + if (cellpixbuf->pixbuf) g_object_unref (G_OBJECT (cellpixbuf->pixbuf)); cellpixbuf->pixbuf = gtk_widget_render_icon (widget, - cellpixbuf->stock_id, - cellpixbuf->stock_size, - cellpixbuf->stock_detail); + cellinfo->stock_id, + cellinfo->stock_size, + cellinfo->stock_detail); } static void @@ -325,12 +346,13 @@ gtk_cell_renderer_pixbuf_get_size (GtkCellRenderer *cell, gint *height) { GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell; + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (G_OBJECT (cell), CELLINFO_KEY); gint pixbuf_width = 0; gint pixbuf_height = 0; gint calc_width; gint calc_height; - if (!cellpixbuf->pixbuf && cellpixbuf->stock_id) + if (!cellpixbuf->pixbuf && cellinfo->stock_id) gtk_cell_renderer_pixbuf_create_stock_pixbuf (cellpixbuf, widget); if (cellpixbuf->pixbuf) @@ -387,6 +409,7 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell, { GtkCellRendererPixbuf *cellpixbuf = (GtkCellRendererPixbuf *) cell; + GtkCellRendererPixbufInfo *cellinfo = g_object_get_data (G_OBJECT (cell), CELLINFO_KEY); GdkPixbuf *pixbuf; GdkRectangle pix_rect; GdkRectangle draw_rect; @@ -403,9 +426,9 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell, pixbuf = cellpixbuf->pixbuf_expander_closed; } - if (!pixbuf && !cellpixbuf->stock_id) + if (!pixbuf && !cellinfo->stock_id) return; - else if (!pixbuf && cellpixbuf->stock_id) + else if (!pixbuf && cellinfo->stock_id) stock_pixbuf = TRUE; gtk_cell_renderer_pixbuf_get_size (cell, widget, cell_area, @@ -421,7 +444,7 @@ gtk_cell_renderer_pixbuf_render (GtkCellRenderer *cell, pix_rect.y += cell_area->y; pix_rect.width -= cell->xpad * 2; pix_rect.height -= cell->ypad * 2; - + if (gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect)) gdk_pixbuf_render_to_drawable_alpha (pixbuf, window, diff --git a/gtk/gtkcellrendererpixbuf.h b/gtk/gtkcellrendererpixbuf.h index d41aae9002..86d32fff02 100644 --- a/gtk/gtkcellrendererpixbuf.h +++ b/gtk/gtkcellrendererpixbuf.h @@ -45,10 +45,6 @@ struct _GtkCellRendererPixbuf GdkPixbuf *pixbuf; GdkPixbuf *pixbuf_expander_open; GdkPixbuf *pixbuf_expander_closed; - - gchar *stock_id; - GtkIconSize stock_size; - gchar *stock_detail; }; struct _GtkCellRendererPixbufClass