Fix multi-leg promotions
[xboard.git] / evalgraph.c
index 2767560..1a8bd07 100644 (file)
@@ -5,7 +5,8 @@
  *
  * Copyright 2005 Alessandro Scotti
  *
- * Enhancments Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ * Enhancments Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015,
+ * 2016 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
  *
@@ -53,6 +54,7 @@ int currFirst = 0;
 int currLast = 0;
 int currCurrent = -1;
 int range = 1;
+int differentialView;
 
 int nWidthPB = 0;
 int nHeightPB = 0;
@@ -85,6 +87,7 @@ GetPvScore (int index)
 {
     int score = currPvInfo[ index ].score;
 
+    if(differentialView) score = index < currLast-1 ? -currPvInfo[ index+1 ].score - score : 0;
     if( index & 1 ) score = -score; /* Flip score for black */
 
     return score;
@@ -312,15 +315,26 @@ static void
 DrawHistograms ()
 {
     VisualizationData vd;
+    int i; double step = 1;
 
     if( InitVisualization( &vd ) ) {
         if( vd.hist_width < MIN_HIST_WIDTH ) {
             DrawHistogramAsDiagram( vd.cy, vd.paint_width, vd.hist_count );
+            step = 0.5*vd.paint_width / (((vd.hist_count | 7) + 1)/2 + 1.);
         }
         else {
-            DrawHistogramFull( vd.cy, vd.hist_width, vd.hist_count );
+            DrawHistogramFull( vd.cy, step = vd.hist_width, vd.hist_count );
         }
     }
+    if(!differentialView) return;
+    differentialView = 0;
+    DrawSegment( MarginX + MarginW, vd.cy, NULL, NULL, PEN_NONE );
+    for( i=0; i<vd.hist_count; i++ ) {
+        int index = currFirst + i;
+        int x = MarginX + MarginW + index * step + step/2;
+        DrawSegment((int) x, GetValueY( GetPvScore(index) ), NULL, NULL, PEN_ANY );
+    }
+    differentialView = 1;
 }
 
 // back-end