X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xevalgraph.c;h=f3cac1fd65adfa4c82380b64db0b47e7f3064e5e;hb=21a44c336aa8cd16a38f3c682386528c8f112650;hp=625a3f216decd480013c11ec68b65a1ae1b186bc;hpb=8e37ccb580c1dc9fd8ebd094c3e701d722d10327;p=xboard.git diff --git a/xevalgraph.c b/xevalgraph.c index 625a3f2..f3cac1f 100644 --- a/xevalgraph.c +++ b/xevalgraph.c @@ -77,6 +77,8 @@ extern char *getenv(); #include "menus.h" #include "xboard.h" #include "evalgraph.h" +#include "xevalgraph.h" +#include "draw.h" #include "gettext.h" #ifdef ENABLE_NLS @@ -108,29 +110,10 @@ Dimension evalGraphW, evalGraphH; char *crWhite = "#FFFFB0"; char *crBlack = "#AD5D3D"; -static Window eGraphWindow; -static cairo_surface_t *cs; +Option *disp; static Option *EvalCallback P((int button, int x, int y)); -static float -Color (char *col, int n) -{ - int c; - sscanf(col, "#%x", &c); - c = c >> 4*n & 255; - return c/255.; -} - -static void -SetPen(cairo_t *cr, float w, char *col, int dash) { - static const double dotted[] = {4.0, 4.0}; - static int len = sizeof(dotted) / sizeof(dotted[0]); - cairo_set_line_width (cr, w); - cairo_set_source_rgba (cr, Color(col, 4), Color(col, 2), Color(col, 0), 1.0); - if(dash) cairo_set_dash (cr, dotted, len, 0.0); -} - static void ChoosePen(cairo_t *cr, int i) { @@ -142,7 +125,7 @@ ChoosePen(cairo_t *cr, int i) SetPen(cr, 1.0, "#A0A0A0", 1); break; case PEN_BLUEDOTTED: - SetPen(cr, 0.5, "#0000FF", 1); + SetPen(cr, 1.0, "#0000FF", 1); break; case PEN_BOLDWHITE: SetPen(cr, 3.0, crWhite, 0); @@ -163,10 +146,10 @@ DrawSegment (int x, int y, int *lastX, int *lastY, enum PEN penType) static int curX, curY; if(penType != PEN_NONE) { - cairo_t *cr = cairo_create(cs); + cairo_t *cr = cairo_create(DRAWABLE(disp)); + cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); cairo_move_to (cr, curX, curY); cairo_line_to (cr, x,y); - cairo_close_path (cr); ChoosePen(cr, penType); cairo_stroke (cr); cairo_destroy (cr); @@ -182,7 +165,8 @@ DrawRectangle (int left, int top, int right, int bottom, int side, int style) { cairo_t *cr; - cr = cairo_create (cs); + cr = cairo_create (DRAWABLE(disp)); + cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); cairo_rectangle (cr, left, top, right-left, bottom-top); switch(side) { @@ -206,9 +190,9 @@ DrawRectangle (int left, int top, int right, int bottom, int side, int style) void DrawEvalText (char *buf, int cbBuf, int y) { - // the magic constants 7 and 5 should really be derived from the font size somehow + // the magic constants 8 and 5 should really be derived from the font size somehow cairo_text_extents_t extents; - cairo_t *cr = cairo_create(cs); + cairo_t *cr = cairo_create(DRAWABLE(disp)); /* GTK-TODO this has to go into the font-selection */ cairo_select_font_face (cr, "Sans", @@ -219,7 +203,7 @@ DrawEvalText (char *buf, int cbBuf, int y) cairo_text_extents (cr, buf, &extents); - cairo_move_to (cr, MarginX - 2 - 7*cbBuf, y+5); + cairo_move_to (cr, MarginX - 2 - 8*cbBuf, y+5); cairo_text_path (cr, buf); cairo_set_source_rgb (cr, 0.0, 0.0, 0); cairo_fill_preserve (cr); @@ -236,8 +220,6 @@ static int initDone = FALSE; static void InitializeEvalGraph (Option *opt, int w, int h) { - eGraphWindow = XtWindow(opt->handle); - if(w == 0) { Arg args[10]; XtSetArg(args[0], XtNwidth, &evalGraphW); @@ -246,24 +228,12 @@ InitializeEvalGraph (Option *opt, int w, int h) nWidthPB = evalGraphW; nHeightPB = evalGraphH; } else nWidthPB = w, nHeightPB = h; - if(cs) cairo_surface_destroy(cs); - cs=cairo_xlib_surface_create(xDisplay, eGraphWindow, DefaultVisual(xDisplay, 0), nWidthPB, nHeightPB); - initDone = TRUE; } // The following stuff is really back-end (but too little to bother with a separate file) static void -DisplayEvalGraph () -{ // back-end painting; calls back front-end primitives for lines, rectangles and text - char *t = MakeEvalTitle(_(title)); - if(t != title && nWidthPB < 340) t = MakeEvalTitle(nWidthPB < 240 ? "" : _("Eval")); - PaintEvalGraph(); - SetDialogTitle(EvalGraphDlg, t); -} - -static void EvalClick (int x, int y) { int index = GetMoveIndexFromPoint( x, y ); @@ -276,6 +246,17 @@ static Option graphOptions[] = { { 0, 2, 0, NULL, NULL, "", NULL, EndMark , "" } }; +static void +DisplayEvalGraph () +{ // back-end painting; calls back front-end primitives for lines, rectangles and text + char *t = MakeEvalTitle(_(title)); + nWidthPB = disp->max; nHeightPB = disp->value; + if(t != title && nWidthPB < 340) t = MakeEvalTitle(nWidthPB < 240 ? "" : _("Eval")); + PaintEvalGraph(); + GraphExpose(graphOptions, 0, 0, nWidthPB, nHeightPB); + SetDialogTitle(EvalGraphDlg, t); +} + static Option * EvalCallback (int button, int x, int y) { @@ -302,6 +283,7 @@ EvalGraphPopUp () { if (GenericPopUp(graphOptions, _(title), EvalGraphDlg, BoardWindow, NONMODAL, 1)) { InitializeEvalGraph(&graphOptions[0], 0, 0); // first time: add callbacks and initialize pens + disp = graphOptions; } else { SetDialogTitle(EvalGraphDlg, _(title)); SetIconName(EvalGraphDlg, _(title));