oldMono = appData.monoMode;
}
+void
+ExposeRedraw (Option *graph, int x, int y, int w, int h)
+{ // copy a selected part of the buffer bitmap to the display
+ cairo_t *cr = cairo_create((cairo_surface_t *) graph->textValue);
+ cairo_set_source_surface(cr, (cairo_surface_t *) graph->choice, 0, 0);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
+ cairo_rectangle(cr, x, y, w, h);
+ cairo_fill(cr);
+ cairo_destroy(cr);
+}
+
static void
CreatePNGBoard (char *s, int kind)
{
}
if(!pngPieceImages[color][piece]) { // we still did not manage to acquire a piece bitmap
- if(!(svgPieces[color][piece] = LoadSVG(appData.svgDirectory, color, piece))) // try to fall back on installed svg
+ if(!(svgPieces[color][piece] = LoadSVG(SVGDIR, color, piece))) // try to fall back on installed svg
DisplayError(_("No default pieces installed\nSelect your own -pieceImageDirectory"), 0); // give up
}
cairo_paint (cr);
cairo_destroy (cr);
- if(!appData.trueColors || !*appData.pieceDirectory && !appData.svgDirectory) { // operate on bitmap to color it (king-size hack...)
+ if(!appData.trueColors || !*appData.pieceDirectory) { // operate on bitmap to color it (king-size hack...)
int stride = cairo_image_surface_get_stride(cs)/4;
int *buf = (int *) cairo_image_surface_get_data(cs);
int i, j, p;
buf[i*stride + j] = c & 0xFF000000; // alpha channel is kept at same opacity
buf[i*stride + j] += ((int)(f*(p&0xFF0000)) & 0xFF0000) + ((int)(f*(p&0xFF00)) & 0xFF00) + (int)(f*(p&0xFF)); // add desired fraction of new color
if(color) buf[i*stride + j] += r | r << 8 | r << 16; // details on black pieces get their weight added in pure white
+ if(appData.monoMode) {
+ if(a < 64) buf[i*stride + j] = 0; // if not opaque enough, totally transparent
+ else if(2*r < a) buf[i*stride + j] = 0xFF000000; // if not light enough, totally black
+ else buf[i*stride + j] = 0xFFFFFFFF; // otherwise white
+ }
}
cairo_surface_mark_dirty(cs);
}