diff options
author | Owen Taylor <otaylor@redhat.com> | 1999-01-21 21:09:03 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-01-21 21:09:03 +0000 |
commit | a0fa647a640aef8d6aa308a70c1b1888cbf15b03 (patch) | |
tree | c1a94cf8f0cd58019abe91c2f39c6350d96bbcce /gtk/gtktreeitem.c | |
parent | 6878910ad47cd711e40259e399409da19008cd96 (diff) | |
download | gtk+-a0fa647a640aef8d6aa308a70c1b1888cbf15b03.tar.gz |
[ Tried to commit wrong file last time ]
Thu Jan 21 16:03:02 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtktreeitem.c: Add a paint routine, fix up bugs
in drawing where if the expose area was contained
completely in the right side of the tree the background
wasn't redraw, etc.
Diffstat (limited to 'gtk/gtktreeitem.c')
-rw-r--r-- | gtk/gtktreeitem.c | 95 |
1 files changed, 63 insertions, 32 deletions
diff --git a/gtk/gtktreeitem.c b/gtk/gtktreeitem.c index 1d6d44c2b0..4ac5c362fd 100644 --- a/gtk/gtktreeitem.c +++ b/gtk/gtktreeitem.c @@ -59,6 +59,8 @@ static void gtk_tree_item_size_allocate (GtkWidget *widget, static void gtk_tree_item_draw (GtkWidget *widget, GdkRectangle *area); static void gtk_tree_item_draw_focus (GtkWidget *widget); +static void gtk_tree_item_paint (GtkWidget *widget, + GdkRectangle *area); static gint gtk_tree_item_button_press (GtkWidget *widget, GdkEventButton *event); static gint gtk_tree_item_expose (GtkWidget *widget, @@ -625,8 +627,8 @@ gtk_tree_item_draw_lines (GtkWidget *widget) } static void -gtk_tree_item_draw (GtkWidget *widget, - GdkRectangle *area) +gtk_tree_item_paint (GtkWidget *widget, + GdkRectangle *area) { GtkBin *bin; GdkRectangle child_area, item_area; @@ -641,6 +643,25 @@ gtk_tree_item_draw (GtkWidget *widget, bin = GTK_BIN (widget); tree_item = GTK_TREE_ITEM(widget); + if (widget->state == GTK_STATE_NORMAL) + { + gdk_window_set_back_pixmap (widget->window, NULL, TRUE); + gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height); + } + else + { + if (!GTK_WIDGET_IS_SENSITIVE (widget)) + gtk_paint_flat_box(widget->style, widget->window, + widget->state, GTK_STATE_INSENSITIVE, + area, widget, "treeitem", + 0, 0, -1, -1); + else + gtk_paint_flat_box(widget->style, widget->window, + widget->state, GTK_SHADOW_ETCHED_OUT, + area, widget, "treeitem", + 0, 0, -1, -1); + } + /* draw left size of tree item */ item_area.x = 0; item_area.y = 0; @@ -648,43 +669,17 @@ gtk_tree_item_draw (GtkWidget *widget, GTK_TREE (widget->parent)->current_indent + 2); item_area.height = widget->allocation.height; + if (gdk_rectangle_intersect(&item_area, area, &child_area)) { - if (widget->state == GTK_STATE_NORMAL) - { - gdk_window_set_back_pixmap (widget->window, NULL, TRUE); - gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height); - } - else - { - if (!GTK_WIDGET_IS_SENSITIVE (widget)) - gtk_paint_flat_box(widget->style, widget->window, - widget->state, GTK_STATE_INSENSITIVE, - area, widget, "treeitem", - 0, 0, -1, -1); - else - gtk_paint_flat_box(widget->style, widget->window, - widget->state, GTK_SHADOW_ETCHED_OUT, - area, widget, "treeitem", - 0, 0, -1, -1); - } - - gtk_tree_item_draw_lines(widget); + gtk_tree_item_draw_lines(widget); + if (tree_item->pixmaps_box && GTK_WIDGET_VISIBLE(tree_item->pixmaps_box) && gtk_widget_intersect (tree_item->pixmaps_box, area, &child_area)) gtk_widget_draw (tree_item->pixmaps_box, &child_area); } - - /* draw right side */ - if (gtk_widget_intersect (bin->child, area, &child_area)) - { - if (bin->child && - GTK_WIDGET_VISIBLE(bin->child) && - gtk_widget_intersect (bin->child, area, &child_area)) - gtk_widget_draw (bin->child, &child_area); - } if (GTK_WIDGET_HAS_FOCUS (widget)) gtk_paint_focus (widget->style, widget->window, @@ -697,6 +692,30 @@ gtk_tree_item_draw (GtkWidget *widget, } static void +gtk_tree_item_draw (GtkWidget *widget, + GdkRectangle *area) +{ + GtkBin *bin; + GdkRectangle child_area; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_TREE_ITEM (widget)); + g_return_if_fail (area != NULL); + + if (GTK_WIDGET_DRAWABLE (widget)) + { + bin = GTK_BIN (widget); + + gtk_tree_item_paint (widget, area); + + if (bin->child && + gtk_widget_intersect (bin->child, area, &child_area)) + gtk_widget_draw (bin->child, &child_area); + + } +} + +static void gtk_tree_item_draw_focus (GtkWidget *widget) { g_return_if_fail (widget != NULL); @@ -726,12 +745,24 @@ static gint gtk_tree_item_expose (GtkWidget *widget, GdkEventExpose *event) { + GdkEventExpose child_event; + GtkBin *bin; + g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); if (GTK_WIDGET_DRAWABLE (widget)) - gtk_tree_item_draw(widget, &event->area); + { + bin = GTK_BIN (widget); + + gtk_tree_item_paint (widget, &event->area); + + child_event = *event; + if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) && + gtk_widget_intersect (bin->child, &event->area, &child_event.area)) + gtk_widget_event (bin->child, (GdkEvent*) &child_event); + } return FALSE; } |