diff options
author | Owen Taylor <otaylor@src.gnome.org> | 2000-03-28 01:24:44 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-03-28 01:24:44 +0000 |
commit | 8098546227671a5d082fdf8f4811ee3ffca7f6d8 (patch) | |
tree | d1857c89ee73451cbb04bbf595c0dc8bade55987 /gtk/gtkentry.c | |
parent | 4238d406e928d1afd95ab0c6ae51b6a37f9780ea (diff) | |
download | gtk+-8098546227671a5d082fdf8f4811ee3ffca7f6d8.tar.gz |
Merge no-flicker branch into HEAD
Diffstat (limited to 'gtk/gtkentry.c')
-rw-r--r-- | gtk/gtkentry.c | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 6cc62ad2e5..50db536b07 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -826,14 +826,25 @@ static void gtk_entry_draw (GtkWidget *widget, GdkRectangle *area) { + GtkEntry *entry; + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_ENTRY (widget)); g_return_if_fail (area != NULL); + entry = GTK_ENTRY (widget); + if (GTK_WIDGET_DRAWABLE (widget)) { + GdkRectangle tmp_area = *area; + + tmp_area.x -= widget->style->klass->xthickness; + tmp_area.y -= widget->style->klass->xthickness; + + gdk_window_begin_paint_rect (entry->text_area, &tmp_area); gtk_widget_draw_focus (widget); gtk_entry_draw_text (GTK_ENTRY (widget)); + gdk_window_end_paint (entry->text_area); } } @@ -1295,7 +1306,6 @@ gtk_entry_draw_text (GtkEntry *entry) gint width, height; gint y; GdkDrawable *drawable; - gint use_backing_pixmap; GdkWChar *stars; GdkWChar *toprint; @@ -1327,25 +1337,10 @@ gtk_entry_draw_text (GtkEntry *entry) gdk_window_get_size (entry->text_area, &width, &height); - /* - If the widget has focus, draw on a backing pixmap to avoid flickering - and copy it to the text_area. - Otherwise draw to text_area directly for better speed. - */ - use_backing_pixmap = GTK_WIDGET_HAS_FOCUS (widget) && (entry->text != NULL); - if (use_backing_pixmap) - { - gtk_entry_make_backing_pixmap (entry, width, height); - drawable = entry->backing_pixmap; - } - else - { - drawable = entry->text_area; - } - gtk_paint_flat_box (widget->style, drawable, - GTK_WIDGET_STATE(widget), GTK_SHADOW_NONE, - NULL, widget, "entry_bg", - 0, 0, width, height); + gtk_paint_flat_box (widget->style, entry->text_area, + GTK_WIDGET_STATE(widget), GTK_SHADOW_NONE, + NULL, widget, "entry_bg", + 0, 0, width, height); y = (height - (widget->style->font->ascent + widget->style->font->descent)) / 2; y += widget->style->font->ascent; @@ -1388,7 +1383,7 @@ gtk_entry_draw_text (GtkEntry *entry) } if (selection_start_pos > start_pos) - gdk_draw_text_wc (drawable, widget->style->font, + gdk_draw_text_wc (entry->text_area, widget->style->font, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], INNER_BORDER + start_xoffset, y, toprint, @@ -1398,14 +1393,14 @@ gtk_entry_draw_text (GtkEntry *entry) (selection_start_pos < end_pos) && (selection_start_pos != selection_end_pos)) { - gtk_paint_flat_box (widget->style, drawable, + gtk_paint_flat_box (widget->style, entry->text_area, selected_state, GTK_SHADOW_NONE, NULL, widget, "text", INNER_BORDER + selection_start_xoffset, INNER_BORDER, selection_end_xoffset - selection_start_xoffset, height - 2*INNER_BORDER); - gdk_draw_text_wc (drawable, widget->style->font, + gdk_draw_text_wc (entry->text_area, widget->style->font, widget->style->fg_gc[selected_state], INNER_BORDER + selection_start_xoffset, y, toprint + selection_start_pos - start_pos, @@ -1413,7 +1408,7 @@ gtk_entry_draw_text (GtkEntry *entry) } if (selection_end_pos < end_pos) - gdk_draw_text_wc (drawable, widget->style->font, + gdk_draw_text_wc (entry->text_area, widget->style->font, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], INNER_BORDER + selection_end_xoffset, y, toprint + selection_end_pos - start_pos, @@ -1423,13 +1418,7 @@ gtk_entry_draw_text (GtkEntry *entry) g_free (toprint); if (editable->editable) - gtk_entry_draw_cursor_on_drawable (entry, drawable); - - if (use_backing_pixmap) - gdk_draw_pixmap(entry->text_area, - widget->style->fg_gc[GTK_STATE_NORMAL], - entry->backing_pixmap, - 0, 0, 0, 0, width, height); + gtk_entry_draw_cursor_on_drawable (entry, entry->text_area); } } @@ -1472,16 +1461,26 @@ gtk_entry_draw_cursor_on_drawable (GtkEntry *entry, GdkDrawable *drawable) } else { + int width, height; + GdkRectangle area; + gint yoffset = (text_area_height - (widget->style->font->ascent + widget->style->font->descent)) / 2 + widget->style->font->ascent; + area.x = xoffset; + area.y = INNER_BORDER; + area.width = 1; + area.height = text_area_height - INNER_BORDER; + + gdk_window_get_size (entry->text_area, &width, &height); + gtk_paint_flat_box (widget->style, drawable, GTK_WIDGET_STATE(widget), GTK_SHADOW_NONE, - NULL, widget, "entry_bg", - xoffset, INNER_BORDER, - 1, text_area_height - INNER_BORDER); + &area, widget, "entry_bg", + 0, 0, width, height); + /* Draw the character under the cursor again */ |