[gitg/gtk3: 20/20] Make GitgDiffLineRenderer compile
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg/gtk3: 20/20] Make GitgDiffLineRenderer compile
- Date: Tue, 8 Feb 2011 16:27:05 +0000 (UTC)
commit 9bcfa1327dbc8fa586f4538fa58991fc2c97ec0c
Author: Garrett Regier <alias301 gmail com>
Date: Sat Jan 22 15:47:33 2011 -0800
Make GitgDiffLineRenderer compile
gitg/gitg-diff-line-renderer.c | 140 +++++++++++++++++++++++++++-------------
gitg/gitg-diff-line-renderer.h | 6 +-
gitg/gitg-diff-view.c | 57 ++++++++++-------
3 files changed, 131 insertions(+), 72 deletions(-)
---
diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c
index 8da7f2b..8a1805a 100644
--- a/gitg/gitg-diff-line-renderer.c
+++ b/gitg/gitg-diff-line-renderer.c
@@ -41,7 +41,7 @@ struct _GitgDiffLineRendererPrivate
gchar *label;
};
-G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_CELL_RENDERER)
+G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_SOURCE_GUTTER_RENDERER)
static void
gitg_diff_line_renderer_set_property (GObject *object,
@@ -95,6 +95,36 @@ gitg_diff_line_renderer_get_property (GObject *object,
}
static void
+gitg_diff_line_renderer_constructed (GObject *object)
+{
+ /*GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);*/
+
+
+
+ if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed)
+ {
+ G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed (object);
+ }
+}
+
+static void
+gitg_diff_line_renderer_dispose (GObject *object)
+{
+ GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);
+
+ if (self->priv->label != NULL)
+ {
+ g_free (self->priv->label);
+ self->priv->label = NULL;
+ }
+
+ if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose)
+ {
+ G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose (object);
+ }
+}
+
+static void
darken_or_lighten (cairo_t *ctx,
GdkRGBA const *color)
{
@@ -121,20 +151,24 @@ darken_or_lighten (cairo_t *ctx,
}
static void
-render_label (GitgDiffLineRenderer *lr,
- cairo_t *ctx,
- GtkWidget *widget,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- GtkCellRendererState flags)
+render_label (GtkSourceGutterRenderer *renderer,
+ cairo_t *ctx,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ GtkSourceGutterRendererState renderer_state)
{
+ GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
+ GtkWidget *widget;
PangoLayout *layout;
GtkStyleContext *style_context;
GtkStateType state;
gint pixel_height;
GdkRGBA fg_color, bg_color;
+ widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer));
+
layout = gtk_widget_create_pango_layout (widget, "");
pango_layout_set_markup (layout, lr->priv->label, -1);
@@ -182,14 +216,15 @@ render_label (GitgDiffLineRenderer *lr,
}
static void
-render_lines (GitgDiffLineRenderer *lr,
- cairo_t *ctx,
- GtkWidget *widget,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- GtkCellRendererState flags)
+render_lines (GtkSourceGutterRenderer *renderer,
+ cairo_t *ctx,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ GtkSourceGutterRendererState renderer_state)
{
+ GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
/* Render new/old in the cell area */
gchar old_str[16];
gchar new_str[16];
@@ -198,6 +233,8 @@ render_lines (GitgDiffLineRenderer *lr,
GtkWidget *widget;
GtkStyleContext *style_context;
+ widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer));
+
PangoLayout *layout = gtk_widget_create_pango_layout (widget, "");
pango_layout_set_width (layout, cell_area->width / 2);
@@ -250,50 +287,60 @@ render_lines (GitgDiffLineRenderer *lr,
}
static void
-gitg_diff_line_renderer_render_impl (GtkCellRenderer *cell,
- cairo_t *ctx,
- GtkWidget *widget,
- GdkRectangle *background_area,
- GdkRectangle *cell_area,
- GdkRectangle *expose_area,
- GtkCellRendererState flags)
+gitg_diff_line_renderer_draw_impl (GtkSourceGutterRenderer *renderer,
+ cairo_t *ctx,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ GtkSourceGutterRendererState renderer_state)
{
- GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (cell);
+ GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
+
+ /* Chain up to draw background */
+ GTK_SOURCE_GUTTER_RENDERER_CLASS (
+ gitg_diff_line_renderer_parent_class)->draw (renderer,
+ ctx,
+ background_area,
+ cell_area,
+ start,
+ end,
+ renderer_state);
if (lr->priv->label)
{
- render_label (lr,
+ render_label (renderer,
ctx,
- widget,
background_area,
cell_area,
- expose_area,
- flags);
+ start,
+ end,
+ renderer_state);
}
else
{
- render_lines (lr,
+ render_lines (renderer,
ctx,
- widget,
background_area,
cell_area,
- expose_area,
- flags);
+ start,
+ end,
+ renderer_state);
}
}
-
+/*
static void
-gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell,
- GtkWidget *widget,
- GdkRectangle *cell_area,
- gint *x_offset,
- gint *y_offset,
- gint *width,
- gint *height)
+gitg_diff_line_renderer_get_size_impl (GtkSourceGutterRenderer *renderer,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height)
{
- GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (cell);
+ GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
- /* Get size of this rendering */
+ / Get size of this rendering /
PangoLayout *layout;
gchar str[16];
gint pixel_width;
@@ -305,7 +352,7 @@ gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell,
layout = gtk_widget_create_pango_layout (widget, str);
pango_layout_get_pixel_size(layout, &pixel_width, &pixel_height);
- g_object_get (cell, "xpad", &xpad, "ypad", &ypad, NULL);
+ g_object_get (lr, "xpad", &xpad, "ypad", &ypad, NULL);
pixel_width += pixel_width + xpad * 2 + 3;
if (lr->priv->label)
@@ -360,19 +407,20 @@ gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell,
}
g_object_unref (G_OBJECT (layout));
-}
+}*/
static void
gitg_diff_line_renderer_class_init (GitgDiffLineRendererClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkCellRendererClass *cell_renderer_class = GTK_CELL_RENDERER_CLASS (klass);
+ GtkSourceGutterRendererClass *gutter_renderer_class = GTK_SOURCE_GUTTER_RENDERER_CLASS (klass);
- cell_renderer_class->render = gitg_diff_line_renderer_render_impl;
- cell_renderer_class->get_size = gitg_diff_line_renderer_get_size_impl;
+ gutter_renderer_class->draw = gitg_diff_line_renderer_draw_impl;
object_class->set_property = gitg_diff_line_renderer_set_property;
object_class->get_property = gitg_diff_line_renderer_get_property;
+ object_class->constructed = gitg_diff_line_renderer_constructed;
+ object_class->dispose = gitg_diff_line_renderer_dispose;
g_object_class_install_property (object_class,
PROP_LINE_OLD,
diff --git a/gitg/gitg-diff-line-renderer.h b/gitg/gitg-diff-line-renderer.h
index 582d42f..deffacb 100644
--- a/gitg/gitg-diff-line-renderer.h
+++ b/gitg/gitg-diff-line-renderer.h
@@ -23,7 +23,7 @@
#ifndef __GITG_DIFF_LINE_RENDERER_H__
#define __GITG_DIFF_LINE_RENDERER_H__
-#include <gtk/gtk.h>
+#include <gtksourceview/gtksourceview.h>
G_BEGIN_DECLS
@@ -40,13 +40,13 @@ typedef struct _GitgDiffLineRendererClass GitgDiffLineRendererClass;
typedef struct _GitgDiffLineRendererPrivate GitgDiffLineRendererPrivate;
struct _GitgDiffLineRenderer {
- GtkCellRenderer parent;
+ GtkSourceGutterRenderer parent;
GitgDiffLineRendererPrivate *priv;
};
struct _GitgDiffLineRendererClass {
- GtkCellRendererClass parent_class;
+ GtkSourceGutterRendererClass parent_class;
};
GType gitg_diff_line_renderer_get_type (void) G_GNUC_CONST;
diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c
index 63d3695..faf7dce 100644
--- a/gitg/gitg-diff-view.c
+++ b/gitg/gitg-diff-view.c
@@ -56,17 +56,16 @@ static void on_buffer_delete_range (GtkTextBuffer *buffer,
GtkTextIter *end,
GitgDiffView *view);
-static void
+/*static void
line_renderer_size_func (GtkSourceGutter *gutter,
GtkCellRenderer *cell,
GitgDiffView *view);
-static void
-line_renderer_data_func (GtkSourceGutter *gutter,
- GtkCellRenderer *cell,
- gint line_number,
- gboolean current_line,
- GitgDiffView *view);
-
+*/
+static void line_renderer_query_data_cb (GtkSourceGutterRenderer *renderer,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ GtkSourceGutterRendererState state,
+ GitgDiffView *view);
static void disable_diff_view (GitgDiffView *view);
static void enable_diff_view (GitgDiffView *view);
@@ -392,7 +391,7 @@ disable_diff_view (GitgDiffView *view)
GTK_TEXT_WINDOW_LEFT);
gtk_source_gutter_remove (gutter,
- GTK_CELL_RENDERER (view->priv->line_renderer));
+ GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer));
}
view->priv->diff_enabled = FALSE;
@@ -446,20 +445,25 @@ enable_diff_view (GitgDiffView *view)
GTK_TEXT_WINDOW_LEFT);
gtk_source_gutter_insert (gutter,
- GTK_CELL_RENDERER (view->priv->line_renderer),
+ GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer),
0);
- gtk_source_gutter_set_cell_data_func (gutter,
- GTK_CELL_RENDERER (view->priv->line_renderer),
+ /*gtk_source_gutter_set_cell_data_func (gutter,
+ GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer),
(GtkSourceGutterDataFunc)line_renderer_data_func,
view,
NULL);
gtk_source_gutter_set_cell_size_func (gutter,
- GTK_CELL_RENDERER (view->priv->line_renderer),
+ GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer),
(GtkSourceGutterSizeFunc)line_renderer_size_func,
view,
- NULL);
+ NULL);*/
+
+ g_signal_connect (view->priv->line_renderer,
+ "query-data",
+ (GCallback) line_renderer_query_data_cb,
+ view);
view->priv->diff_enabled = TRUE;
}
@@ -768,7 +772,7 @@ get_initial_counters (GitgDiffView *view, Region *region, guint line, guint coun
++counters[1];
}
}
-
+/*
static void
line_renderer_size_func (GtkSourceGutter *gutter,
GtkCellRenderer *cell,
@@ -788,19 +792,26 @@ line_renderer_size_func (GtkSourceGutter *gutter,
g_object_set (cell, "label", label, NULL);
g_free (label);
}
-}
+}*/
static void
-line_renderer_data_func (GtkSourceGutter *gutter,
- GtkCellRenderer *cell,
- gint line_number,
- gboolean current_line,
- GitgDiffView *view)
+line_renderer_query_data_cb (GtkSourceGutterRenderer *renderer,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ GtkSourceGutterRendererState state,
+ GitgDiffView *view)
{
gint line_old = -1;
gint line_new = -1;
+ gint line_number;
+ gboolean current_line;
Region **current = &view->priv->lines_current_region;
+ line_number = gtk_text_iter_get_line (start) + 1;
+
+ current_line = (state & GTK_SOURCE_GUTTER_RENDERER_STATE_CURSOR) &&
+ gtk_text_view_get_cursor_visible (gtk_source_gutter_renderer_get_view (renderer));
+
ensure_scan (view, line_number);
if (!*current || view->priv->lines_previous_line + 1 != line_number)
@@ -835,7 +846,7 @@ line_renderer_data_func (GtkSourceGutter *gutter,
}
}
- g_object_set (cell, "line_old", line_old, "line_new", line_new, NULL);
+ g_object_set (renderer, "line_old", line_old, "line_new", line_new, NULL);
if (*current && (*current)->next && line_number == (*current)->next->line - 1)
{
@@ -849,7 +860,7 @@ line_renderer_data_func (GtkSourceGutter *gutter,
line_number,
view->priv->label_func_user_data);
- g_object_set (cell, "label", label, NULL);
+ g_object_set (renderer, "label", label, NULL);
g_free (label);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]