diff options
author | Benjamin Otte <otte@redhat.com> | 2016-10-22 04:59:15 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-10-27 05:07:23 +0200 |
commit | a81c309c390b6da23067654b16af4dd15c2fcc11 (patch) | |
tree | 367807d6a59c8e4523ee5371053fbd82a1ec7e58 /gtk/gtktextview.c | |
parent | 0cf4fdcb86567d21fdcdf4fbfab20f7f6b1acbbe (diff) | |
download | gtk+-a81c309c390b6da23067654b16af4dd15c2fcc11.tar.gz |
textview: Use gtk_widget_draw()
Diffstat (limited to 'gtk/gtktextview.c')
-rw-r--r-- | gtk/gtktextview.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 7debc1729c..f0d8cb3bc0 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -4310,8 +4310,8 @@ gtk_text_view_size_allocate (GtkWidget *widget, /* widget->window doesn't get auto-redrawn as the layout is computed, so has to * be invalidated */ - if (size_changed && gtk_widget_get_realized (widget)) - gdk_window_invalidate_rect (gtk_widget_get_window (widget), NULL, FALSE); + if (size_changed) + gtk_widget_queue_draw (widget); } static void @@ -8705,8 +8705,10 @@ gtk_text_view_value_changed (GtkAdjustment *adjustment, */ if (priv->width_changed) { - if (gtk_widget_get_realized (GTK_WIDGET (text_view))) - gdk_window_invalidate_rect (priv->text_window->bin_window, NULL, FALSE); + GdkRectangle *rect = &priv->text_window->allocation; + gtk_widget_queue_draw_area (GTK_WIDGET (text_view), + rect->x, rect->y, + rect->width, rect->height); priv->width_changed = FALSE; } @@ -9842,6 +9844,7 @@ static void text_window_invalidate_rect (GtkTextWindow *win, GdkRectangle *rect) { + GtkTextViewPrivate *priv = GTK_TEXT_VIEW (win->widget)->priv; GdkRectangle window_rect; if (!win->bin_window) @@ -9862,16 +9865,20 @@ text_window_invalidate_rect (GtkTextWindow *win, switch (win->type) { case GTK_TEXT_WINDOW_TEXT: + window_rect.x -= priv->xoffset; + window_rect.y -= priv->yoffset; break; case GTK_TEXT_WINDOW_LEFT: case GTK_TEXT_WINDOW_RIGHT: window_rect.x = 0; + window_rect.y -= priv->yoffset; window_rect.width = win->allocation.width; break; case GTK_TEXT_WINDOW_TOP: case GTK_TEXT_WINDOW_BOTTOM: + window_rect.x -= priv->xoffset; window_rect.y = 0; window_rect.height = win->allocation.height; break; @@ -9882,7 +9889,14 @@ text_window_invalidate_rect (GtkTextWindow *win, break; } - gdk_window_invalidate_rect (win->bin_window, &window_rect, FALSE); + window_rect.x += win->allocation.x; + window_rect.y += win->allocation.y; + if (!gdk_rectangle_intersect (&window_rect, &win->allocation, &window_rect)) + return; + + gtk_widget_queue_draw_area (win->widget, + window_rect.x, window_rect.y, + window_rect.width, window_rect.height); } static void |