From 0225506c43017cc46d91ae66f2b0510847695a06 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Fri, 14 Mar 2003 15:08:10 +0000 Subject: [PATCH] let GimpColorArea optionally draw a thin border around itself. 2003-03-14 Sven Neumann * libgimpwidgets/gimpcolorarea.[ch]: let GimpColorArea optionally draw a thin border around itself. * app/widgets/gimpitemfactory.c (gimp_item_factory_set_color): use a GimpColorArea instead of a deprecated GtkPreview. --- ChangeLog | 8 ++ app/widgets/gimpitemfactory.c | 119 +++--------------- devel-docs/ChangeLog | 5 + .../libgimpwidgets-sections.txt | 1 + .../libgimpwidgets/tmpl/gimpcolorarea.sgml | 9 ++ libgimpwidgets/gimpcolorarea.c | 28 +++++ libgimpwidgets/gimpcolorarea.h | 28 +++-- 7 files changed, 84 insertions(+), 114 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf9b31754a..3992735980 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-03-14 Sven Neumann + + * libgimpwidgets/gimpcolorarea.[ch]: let GimpColorArea optionally + draw a thin border around itself. + + * app/widgets/gimpitemfactory.c (gimp_item_factory_set_color): use + a GimpColorArea instead of a deprecated GtkPreview. + 2003-03-14 Sven Neumann * app/tools/gimpcurvestool.[ch]: some cleanup to event handling diff --git a/app/widgets/gimpitemfactory.c b/app/widgets/gimpitemfactory.c index c243ffaf80..250a7210e2 100644 --- a/app/widgets/gimpitemfactory.c +++ b/app/widgets/gimpitemfactory.c @@ -20,11 +20,6 @@ #include "string.h" -#ifdef __GNUC__ -#warning GTK_DISABLE_DEPRECATED -#endif -#undef GTK_DISABLE_DEPRECATED - #include #include @@ -45,6 +40,10 @@ #include "libgimp/gimpintl.h" +#define COLOR_BOX_WIDTH 16 +#define COLOR_BOX_HEIGHT 16 + + /* local function prototypes */ static void gimp_item_factory_class_init (GimpItemFactoryClass *klass); @@ -459,8 +458,8 @@ gimp_item_factory_set_color (GtkItemFactory *factory, gboolean set_label) { GtkWidget *widget; - GtkWidget *preview = NULL; - GtkWidget *label = NULL; + GtkWidget *area = NULL; + GtkWidget *label = NULL; g_return_if_fail (GTK_IS_ITEM_FACTORY (factory)); g_return_if_fail (path != NULL); @@ -476,13 +475,10 @@ gimp_item_factory_set_color (GtkItemFactory *factory, return; } -#define COLOR_BOX_WIDTH 16 -#define COLOR_BOX_HEIGHT 16 - if (GTK_IS_HBOX (GTK_BIN (widget)->child)) { - preview = g_object_get_data (G_OBJECT (GTK_BIN (widget)->child), - "preview"); + area = g_object_get_data (G_OBJECT (GTK_BIN (widget)->child), + "color_area"); label = g_object_get_data (G_OBJECT (GTK_BIN (widget)->child), "label"); } @@ -500,100 +496,24 @@ gimp_item_factory_set_color (GtkItemFactory *factory, gtk_container_add (GTK_CONTAINER (widget), hbox); gtk_widget_show (hbox); - preview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (preview), - COLOR_BOX_WIDTH, COLOR_BOX_HEIGHT); - gtk_box_pack_start (GTK_BOX (hbox), preview, FALSE, FALSE, 0); - gtk_widget_show (preview); + area = gimp_color_area_new (color, GIMP_COLOR_AREA_FLAT, 0); + gimp_color_area_set_draw_border (GIMP_COLOR_AREA (area), TRUE); + + gtk_widget_set_size_request (area, COLOR_BOX_WIDTH, COLOR_BOX_HEIGHT); + gtk_box_pack_start (GTK_BOX (hbox), area, FALSE, FALSE, 0); + gtk_widget_show (area); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); gtk_widget_show (label); g_object_unref (label); - g_object_set_data (G_OBJECT (hbox), "preview", preview); - g_object_set_data (G_OBJECT (hbox), "label", label); + g_object_set_data (G_OBJECT (hbox), "color_area", area); + g_object_set_data (G_OBJECT (hbox), "label", label); } - if (preview) - { - guchar rows[3][COLOR_BOX_WIDTH * 3]; - gint x, y; - gint r0, g0, b0; - gint r1, g1, b1; - guchar *p0, *p1, *p2; - - /* Fill rows */ - - r0 = (GIMP_CHECK_DARK + (color->r - GIMP_CHECK_DARK) * color->a) * 255.0; - r1 = (GIMP_CHECK_LIGHT + (color->r - GIMP_CHECK_LIGHT) * color->a) * 255.0; - - g0 = (GIMP_CHECK_DARK + (color->g - GIMP_CHECK_DARK) * color->a) * 255.0; - g1 = (GIMP_CHECK_LIGHT + (color->g - GIMP_CHECK_LIGHT) * color->a) * 255.0; - - b0 = (GIMP_CHECK_DARK + (color->b - GIMP_CHECK_DARK) * color->a) * 255.0; - b1 = (GIMP_CHECK_LIGHT + (color->b - GIMP_CHECK_LIGHT) * color->a) * 255.0; - - p0 = rows[0]; - p1 = rows[1]; - p2 = rows[2]; - - for (x = 0; x < COLOR_BOX_WIDTH; x++) - { - if ((x == 0) || (x == (COLOR_BOX_WIDTH - 1))) - { - *p0++ = 0; - *p0++ = 0; - *p0++ = 0; - - *p1++ = 0; - *p1++ = 0; - *p1++ = 0; - } - else if ((x / GIMP_CHECK_SIZE) & 1) - { - *p0++ = r1; - *p0++ = g1; - *p0++ = b1; - - *p1++ = r0; - *p1++ = g0; - *p1++ = b0; - } - else - { - *p0++ = r0; - *p0++ = g0; - *p0++ = b0; - - *p1++ = r1; - *p1++ = g1; - *p1++ = b1; - } - - *p2++ = 0; - *p2++ = 0; - *p2++ = 0; - } - - /* Fill preview */ - - gtk_preview_draw_row (GTK_PREVIEW (preview), rows[2], - 0, 0, COLOR_BOX_WIDTH); - - for (y = 1; y < (COLOR_BOX_HEIGHT - 1); y++) - if ((y / GIMP_CHECK_SIZE) & 1) - gtk_preview_draw_row (GTK_PREVIEW (preview), rows[1], - 0, y, COLOR_BOX_WIDTH); - else - gtk_preview_draw_row (GTK_PREVIEW (preview), rows[0], - 0, y, COLOR_BOX_WIDTH); - - gtk_preview_draw_row (GTK_PREVIEW (preview), rows[2], - 0, y, COLOR_BOX_WIDTH); - - gtk_widget_queue_draw (preview); - } + if (area) + gimp_color_area_set_color (GIMP_COLOR_AREA (area), color); if (label && set_label) { @@ -606,9 +526,6 @@ gimp_item_factory_set_color (GtkItemFactory *factory, g_free (str); } - -#undef COLOR_BOX_WIDTH -#undef COLOR_BOX_HEIGHT } void diff --git a/devel-docs/ChangeLog b/devel-docs/ChangeLog index c63b7a79bb..785cc57db7 100644 --- a/devel-docs/ChangeLog +++ b/devel-docs/ChangeLog @@ -1,3 +1,8 @@ +2003-03-14 Sven Neumann + + * libgimpwidgets/libgimpwidgets-sections.txt + * tmpl/gimpcolorarea.sgml: updated. + 2003-03-06 Sven Neumann * libgimpwidgets/Makefile.am diff --git a/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt b/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt index 6d35ac75c0..42e0d945fc 100644 --- a/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt +++ b/devel-docs/libgimpwidgets/libgimpwidgets-sections.txt @@ -27,6 +27,7 @@ gimp_color_area_set_color gimp_color_area_get_color gimp_color_area_has_alpha gimp_color_area_set_type +gimp_color_area_set_draw_border GIMP_COLOR_AREA GIMP_IS_COLOR_AREA diff --git a/devel-docs/libgimpwidgets/tmpl/gimpcolorarea.sgml b/devel-docs/libgimpwidgets/tmpl/gimpcolorarea.sgml index 743c6be059..0c392fff63 100644 --- a/devel-docs/libgimpwidgets/tmpl/gimpcolorarea.sgml +++ b/devel-docs/libgimpwidgets/tmpl/gimpcolorarea.sgml @@ -85,3 +85,12 @@ GimpColorArea @gca: + + + + + +@area: +@draw_border: + + diff --git a/libgimpwidgets/gimpcolorarea.c b/libgimpwidgets/gimpcolorarea.c index 7ace66ecb3..2bc2e633a8 100644 --- a/libgimpwidgets/gimpcolorarea.c +++ b/libgimpwidgets/gimpcolorarea.c @@ -151,6 +151,7 @@ gimp_color_area_init (GimpColorArea *area) area->type = GIMP_COLOR_AREA_FLAT; gimp_rgba_set (&area->color, 0.0, 0.0, 0.0, 1.0); + area->draw_border = FALSE; area->needs_render = TRUE; } @@ -227,6 +228,13 @@ gimp_color_area_expose (GtkWidget *widget, event->area.x, event->area.y); + if (area->draw_border) + gdk_draw_rectangle (widget->window, + widget->style->fg_gc[widget->state], + FALSE, + 0, 0, + area->width - 1, area->height - 1); + return FALSE; } @@ -355,6 +363,26 @@ gimp_color_area_set_type (GimpColorArea *area, gtk_widget_queue_draw (GTK_WIDGET (area)); } +/** + * gimp_color_area_set_draw_border: + * @area: Pointer to a #GimpColorArea. + * @draw_border: whether to draw a border or not + * + * The @area can draw a thin border in the foreground color around + * itself. This function allows to toggle this behaviour on and + * off. The default is not draw a border. + **/ +void +gimp_color_area_set_draw_border (GimpColorArea *area, + gboolean draw_border) +{ + g_return_if_fail (GIMP_IS_COLOR_AREA (area)); + + area->draw_border = draw_border ? TRUE : FALSE; + + gtk_widget_queue_draw (GTK_WIDGET (area)); +} + static void gimp_color_area_render (GimpColorArea *area) { diff --git a/libgimpwidgets/gimpcolorarea.h b/libgimpwidgets/gimpcolorarea.h index f50b3f8ade..dedb4fefb7 100644 --- a/libgimpwidgets/gimpcolorarea.h +++ b/libgimpwidgets/gimpcolorarea.h @@ -55,8 +55,8 @@ struct _GimpColorArea GimpColorAreaType type; GimpRGB color; - - gboolean needs_render; + guint draw_border : 1; + guint needs_render : 1; }; struct _GimpColorAreaClass @@ -67,19 +67,21 @@ struct _GimpColorAreaClass }; -GType gimp_color_area_get_type (void) G_GNUC_CONST; +GType gimp_color_area_get_type (void) G_GNUC_CONST; -GtkWidget * gimp_color_area_new (const GimpRGB *color, - GimpColorAreaType type, - GdkModifierType drag_mask); +GtkWidget * gimp_color_area_new (const GimpRGB *color, + GimpColorAreaType type, + GdkModifierType drag_mask); -void gimp_color_area_set_color (GimpColorArea *area, - const GimpRGB *color); -void gimp_color_area_get_color (GimpColorArea *area, - GimpRGB *color); -gboolean gimp_color_area_has_alpha (GimpColorArea *area); -void gimp_color_area_set_type (GimpColorArea *area, - GimpColorAreaType type); +void gimp_color_area_set_color (GimpColorArea *area, + const GimpRGB *color); +void gimp_color_area_get_color (GimpColorArea *area, + GimpRGB *color); +gboolean gimp_color_area_has_alpha (GimpColorArea *area); +void gimp_color_area_set_type (GimpColorArea *area, + GimpColorAreaType type); +void gimp_color_area_set_draw_border (GimpColorArea *area, + gboolean draw_border); G_END_DECLS