gimp r26312 - in branches/soc-2008-tagging: . app/widgets
- From: aurisj svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r26312 - in branches/soc-2008-tagging: . app/widgets
- Date: Sat, 26 Jul 2008 09:55:25 +0000 (UTC)
Author: aurisj
Date: Sat Jul 26 09:55:25 2008
New Revision: 26312
URL: http://svn.gnome.org/viewvc/gimp?rev=26312&view=rev
Log:
2008-07-26 Aurimas JuÅka <aurisj svn gnome org>
* app/widgets/gimpcombotagentry.[ch]: improved tag drawing in popup
list.
Modified:
branches/soc-2008-tagging/ChangeLog
branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c
branches/soc-2008-tagging/app/widgets/gimpcombotagentry.h
Modified: branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c (original)
+++ branches/soc-2008-tagging/app/widgets/gimpcombotagentry.c Sat Jul 26 09:55:25 2008
@@ -54,6 +54,7 @@
PangoContext *context;
PangoLayout *layout;
PopupTagData *tag_data;
+ PopupTagData *prelight;
gint tag_count;
} PopupData;
@@ -142,9 +143,6 @@
combo_entry = g_object_new (GIMP_TYPE_COMBO_TAG_ENTRY, NULL);
combo_entry->tag_entry = GTK_WIDGET (tag_entry);
- combo_entry->normal_item_attr = pango_attr_list_new ();
- pango_attr_list_insert (combo_entry->normal_item_attr,
- pango_attr_underline_new (PANGO_UNDERLINE_SINGLE));
gtk_widget_add_events (GTK_WIDGET (combo_entry),
GDK_BUTTON_PRESS_MASK);
@@ -270,17 +268,30 @@
gtk_alignment_set_padding (GTK_ALIGNMENT (combo_entry->alignment),
ymargin, ymargin, xmargin, xmargin + 16);
+ style = widget->style;
+ if (combo_entry->normal_item_attr)
+ {
+ pango_attr_list_unref (combo_entry->normal_item_attr);
+ }
+ combo_entry->normal_item_attr = pango_attr_list_new ();
+ color = style->text[GTK_STATE_NORMAL];
+ attribute = pango_attr_foreground_new (color.red, color.green, color.blue);
+ pango_attr_list_insert (combo_entry->normal_item_attr, attribute);
+ attribute = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
+ pango_attr_list_insert (combo_entry->normal_item_attr, attribute);
if (combo_entry->selected_item_attr)
{
pango_attr_list_unref (combo_entry->selected_item_attr);
}
combo_entry->selected_item_attr = pango_attr_list_copy (combo_entry->normal_item_attr);
- color = widget->style->text[GTK_STATE_SELECTED];
+ color = style->text[GTK_STATE_SELECTED];
attribute = pango_attr_foreground_new (color.red, color.green, color.blue);
pango_attr_list_insert (combo_entry->selected_item_attr, attribute);
- color = widget->style->bg[GTK_STATE_SELECTED];
+ color = style->base[GTK_STATE_SELECTED];
attribute = pango_attr_background_new (color.red, color.green, color.blue);
pango_attr_list_insert (combo_entry->selected_item_attr, attribute);
+
+ combo_entry->selected_item_color = style->base[GTK_STATE_SELECTED];
}
static gboolean
@@ -367,21 +378,20 @@
popup = gtk_window_new (GTK_WINDOW_POPUP);
combo_entry->popup = popup;
gtk_widget_add_events (GTK_WIDGET (popup),
- GDK_BUTTON_PRESS_MASK);
+ GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
gtk_window_set_screen (GTK_WINDOW (popup),
gtk_widget_get_screen (GTK_WIDGET (combo_entry)));
drawing_area = gtk_drawing_area_new ();
gtk_widget_add_events (GTK_WIDGET (drawing_area),
- GDK_BUTTON_PRESS_MASK);
+ GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
popup_data = g_malloc (sizeof (PopupData));
popup_data->combo_entry = combo_entry;
popup_data->drawing_area = drawing_area;
popup_data->context = gtk_widget_create_pango_context (GTK_WIDGET (popup));
popup_data->layout = pango_layout_new (popup_data->context);
-
- pango_layout_set_attributes (popup_data->layout, combo_entry->normal_item_attr);
+ popup_data->prelight = NULL;
current_tags = gimp_tag_entry_parse_tags (GIMP_TAG_ENTRY (combo_entry->tag_entry));
current_count = g_strv_length (current_tags);
@@ -470,7 +480,7 @@
gtk_grab_add (popup);
gtk_widget_grab_focus (combo_entry->tag_entry);
grab_status = gdk_pointer_grab (popup->window, TRUE,
- GDK_BUTTON_PRESS_MASK, NULL, NULL,
+ GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK, NULL, NULL,
GDK_CURRENT_TIME);
if (grab_status != GDK_GRAB_SUCCESS)
{
@@ -513,16 +523,16 @@
&popup_data->tag_data[i].bounds.height);
popup_data->tag_data[i].bounds.width /= PANGO_SCALE;
popup_data->tag_data[i].bounds.height /= PANGO_SCALE;
- if (popup_data->tag_data[i].bounds.width + x + GIMP_TAG_POPUP_MARGIN > width)
+ if (popup_data->tag_data[i].bounds.width + x + 6 +GIMP_TAG_POPUP_MARGIN > width)
{
x = GIMP_TAG_POPUP_MARGIN;
- y += line_height;
+ y += line_height + 8;
}
popup_data->tag_data[i].bounds.x = x;
popup_data->tag_data[i].bounds.y = y;
- x += popup_data->tag_data[i].bounds.width + space_width;
+ x += popup_data->tag_data[i].bounds.width + space_width + 6;
}
height = y + line_height + GIMP_TAG_POPUP_MARGIN;
@@ -534,6 +544,7 @@
GdkEventExpose *event,
PopupData *popup_data)
{
+ GdkGC *gc;
PangoRenderer *renderer;
gint i;
@@ -542,6 +553,11 @@
gdk_pango_renderer_set_drawable (GDK_PANGO_RENDERER (renderer),
widget->window);
+ gc = gdk_gc_new (GDK_DRAWABLE (widget->window));
+ gdk_gc_set_rgb_fg_color (gc, &popup_data->combo_entry->selected_item_color);
+ gdk_gc_set_line_attributes (gc, 5, GDK_LINE_SOLID, GDK_CAP_ROUND,
+ GDK_JOIN_ROUND);
+
for (i = 0; i < popup_data->tag_count; i++)
{
pango_layout_set_text (popup_data->layout,
@@ -557,9 +573,26 @@
popup_data->combo_entry->normal_item_attr);
}
+ if (popup_data->tag_data[i].selected)
+ {
+ gdk_draw_rectangle (widget->window, gc, FALSE,
+ popup_data->tag_data[i].bounds.x, popup_data->tag_data[i].bounds.y,
+ popup_data->tag_data[i].bounds.width, popup_data->tag_data[i].bounds.height);
+ }
pango_renderer_draw_layout (renderer, popup_data->layout,
- popup_data->tag_data[i].bounds.x * PANGO_SCALE,
- popup_data->tag_data[i].bounds.y * PANGO_SCALE);
+ (popup_data->tag_data[i].bounds.x) * PANGO_SCALE,
+ (popup_data->tag_data[i].bounds.y) * PANGO_SCALE);
+
+ if (&popup_data->tag_data[i] == popup_data->prelight)
+ {
+ gtk_paint_focus (widget->style, widget->window,
+ popup_data->tag_data[i].selected ? GTK_STATE_SELECTED : GTK_STATE_NORMAL,
+ &event->area, widget, NULL,
+ popup_data->tag_data[i].bounds.x, popup_data->tag_data[i].bounds.y,
+ popup_data->tag_data[i].bounds.width, popup_data->tag_data[i].bounds.height);
+
+ }
+
}
gdk_pango_renderer_set_drawable (GDK_PANGO_RENDERER (renderer), NULL);
@@ -642,6 +675,38 @@
}
}
}
+ else if (event->type == GDK_MOTION_NOTIFY)
+ {
+ GdkEventMotion *motion_event;
+ gint x;
+ gint y;
+ gint i;
+ GdkRectangle *bounds;
+ PopupTagData *previous_prelight = popup_data->prelight;
+
+ motion_event = (GdkEventMotion*) event;
+ x = motion_event->x;
+ y = motion_event->y;
+
+ popup_data->prelight = NULL;
+ for (i = 0; i < popup_data->tag_count; i++)
+ {
+ bounds = &popup_data->tag_data[i].bounds;
+ if (x >= bounds->x
+ && y >= bounds->y
+ && x < bounds->x + bounds->width
+ && y < bounds->y + bounds->height)
+ {
+ popup_data->prelight = &popup_data->tag_data[i];
+ break;
+ }
+ }
+
+ if (previous_prelight != popup_data->prelight)
+ {
+ gtk_widget_queue_draw (widget);
+ }
+ }
return FALSE;
}
Modified: branches/soc-2008-tagging/app/widgets/gimpcombotagentry.h
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimpcombotagentry.h (original)
+++ branches/soc-2008-tagging/app/widgets/gimpcombotagentry.h Sat Jul 26 09:55:25 2008
@@ -43,6 +43,7 @@
gint focus_width;
PangoAttrList *normal_item_attr;
PangoAttrList *selected_item_attr;
+ GdkColor selected_item_color;
gboolean interior_focus;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]