#include "menus.h"
#include "xboard.h"
#include "evalgraph.h"
+#include "xevalgraph.h"
+#include "draw.h"
#include "gettext.h"
#ifdef ENABLE_NLS
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)
{
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);
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);
{
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)
{
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",
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);
static void
InitializeEvalGraph (Option *opt, int w, int h)
{
- eGraphWindow = XtWindow(opt->handle);
-
if(w == 0) {
Arg args[10];
XtSetArg(args[0], XtNwidth, &evalGraphW);
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 );
{ 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)
{
{
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));