From f68a94285500e535203965e56772b220ccf07c15 Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Fri, 27 Dec 2013 21:47:55 +0100 Subject: [PATCH] Cure weirdness when dragging outside of board Dragging outside the board (when people maximized the window) did not properly restore background, (leaving a trail of dragged piece). Filling the canvas with white when it is creatd cured this. The problem most likely was that unitialized cairo surfaces had transparancy, and writing back transparancy doesn't helpmuch to erase things. --- gtk/xoptions.c | 7 +++++++ xaw/xoptions.c | 7 +++++++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 90a45ea..fb872ce 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -823,8 +823,15 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata) // to give drawing routines opportunity to use it before first expose event // (which are only processed when main gets to the event loop, so after all init!) // so only change when size is no longer good + cairo_t *cr; if(graph->choice) cairo_surface_destroy((cairo_surface_t *) graph->choice); graph->choice = (char**) cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h); + // paint white, to prevent weirdness when people maximize window and drag pieces over space next to board + cr = cairo_create ((cairo_surface_t *) graph->choice); + cairo_rectangle (cr, 0, 0, w, h); + cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); + cairo_fill(cr); + cairo_destroy (cr); break; } w = eevent->area.width; diff --git a/xaw/xoptions.c b/xaw/xoptions.c index f74d673..d8ccd1e 100644 --- a/xaw/xoptions.c +++ b/xaw/xoptions.c @@ -708,8 +708,15 @@ GraphEventProc(Widget widget, caddr_t client_data, XEvent *event) // to give drawing routines opportunity to use it before first expose event // (which are only processed when main gets to the event loop, so after all init!) // so only change when size is no longer good + cairo_t *cr; if(graph->choice) cairo_surface_destroy((cairo_surface_t *) graph->choice); graph->choice = (char**) cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h); + // paint white, to prevent weirdness when people maximize window and drag pieces over space next to board + cr = cairo_create ((cairo_surface_t *) graph->choice); + cairo_rectangle (cr, 0, 0, w, h); + cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); + cairo_fill(cr); + cairo_destroy (cr); break; } w = ((XExposeEvent*)event)->width; -- 1.7.0.4