*
* Copyright 2005 Alessandro Scotti
*
+ * Enhancments Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ *
* ------------------------------------------------------------------------
*
* GNU XBoard is free software: you can redistribute it and/or modify
int MarginH = 4;
// back-end
-static void DrawLine( int x1, int y1, int x2, int y2, int penType )
+static void
+DrawLine (int x1, int y1, int x2, int y2, int penType)
{
DrawSegment( x1, y1, NULL, NULL, PEN_NONE );
DrawSegment( x2, y2, NULL, NULL, penType );
}
// back-end
-static void DrawLineEx( int x1, int y1, int x2, int y2, int penType )
+static void
+DrawLineEx (int x1, int y1, int x2, int y2, int penType)
{
int savX, savY;
DrawSegment( x1, y1, &savX, &savY, PEN_NONE );
}
// back-end
-static int GetPvScore( int index )
+static int
+GetPvScore (int index)
{
int score = currPvInfo[ index ].score;
return score;
}
+char *
+MakeEvalTitle (char *title)
+{
+ int score, depth;
+ static char buf[MSG_SIZ];
+
+ if( currCurrent <0 ) return title; // currCurrent = -1 crashed WB on start without ini file!
+ score = currPvInfo[ currCurrent ].score;
+ depth = currPvInfo[ currCurrent ].depth;
+
+ if( depth <=0 ) return title;
+ if( currCurrent & 1 ) score = -score; /* Flip score for black */
+ snprintf(buf, MSG_SIZ, "%s {%d: %s%.2f/%-2d %d}", title, currCurrent/2+1,
+ score>0 ? "+" : " ", score/100., depth, (currPvInfo[currCurrent].time+50)/100);
+
+ return buf;
+}
+
// back-end
/*
For a centipawn value, this function returns the height of the corresponding
Note: height can be negative!
*/
-static int GetValueY( int value )
+static int
+GetValueY (int value)
{
if( value < -range*700 ) value = -range*700;
if( value > +range*700 ) value = +range*700;
-
- return (nHeightPB / 2) - (int)(value * (nHeightPB - 2*MarginH) / (1400.*range));
+ if(value > 100*range) value += (appData.zoom - 1)*100*range; else
+ if(value < -100*range) value -= (appData.zoom - 1)*100*range; else
+ value *= appData.zoom;
+ return (nHeightPB / 2) - (int)(value * (nHeightPB - 2*MarginH) / ((1200. + 200.*appData.zoom)*range));
}
// the brush selection is made part of the DrawLine, by passing a style argument
// the wrapper for doing the text output makes this back-end
-static void DrawAxisSegmentHoriz( int value, Boolean drawValue )
+static void
+DrawAxisSegmentHoriz (int value, Boolean drawValue)
{
int y = GetValueY( range*value*100 );
// The DrawLines again must select their own brush.
// the initial brush selection is useless? BkMode needed for dotted line and text
-static void DrawAxis()
+static void
+DrawAxis ()
{
- int cy = nHeightPB / 2;
+ int cy = nHeightPB / 2, space = nHeightPB/(6 + appData.zoom);
-// SelectObject( hdcPB, GetStockObject(NULL_BRUSH) );
-
-// SetBkMode( hdcPB, TRANSPARENT );
-
DrawAxisSegmentHoriz( +5, TRUE );
- DrawAxisSegmentHoriz( +3, FALSE );
- DrawAxisSegmentHoriz( +1, FALSE );
+ DrawAxisSegmentHoriz( +3, space >= 20 );
+ DrawAxisSegmentHoriz( +1, space >= 20 && space*appData.zoom >= 40 );
DrawAxisSegmentHoriz( 0, TRUE );
- DrawAxisSegmentHoriz( -1, FALSE );
- DrawAxisSegmentHoriz( -3, FALSE );
+ DrawAxisSegmentHoriz( -1, space >= 20 && space*appData.zoom >= 40 );
+ DrawAxisSegmentHoriz( -3, space >= 20 );
DrawAxisSegmentHoriz( -5, TRUE );
DrawLine( MarginX + MarginW, cy, nWidthPB - MarginW, cy, PEN_BLACK ); // x-axis
}
// back-end
-static void DrawHistogram( int x, int y, int width, int value, int side )
+static void
+DrawHistogram (int x, int y, int width, int value, int side)
{
int left, top, right, bottom;
- if( value > -25 && value < +25 ) return;
+ if( value > -appData.evalThreshold*range && value < +appData.evalThreshold*range ) return;
left = x;
right = left + width + 1;
}
// back-end
-static void DrawSeparator( int index, int x )
+static void
+DrawSeparator (int index, int x)
{
if( index > 0 ) {
if( index == currCurrent ) {
// made back-end by replacing MoveToEx and LineTo by DrawSegment
/* Actually draw histogram as a diagram, cause there's too much data */
-static void DrawHistogramAsDiagram( int cy, int paint_width, int hist_count )
+static void
+DrawHistogramAsDiagram (int cy, int paint_width, int hist_count)
{
double step;
int i;
}
// back-end, delete pen selection
-static void DrawHistogramFull( int cy, int hist_width, int hist_count )
+static void
+DrawHistogramFull (int cy, int hist_width, int hist_count)
{
int i;
} VisualizationData;
// back-end
-static Boolean InitVisualization( VisualizationData * vd )
+static Boolean
+InitVisualization (VisualizationData *vd)
{
Boolean result = FALSE;
}
// back-end
-static void DrawHistograms()
+static void
+DrawHistograms ()
{
VisualizationData vd;
}
// back-end
-int GetMoveIndexFromPoint( int x, int y )
+int
+GetMoveIndexFromPoint (int x, int y)
{
int result = -1;
int start_x = MarginX + MarginW;
}
// init and display part split of so they can be moved to front end
-void PaintEvalGraph( void )
+void
+PaintEvalGraph (void)
{
VariantClass v = gameInfo.variant;
range = (gameInfo.holdingsWidth && v != VariantSuper && v != VariantGreat && v != VariantSChess) ? 2 : 1; // [HGM] double range in drop games
DrawAxis();
DrawHistograms();
}
-