From: H.G. Muller Date: Fri, 27 Dec 2013 20:47:55 +0000 (+0100) Subject: Cure weirdness when dragging outside of board X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=f68a94285500e535203965e56772b220ccf07c15;p=xboard.git 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. --- 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;