aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-10-16 03:07:29 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-10-30 01:50:01 +0800
commita7d37040bf83725bd96f1cb15bb5ddc536ba02d3 (patch)
tree827b012be2a6597d55b9691afc53906df29ec7fa
parentf7767b0f25c8b06498031c63109ef13c2d87f0f5 (diff)
downloadgsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar.gz
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar.bz2
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar.lz
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar.xz
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.tar.zst
gsoc2013-evolution-a7d37040bf83725bd96f1cb15bb5ddc536ba02d3.zip
e-table: Draw grids with Cairo
Gets rid of the need for GdkGC completely.
-rw-r--r--widgets/table/e-table-item.c42
-rw-r--r--widgets/table/e-table-item.h3
2 files changed, 20 insertions, 25 deletions
diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c
index d68c69a220..0969a7c4e1 100644
--- a/widgets/table/e-table-item.c
+++ b/widgets/table/e-table-item.c
@@ -1665,11 +1665,6 @@ eti_realize (GnomeCanvasItem *item)
style = gtk_widget_get_style (widget);
window = gtk_widget_get_window (widget);
- eti->fill_gc = gdk_gc_new (window);
-
- eti->grid_gc = gdk_gc_new (window);
- gdk_gc_set_foreground (eti->grid_gc, &style->dark[GTK_STATE_NORMAL]);
-
g_signal_connect (GTK_LAYOUT(item->canvas), "scroll_event", G_CALLBACK (eti_tree_unfreeze), eti);
if (eti->cell_views == NULL)
@@ -1721,11 +1716,6 @@ eti_unrealize (GnomeCanvasItem *item)
eti->height_cache = NULL;
eti->height_cache_idle_count = 0;
- g_object_unref (eti->fill_gc);
- eti->fill_gc = NULL;
- g_object_unref (eti->grid_gc);
- eti->grid_gc = NULL;
-
eti_unrealize_cell_views (eti);
eti->height = 0;
@@ -1735,6 +1725,22 @@ eti_unrealize (GnomeCanvasItem *item)
}
static void
+eti_draw_grid_line (ETableItem *eti, cairo_t *cr, GtkStyle *style,
+ int x1, int y1, int x2, int y2)
+{
+ cairo_save (cr);
+
+ cairo_set_line_width (cr, 1.0);
+ gdk_cairo_set_source_color (cr, &style->dark[GTK_STATE_NORMAL]);
+
+ cairo_move_to (cr, x1 + 0.5, y1 + 0.5);
+ cairo_line_to (cr, x2 + 0.5, y2 + 0.5);
+ cairo_stroke (cr);
+
+ cairo_restore (cr);
+}
+
+static void
eti_draw (GnomeCanvasItem *item, GdkDrawable *drawable, gint x, gint y, gint width, gint height)
{
ETableItem *eti = E_TABLE_ITEM (item);
@@ -1846,11 +1852,8 @@ eti_draw (GnomeCanvasItem *item, GdkDrawable *drawable, gint x, gint y, gint wid
f_x1 = f_x2 = f_y1 = f_y2 = -1;
f_found = FALSE;
- if (eti->horizontal_draw_grid && first_row == 0) {
- gdk_draw_line (
- drawable, eti->grid_gc,
- eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
- }
+ if (eti->horizontal_draw_grid && first_row == 0)
+ eti_draw_grid_line (eti, cr, style, eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
yd += height_extra;
@@ -1994,10 +1997,7 @@ eti_draw (GnomeCanvasItem *item, GdkDrawable *drawable, gint x, gint y, gint wid
yd += height;
if (eti->horizontal_draw_grid) {
- gdk_draw_line (
- drawable, eti->grid_gc,
- eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
-
+ eti_draw_grid_line (eti, cr, style, eti_base.x - x, yd, eti_base.x + eti->width - x, yd);
yd++;
}
}
@@ -2008,9 +2008,7 @@ eti_draw (GnomeCanvasItem *item, GdkDrawable *drawable, gint x, gint y, gint wid
for (col = first_col; col <= last_col; col++) {
ETableCol *ecol = e_table_header_get_column (eti->header, col);
- gdk_draw_line (
- drawable, eti->grid_gc,
- xd, y_offset, xd, yd - 1);
+ eti_draw_grid_line (eti, cr, style, xd, y_offset, xd, yd - 1);
/*
* This looks wierd, but it is to draw the last line
diff --git a/widgets/table/e-table-item.h b/widgets/table/e-table-item.h
index 277e2d3c8e..3f773b621a 100644
--- a/widgets/table/e-table-item.h
+++ b/widgets/table/e-table-item.h
@@ -79,9 +79,6 @@ typedef struct {
/* View row, -1 means unknown */
gint old_cursor_row;
- GdkGC *fill_gc;
- GdkGC *grid_gc;
-
guint alternating_row_colors:1;
guint horizontal_draw_grid:1;
guint vertical_draw_grid:1;