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?p=xboard.git;a=commitdiff_plain;h=e5b66e5d3691c26f964cc9ace83baecb4c5e87ec 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 496cad1..b8b64f6 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;