summaryrefslogtreecommitdiff
path: root/gtk/gtktreeview.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-07-15 03:36:07 +0200
committerBenjamin Otte <otte@redhat.com>2010-07-26 16:42:47 +0200
commit8dd33175020c666eab24abed1bf03e93cf16870a (patch)
treeccbaade4fd78a1d0504c2dfbd538ad8607dc6a0f /gtk/gtktreeview.c
parent526aac1fda1b15a1ff800ab5b44dcbab44bba447 (diff)
downloadgtk+-8dd33175020c666eab24abed1bf03e93cf16870a.tar.gz
treeview: Unify all line drawing into the same function
This is useful because the dashing stuff needs to be done and it seems like a good idea to unify it.
Diffstat (limited to 'gtk/gtktreeview.c')
-rw-r--r--gtk/gtktreeview.c138
1 files changed, 88 insertions, 50 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 707176498b..f72d1cbe0d 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -4221,6 +4221,44 @@ draw_empty_focus (GtkTreeView *tree_view, GdkRectangle *clip_area)
1, 1, w, h);
}
+typedef enum {
+ GTK_TREE_VIEW_GRID_LINE,
+ GTK_TREE_VIEW_TREE_LINE,
+ GTK_TREE_VIEW_FOREGROUND_LINE
+} GtkTreeViewLineType;
+
+static void
+gtk_tree_view_draw_line (GtkTreeView *tree_view,
+ GdkWindow *window,
+ GtkTreeViewLineType type,
+ int x1,
+ int y1,
+ int x2,
+ int y2)
+{
+ GdkGC *gc;
+
+ switch (type)
+ {
+ case GTK_TREE_VIEW_TREE_LINE:
+ gc = tree_view->priv->tree_line_gc;
+ break;
+ case GTK_TREE_VIEW_GRID_LINE:
+ gc = tree_view->priv->grid_line_gc;
+ break;
+ default:
+ g_assert_not_reached ();
+ /* fall through */
+ case GTK_TREE_VIEW_FOREGROUND_LINE:
+ gc = GTK_WIDGET (tree_view)->style->fg_gc[gtk_widget_get_state (GTK_WIDGET (tree_view))];
+ break;
+ }
+
+ gdk_draw_line (window, gc,
+ x1, y1,
+ x2, y2);
+}
+
static void
gtk_tree_view_draw_grid_lines (GtkTreeView *tree_view,
GdkEventExpose *event,
@@ -4248,10 +4286,10 @@ gtk_tree_view_draw_grid_lines (GtkTreeView *tree_view,
current_x += column->width;
- gdk_draw_line (event->window,
- tree_view->priv->grid_line_gc,
- current_x - 1, 0,
- current_x - 1, tree_view->priv->height);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_GRID_LINE,
+ current_x - 1, 0,
+ current_x - 1, tree_view->priv->height);
}
}
@@ -4704,18 +4742,18 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
if (draw_hgrid_lines)
{
if (background_area.y > 0)
- gdk_draw_line (event->window,
- tree_view->priv->grid_line_gc,
- background_area.x, background_area.y,
- background_area.x + background_area.width,
- background_area.y);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_GRID_LINE,
+ background_area.x, background_area.y,
+ background_area.x + background_area.width,
+ background_area.y);
if (y_offset + max_height >= event->area.height)
- gdk_draw_line (event->window,
- tree_view->priv->grid_line_gc,
- background_area.x, background_area.y + max_height,
- background_area.x + background_area.width,
- background_area.y + max_height);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_GRID_LINE,
+ background_area.x, background_area.y + max_height,
+ background_area.x + background_area.width,
+ background_area.y + max_height);
}
if (gtk_tree_view_is_expander_column (tree_view, column) &&
@@ -4733,21 +4771,21 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
if ((node->flags & GTK_RBNODE_IS_PARENT) == GTK_RBNODE_IS_PARENT
&& depth > 1)
{
- gdk_draw_line (event->window,
- tree_view->priv->tree_line_gc,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y1,
- x + tree_view->priv->expander_size * (depth - 1.1) * mult,
- y1);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_TREE_LINE,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y1,
+ x + tree_view->priv->expander_size * (depth - 1.1) * mult,
+ y1);
}
else if (depth > 1)
{
- gdk_draw_line (event->window,
- tree_view->priv->tree_line_gc,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y1,
- x + tree_view->priv->expander_size * (depth - 0.5) * mult,
- y1);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_TREE_LINE,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y1,
+ x + tree_view->priv->expander_size * (depth - 0.5) * mult,
+ y1);
}
if (depth > 1)
@@ -4757,19 +4795,19 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
GtkRBTree *tmp_tree;
if (!_gtk_rbtree_next (tree, node))
- gdk_draw_line (event->window,
- tree_view->priv->tree_line_gc,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y0,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y1);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_TREE_LINE,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y0,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y1);
else
- gdk_draw_line (event->window,
- tree_view->priv->tree_line_gc,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y0,
- x + tree_view->priv->expander_size * (depth - 1.5) * mult,
- y2);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_TREE_LINE,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y0,
+ x + tree_view->priv->expander_size * (depth - 1.5) * mult,
+ y2);
tmp_node = tree->parent_node;
tmp_tree = tree->parent_tree;
@@ -4777,12 +4815,12 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
for (i = depth - 2; i > 0; i--)
{
if (_gtk_rbtree_next (tmp_tree, tmp_node))
- gdk_draw_line (event->window,
- tree_view->priv->tree_line_gc,
- x + tree_view->priv->expander_size * (i - 0.5) * mult,
- y0,
- x + tree_view->priv->expander_size * (i - 0.5) * mult,
- y2);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_TREE_LINE,
+ x + tree_view->priv->expander_size * (i - 0.5) * mult,
+ y0,
+ x + tree_view->priv->expander_size * (i - 0.5) * mult,
+ y2);
tmp_node = tmp_tree->parent_node;
tmp_tree = tmp_tree->parent_tree;
@@ -4866,12 +4904,12 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
if (highlight_y >= 0)
{
- gdk_draw_line (event->window,
- widget->style->fg_gc[gtk_widget_get_state (widget)],
- rtl ? highlight_x + expander_cell_width : highlight_x,
- highlight_y,
- rtl ? 0 : bin_window_width,
- highlight_y);
+ gtk_tree_view_draw_line (tree_view, event->window,
+ GTK_TREE_VIEW_FOREGROUND_LINE,
+ rtl ? highlight_x + expander_cell_width : highlight_x,
+ highlight_y,
+ rtl ? 0 : bin_window_width,
+ highlight_y);
}
}