From ac48f2330df7b367e5afc12947bf9de8d10b3a89 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 15 Aug 2010 19:38:32 +0200 Subject: [PATCH] API: Add gtk_cairo_draw_insertion_cursor() For now just add it instead of replacing the current function. In the end, this one should probably be renamed to gtk_draw_insertion_cursor() and the current gtk_draw_insertion_cursor() should die. --- gtk/gtk.symbols | 1 + gtk/gtkstyle.c | 39 +++++++++++++++++++++++++++++++-------- gtk/gtkstyle.h | 6 ++++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 4979316c82..ebe36be086 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -1043,6 +1043,7 @@ gtk_style_new gtk_style_render_icon gtk_style_set_background gtk_draw_insertion_cursor +gtk_cairo_draw_insertion_cursor gtk_style_get_style_property gtk_style_get_valist gtk_style_get diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index 6ab4e47839..0344a9659b 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -6494,12 +6494,29 @@ _gtk_widget_get_cursor_color (GtkWidget *widget, *color = gtk_widget_get_style (widget)->text[GTK_STATE_NORMAL]; } -static void -draw_insertion_cursor (GtkWidget *widget, - cairo_t *cr, - const GdkRectangle *location, - GtkTextDirection direction, - gboolean draw_arrow) +/** + * gtk_cairo_draw_insertion_cursor: + * @widget: a #GtkWidget + * @cr: cairo context to draw to + * @location: location where to draw the cursor (@location->width is ignored) + * @is_primary: if the cursor should be the primary cursor color. + * @direction: whether the cursor is left-to-right or + * right-to-left. Should never be #GTK_TEXT_DIR_NONE + * @draw_arrow: %TRUE to draw a directional arrow on the + * cursor. Should be %FALSE unless the cursor is split. + * + * Draws a text caret on @cr at @location. This is not a style function + * but merely a convenience function for drawing the standard cursor shape. + * + * Since: 3.0 + **/ +void +gtk_cairo_draw_insertion_cursor (GtkWidget *widget, + cairo_t *cr, + const GdkRectangle *location, + gboolean is_primary, + GtkTextDirection direction, + gboolean draw_arrow) { gint stem_width; gint arrow_width; @@ -6507,6 +6524,13 @@ draw_insertion_cursor (GtkWidget *widget, gfloat cursor_aspect_ratio; gint offset; + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (cr != NULL); + g_return_if_fail (location != NULL); + g_return_if_fail (direction != GTK_TEXT_DIR_NONE); + + gdk_cairo_set_source_color (cr, get_insertion_cursor_color (widget, is_primary)); + /* When changing the shape or size of the cursor here, * propagate the changes to gtktextview.c:text_window_invalidate_cursors(). */ @@ -6593,8 +6617,7 @@ gtk_draw_insertion_cursor (GtkWidget *widget, cairo_clip (cr); } - gdk_cairo_set_source_color (cr, get_insertion_cursor_color (widget, is_primary)); - draw_insertion_cursor (widget, cr, location, direction, draw_arrow); + gtk_cairo_draw_insertion_cursor (widget, cr, location, is_primary, direction, draw_arrow); cairo_destroy (cr); } diff --git a/gtk/gtkstyle.h b/gtk/gtkstyle.h index f0946e7f2d..f1c8399b35 100644 --- a/gtk/gtkstyle.h +++ b/gtk/gtkstyle.h @@ -900,6 +900,12 @@ void gtk_draw_insertion_cursor (GtkWidget *widget, gboolean is_primary, GtkTextDirection direction, gboolean draw_arrow); +void gtk_cairo_draw_insertion_cursor (GtkWidget *widget, + cairo_t *cr, + const GdkRectangle *location, + gboolean is_primary, + GtkTextDirection direction, + gboolean draw_arrow); void _gtk_widget_get_cursor_color (GtkWidget *widget, GdkColor *color);