From: H.G.Muller Date: Wed, 2 Dec 2015 11:53:19 +0000 (+0100) Subject: Erase old logo before drawing new one (XB) X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=6c9b0c2fe93118c2d98d4667e09544cac74a4d8b;p=xboard.git Erase old logo before drawing new one (XB) In case of an invalid or absent logo, the previous logo kept being displayed. Now the area is painted grai first. Also fixes a bug in the expose area. --- diff --git a/draw.c b/draw.c index 1ac50c6..849f33f 100644 --- a/draw.c +++ b/draw.c @@ -657,18 +657,25 @@ DrawLogo (Option *opt, void *logo) cairo_t *cr; int w, h; - if(!logo || !opt) return; - img = cairo_image_surface_create_from_png (logo); - w = cairo_image_surface_get_width (img); - h = cairo_image_surface_get_height (img); + if(!opt) return; cr = cairo_create(DRAWABLE(opt)); -// cairo_scale(cr, (float)appData.logoSize/w, appData.logoSize/(2.*h)); - cairo_scale(cr, (float)opt->max/w, (float)opt->value/h); - cairo_set_source_surface (cr, img, 0, 0); - cairo_paint (cr); + cairo_rectangle (cr, 0, 0, opt->max, opt->value); + cairo_set_source_rgba(cr, 0.5, 0.5, 0.5, 1.0); + cairo_fill(cr); // paint background in case logo does not exist + if(logo) { + img = cairo_image_surface_create_from_png (logo); + if(cairo_surface_status(img) == CAIRO_STATUS_SUCCESS) { + w = cairo_image_surface_get_width (img); + h = cairo_image_surface_get_height (img); +// cairo_scale(cr, (float)appData.logoSize/w, appData.logoSize/(2.*h)); + cairo_scale(cr, (float)opt->max/w, (float)opt->value/h); + cairo_set_source_surface (cr, img, 0, 0); + cairo_paint (cr); + } + cairo_surface_destroy (img); + } cairo_destroy (cr); - cairo_surface_destroy (img); - GraphExpose(opt, 0, 0, appData.logoSize, appData.logoSize/2); + GraphExpose(opt, 0, 0, opt->max, opt->value); } static void