diff options
| author | Jeff Walsh | 2020-01-13 16:17:50 +1100 |
|---|---|---|
| committer | Jeff Walsh | 2020-11-24 12:24:39 +1100 |
| commit | e021e233b4e96740dbc78bbc2717de6ee6e68291 (patch) | |
| tree | e6060f5489af938c99443e78a5c12330983c4501 /src | |
| parent | 975289663f353f830d121058320150ff099e809a (diff) | |
| download | emacs-e021e233b4e96740dbc78bbc2717de6ee6e68291.tar.gz emacs-e021e233b4e96740dbc78bbc2717de6ee6e68291.zip | |
End Resize flickering by copying surface rather than just clearing
* src/pgtkterm.h (FRAME_NATIVE_WINDOW):
* src/pgtkterm.c (pgtk_set_window_size): cleanup traces
(x_draw_bar_cursor, pgtk_handle_draw, syms_of_pgtkterm):
Diffstat (limited to 'src')
| -rw-r--r-- | src/pgtkterm.c | 18 | ||||
| -rw-r--r-- | src/pgtkterm.h | 4 |
2 files changed, 6 insertions, 16 deletions
diff --git a/src/pgtkterm.c b/src/pgtkterm.c index e214cc26c86..86ebf864a77 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c | |||
| @@ -408,7 +408,6 @@ pgtk_set_window_size (struct frame *f, | |||
| 408 | block_input (); | 408 | block_input (); |
| 409 | 409 | ||
| 410 | gtk_widget_get_size_request(FRAME_GTK_WIDGET(f), &pixelwidth, &pixelheight); | 410 | gtk_widget_get_size_request(FRAME_GTK_WIDGET(f), &pixelwidth, &pixelheight); |
| 411 | PGTK_TRACE("old: %dx%d", pixelwidth, pixelheight); | ||
| 412 | 411 | ||
| 413 | if (pixelwise) | 412 | if (pixelwise) |
| 414 | { | 413 | { |
| @@ -429,18 +428,13 @@ pgtk_set_window_size (struct frame *f, | |||
| 429 | make_fixnum (FRAME_PGTK_TITLEBAR_HEIGHT (f)), | 428 | make_fixnum (FRAME_PGTK_TITLEBAR_HEIGHT (f)), |
| 430 | make_fixnum (FRAME_TOOLBAR_HEIGHT (f)))); | 429 | make_fixnum (FRAME_TOOLBAR_HEIGHT (f)))); |
| 431 | 430 | ||
| 432 | PGTK_TRACE("new: %dx%d", pixelwidth, pixelheight); | ||
| 433 | for (GtkWidget *w = FRAME_GTK_WIDGET(f); w != NULL; w = gtk_widget_get_parent(w)) { | 431 | for (GtkWidget *w = FRAME_GTK_WIDGET(f); w != NULL; w = gtk_widget_get_parent(w)) { |
| 434 | PGTK_TRACE("%p %s %d %d", w, G_OBJECT_TYPE_NAME(w), gtk_widget_get_mapped(w), gtk_widget_get_visible(w)); | ||
| 435 | gint wd, hi; | 432 | gint wd, hi; |
| 436 | gtk_widget_get_size_request(w, &wd, &hi); | 433 | gtk_widget_get_size_request(w, &wd, &hi); |
| 437 | PGTK_TRACE(" %dx%d", wd, hi); | ||
| 438 | GtkAllocation alloc; | 434 | GtkAllocation alloc; |
| 439 | gtk_widget_get_allocation(w, &alloc); | 435 | gtk_widget_get_allocation(w, &alloc); |
| 440 | PGTK_TRACE(" %dx%d+%d+%d", alloc.width, alloc.height, alloc.x, alloc.y); | ||
| 441 | } | 436 | } |
| 442 | 437 | ||
| 443 | PGTK_TRACE("pgtk_set_window_size: %p: %dx%d.", f, width, height); | ||
| 444 | f->output_data.pgtk->preferred_width = pixelwidth; | 438 | f->output_data.pgtk->preferred_width = pixelwidth; |
| 445 | f->output_data.pgtk->preferred_height = pixelheight; | 439 | f->output_data.pgtk->preferred_height = pixelheight; |
| 446 | x_wm_set_size_hint(f, 0, 0); | 440 | x_wm_set_size_hint(f, 0, 0); |
| @@ -679,6 +673,7 @@ x_display_pixel_width (struct pgtk_display_info *dpyinfo) | |||
| 679 | return gdk_screen_get_width(gscr); | 673 | return gdk_screen_get_width(gscr); |
| 680 | } | 674 | } |
| 681 | 675 | ||
| 676 | |||
| 682 | void | 677 | void |
| 683 | x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) | 678 | x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) |
| 684 | /* Set frame F's `no-focus-on-map' parameter which, if non-nil, means | 679 | /* Set frame F's `no-focus-on-map' parameter which, if non-nil, means |
| @@ -2632,8 +2627,6 @@ pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x, | |||
| 2632 | { | 2627 | { |
| 2633 | PGTK_TRACE("draw_window_cursor: %d, %d, %d, %d, %d, %d.", | 2628 | PGTK_TRACE("draw_window_cursor: %d, %d, %d, %d, %d, %d.", |
| 2634 | x, y, cursor_type, cursor_width, on_p, active_p); | 2629 | x, y, cursor_type, cursor_width, on_p, active_p); |
| 2635 | struct frame *f = XFRAME (WINDOW_FRAME (w)); | ||
| 2636 | PGTK_TRACE("%p\n", f->output_data.pgtk); | ||
| 2637 | 2630 | ||
| 2638 | if (on_p) | 2631 | if (on_p) |
| 2639 | { | 2632 | { |
| @@ -4807,9 +4800,9 @@ pgtk_handle_draw(GtkWidget *widget, cairo_t *cr, gpointer *data) | |||
| 4807 | if (src == NULL && FRAME_CR_ACTIVE_CONTEXT(f) != NULL) | 4800 | if (src == NULL && FRAME_CR_ACTIVE_CONTEXT(f) != NULL) |
| 4808 | src = cairo_get_target(FRAME_CR_ACTIVE_CONTEXT(f)); | 4801 | src = cairo_get_target(FRAME_CR_ACTIVE_CONTEXT(f)); |
| 4809 | } | 4802 | } |
| 4810 | APGTK_TRACE(" surface=%p", src); | 4803 | PGTK_TRACE(" surface=%p", src); |
| 4811 | if (src != NULL) { | 4804 | if (src != NULL) { |
| 4812 | APGTK_TRACE(" resized_p=%d", f->resized_p); | 4805 | PGTK_TRACE(" resized_p=%d", f->resized_p); |
| 4813 | PGTK_TRACE(" garbaged=%d", f->garbaged); | 4806 | PGTK_TRACE(" garbaged=%d", f->garbaged); |
| 4814 | PGTK_TRACE(" scroll_bar_width=%f", (double) PGTK_SCROLL_BAR_WIDTH(f)); | 4807 | PGTK_TRACE(" scroll_bar_width=%f", (double) PGTK_SCROLL_BAR_WIDTH(f)); |
| 4815 | // PGTK_TRACE(" scroll_bar_adjust=%d", PGTK_SCROLL_BAR_ADJUST(f)); | 4808 | // PGTK_TRACE(" scroll_bar_adjust=%d", PGTK_SCROLL_BAR_ADJUST(f)); |
| @@ -6581,9 +6574,6 @@ pgtk_begin_cr_clip (struct frame *f) | |||
| 6581 | 6574 | ||
| 6582 | cr = FRAME_CR_CONTEXT (f) = cairo_create (surface); | 6575 | cr = FRAME_CR_CONTEXT (f) = cairo_create (surface); |
| 6583 | cairo_surface_destroy (surface); | 6576 | cairo_surface_destroy (surface); |
| 6584 | |||
| 6585 | cr = cairo_create (FRAME_CR_SURFACE (f)); | ||
| 6586 | FRAME_CR_CONTEXT (f) = cr; | ||
| 6587 | } | 6577 | } |
| 6588 | 6578 | ||
| 6589 | cairo_save (cr); | 6579 | cairo_save (cr); |
| @@ -6601,7 +6591,7 @@ pgtk_end_cr_clip (struct frame *f) | |||
| 6601 | void | 6591 | void |
| 6602 | pgtk_set_cr_source_with_gc_foreground (struct frame *f, Emacs_GC *gc) | 6592 | pgtk_set_cr_source_with_gc_foreground (struct frame *f, Emacs_GC *gc) |
| 6603 | { | 6593 | { |
| 6604 | PGTK_TRACE("pgtk_set_cr_source_with_gc_foreground: %08lx", gc->foreground); | 6594 | PGTK_TRACE ("pgtk_set_cr_source_with_gc_foreground: %08lx", gc->foreground); |
| 6605 | pgtk_set_cr_source_with_color(f, gc->foreground); | 6595 | pgtk_set_cr_source_with_color(f, gc->foreground); |
| 6606 | } | 6596 | } |
| 6607 | 6597 | ||
diff --git a/src/pgtkterm.h b/src/pgtkterm.h index 5c59d5e623a..9d6b0a1f800 100644 --- a/src/pgtkterm.h +++ b/src/pgtkterm.h | |||
| @@ -425,8 +425,8 @@ enum | |||
| 425 | 425 | ||
| 426 | /* aliases */ | 426 | /* aliases */ |
| 427 | #define FRAME_PGTK_VIEW(f) FRAME_GTK_WIDGET(f) | 427 | #define FRAME_PGTK_VIEW(f) FRAME_GTK_WIDGET(f) |
| 428 | #define FRAME_X_WINDOW(f) FRAME_GTK_WIDGET(f) | 428 | #define FRAME_X_WINDOW(f) FRAME_GTK_OUTER_WIDGET(f) |
| 429 | #define FRAME_NATIVE_WINDOW(f) FRAME_GTK_WIDGET(f) | 429 | #define FRAME_NATIVE_WINDOW(f) GTK_WINDOW(FRAME_X_WINDOW(f)) |
| 430 | 430 | ||
| 431 | #define FRAME_X_DISPLAY(f) (FRAME_DISPLAY_INFO(f)->gdpy) | 431 | #define FRAME_X_DISPLAY(f) (FRAME_DISPLAY_INFO(f)->gdpy) |
| 432 | 432 | ||