[gtksourceview/wip/gutter-draw-refactoring] gutter: split on_view_draw: draw_cells()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/gutter-draw-refactoring] gutter: split on_view_draw: draw_cells()
- Date: Sun, 23 Nov 2014 15:45:11 +0000 (UTC)
commit c43f8ba35c6905e6cd8db294d4bfe742c88c17e0
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun Nov 23 16:44:29 2014 +0100
gutter: split on_view_draw: draw_cells()
gtksourceview/gtksourcegutter.c | 234 +++++++++++++++++++++------------------
1 files changed, 128 insertions(+), 106 deletions(-)
---
diff --git a/gtksourceview/gtksourcegutter.c b/gtksourceview/gtksourcegutter.c
index 3f6f71a..5d2ece0 100644
--- a/gtksourceview/gtksourcegutter.c
+++ b/gtksourceview/gtksourcegutter.c
@@ -1021,111 +1021,32 @@ begin_draw (GtkSourceGutter *gutter,
}
static void
-end_draw (GtkSourceGutter *gutter)
-{
- GList *l;
-
- for (l = gutter->priv->renderers; l != NULL; l = l->next)
- {
- Renderer *renderer = l->data;
-
- if (gtk_source_gutter_renderer_get_visible (renderer->renderer))
- {
- gtk_source_gutter_renderer_end (renderer->renderer);
- }
- }
-}
-
-static gboolean
-on_view_draw (GtkSourceView *view,
- cairo_t *cr,
- GtkSourceGutter *gutter)
+draw_cells (GtkSourceGutter *gutter,
+ GtkTextView *view,
+ GArray *sizes,
+ GArray *pixels,
+ GArray *heights,
+ GArray *numbers,
+ gint count,
+ GtkTextIter *first_line,
+ cairo_t *cr)
{
- GdkRectangle clip;
- GtkTextView *text_view;
GtkTextBuffer *buffer;
- GArray *sizes;
- GArray *pixels;
- GArray *heights;
- GArray *numbers;
- gint y1;
- gint y2;
- GtkTextIter cur;
+ GtkTextIter insert_iter;
gint cur_line;
- gint count;
- gint i;
- GtkTextIter start;
- GtkTextIter end;
- GdkRectangle background_area;
GtkTextIter selection_start;
GtkTextIter selection_end;
gboolean has_selection;
- GtkStyleContext *style_context;
-
- if (!get_clip_rectangle (gutter, view, cr, &clip))
- {
- return GDK_EVENT_PROPAGATE;
- }
-
- gutter->priv->is_drawing = TRUE;
-
- text_view = GTK_TEXT_VIEW (view);
- buffer = gtk_text_view_get_buffer (text_view);
-
- y1 = clip.y;
- y2 = y1 + clip.height;
-
- /* get the extents of the line printing */
- gtk_text_view_window_to_buffer_coords (text_view,
- gutter->priv->window_type,
- 0,
- y1,
- NULL,
- &y1);
-
- gtk_text_view_window_to_buffer_coords (text_view,
- gutter->priv->window_type,
- 0,
- y2,
- NULL,
- &y2);
-
- sizes = g_array_new (FALSE, FALSE, sizeof (gint));
- calculate_gutter_size (gutter, sizes);
-
- pixels = g_array_new (FALSE, FALSE, sizeof (gint));
- heights = g_array_new (FALSE, FALSE, sizeof (gint));
- numbers = g_array_new (FALSE, FALSE, sizeof (gint));
-
- background_area.x = 0;
- background_area.height = get_lines (text_view,
- y1,
- y2,
- pixels,
- heights,
- numbers,
- &count,
- &start,
- &end);
-
- gtk_text_view_buffer_to_window_coords (text_view,
- gutter->priv->window_type,
- 0,
- g_array_index (pixels, gint, 0),
- NULL,
- &background_area.y);
-
- style_context = gtk_widget_get_style_context (GTK_WIDGET (view));
- gtk_style_context_save (style_context);
- apply_style (gutter, view, style_context, cr);
+ GtkTextIter start;
+ gint i;
- begin_draw (gutter, sizes, background_area, &start, &end, cr);
+ buffer = gtk_text_view_get_buffer (view);
gtk_text_buffer_get_iter_at_mark (buffer,
- &cur,
+ &insert_iter,
gtk_text_buffer_get_insert (buffer));
- cur_line = gtk_text_iter_get_line (&cur);
+ cur_line = gtk_text_iter_get_line (&insert_iter);
gtk_text_buffer_get_selection_bounds (buffer,
&selection_start,
@@ -1146,11 +1067,15 @@ on_view_draw (GtkSourceView *view,
}
}
- for (i = 0; i < count; ++i)
+ start = *first_line;
+
+ for (i = 0; i < count; i++)
{
+ GtkTextIter end;
+ GdkRectangle background_area;
gint pos;
gint line_to_paint;
- GList *item;
+ GList *l;
gint idx;
end = start;
@@ -1160,7 +1085,7 @@ on_view_draw (GtkSourceView *view,
gtk_text_iter_forward_to_line_end (&end);
}
- gtk_text_view_buffer_to_window_coords (text_view,
+ gtk_text_view_buffer_to_window_coords (view,
gutter->priv->window_type,
0,
g_array_index (pixels, gint, i),
@@ -1173,9 +1098,9 @@ on_view_draw (GtkSourceView *view,
background_area.height = g_array_index (heights, gint, i);
background_area.x = 0;
- for (item = gutter->priv->renderers, idx = 0;
- item != NULL;
- item = g_list_next (item), idx++)
+ for (l = gutter->priv->renderers, idx = 0;
+ l != NULL;
+ l = l->next, idx++)
{
Renderer *renderer;
GdkRectangle cell_area;
@@ -1184,7 +1109,7 @@ on_view_draw (GtkSourceView *view,
gint xpad;
gint ypad;
- renderer = item->data;
+ renderer = l->data;
width = g_array_index (sizes, gint, idx);
if (!gtk_source_gutter_renderer_get_visible (renderer->renderer))
@@ -1219,7 +1144,8 @@ on_view_draw (GtkSourceView *view,
state |= GTK_SOURCE_GUTTER_RENDERER_STATE_SELECTED;
}
- if (renderer->prelit >= 0 && cell_area.y <= renderer->prelit && cell_area.y +
cell_area.height >= renderer->prelit)
+ if (renderer->prelit >= 0 &&
+ cell_area.y <= renderer->prelit && renderer->prelit <= cell_area.y +
cell_area.height)
{
state |= GTK_SOURCE_GUTTER_RENDERER_STATE_PRELIT;
}
@@ -1251,18 +1177,114 @@ on_view_draw (GtkSourceView *view,
gtk_text_iter_forward_line (&start);
}
+}
+
+static void
+end_draw (GtkSourceGutter *gutter)
+{
+ GList *l;
+
+ for (l = gutter->priv->renderers; l != NULL; l = l->next)
+ {
+ Renderer *renderer = l->data;
+
+ if (gtk_source_gutter_renderer_get_visible (renderer->renderer))
+ {
+ gtk_source_gutter_renderer_end (renderer->renderer);
+ }
+ }
+}
+
+static gboolean
+on_view_draw (GtkSourceView *view,
+ cairo_t *cr,
+ GtkSourceGutter *gutter)
+{
+ GdkRectangle clip;
+ GtkTextView *text_view;
+ GArray *sizes;
+ GArray *pixels;
+ GArray *heights;
+ GArray *numbers;
+ gint y1;
+ gint y2;
+ gint count;
+ GtkTextIter start;
+ GtkTextIter end;
+ GdkRectangle background_area;
+ GtkStyleContext *style_context;
+
+ if (!get_clip_rectangle (gutter, view, cr, &clip))
+ {
+ return GDK_EVENT_PROPAGATE;
+ }
+
+ gutter->priv->is_drawing = TRUE;
+
+ text_view = GTK_TEXT_VIEW (view);
+
+ y1 = clip.y;
+ y2 = y1 + clip.height;
+
+ /* get the extents of the line printing */
+ gtk_text_view_window_to_buffer_coords (text_view,
+ gutter->priv->window_type,
+ 0,
+ y1,
+ NULL,
+ &y1);
+
+ gtk_text_view_window_to_buffer_coords (text_view,
+ gutter->priv->window_type,
+ 0,
+ y2,
+ NULL,
+ &y2);
+
+ sizes = g_array_new (FALSE, FALSE, sizeof (gint));
+ calculate_gutter_size (gutter, sizes);
+
+ pixels = g_array_new (FALSE, FALSE, sizeof (gint));
+ heights = g_array_new (FALSE, FALSE, sizeof (gint));
+ numbers = g_array_new (FALSE, FALSE, sizeof (gint));
+
+ background_area.x = 0;
+ background_area.height = get_lines (text_view,
+ y1,
+ y2,
+ pixels,
+ heights,
+ numbers,
+ &count,
+ &start,
+ &end);
+
+ gtk_text_view_buffer_to_window_coords (text_view,
+ gutter->priv->window_type,
+ 0,
+ g_array_index (pixels, gint, 0),
+ NULL,
+ &background_area.y);
+
+ style_context = gtk_widget_get_style_context (GTK_WIDGET (view));
+ gtk_style_context_save (style_context);
+ apply_style (gutter, view, style_context, cr);
+
+ begin_draw (gutter, sizes, background_area, &start, &end, cr);
+
+ draw_cells (gutter, text_view, sizes, pixels, heights, numbers, count, &start, cr);
/* Allow to call queue_redraw() in ::end. */
gutter->priv->is_drawing = FALSE;
end_draw (gutter);
- g_array_free (numbers, TRUE);
+ gtk_style_context_restore (style_context);
+
+ g_array_free (sizes, TRUE);
g_array_free (pixels, TRUE);
g_array_free (heights, TRUE);
- g_array_free (sizes, TRUE);
-
- gtk_style_context_restore (style_context);
+ g_array_free (numbers, TRUE);
return GDK_EVENT_PROPAGATE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]