[chronojump] Nicer code on Cairo grid
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Nicer code on Cairo grid
- Date: Tue, 7 Jan 2020 14:26:09 +0000 (UTC)
commit 7df3fe8b3e9da7e0c013d2e7f0967da10a86ce95
Author: Xavier de Blas <xaviblas gmail com>
Date: Thu Jan 2 17:01:15 2020 +0100
Nicer code on Cairo grid
src/gui/cairo/xy.cs | 71 ++++++++++++++++++++++++++++-------------------------
1 file changed, 37 insertions(+), 34 deletions(-)
---
diff --git a/src/gui/cairo/xy.cs b/src/gui/cairo/xy.cs
index cda8dbf8..75df46fd 100644
--- a/src/gui/cairo/xy.cs
+++ b/src/gui/cairo/xy.cs
@@ -141,9 +141,7 @@ public abstract class CairoXY
printText(2, Convert.ToInt32(outerMargins/2), 0, textHeight, "Height (cm)", g, false);
printText(graphWidth - Convert.ToInt32(outerMargins/2), graphHeight - outerMargins, 0,
textHeight, axisRightLabel, g, false);
- //2 paint grid: horizontal, vertical
- paintGrid (minY, absoluteMaxY, 5, true);
- paintGrid (minX, absoluteMaxX, 5, false);
+ paintGrid (minX, absoluteMaxX, minY, absoluteMaxY, 5);
}
protected void plotPredictedLine()
@@ -281,14 +279,44 @@ public abstract class CairoXY
}
//TODO: fix if min == max (crashes)
- protected void paintGrid (double min, double max, int seps, bool horiz)
+ protected void paintGrid (double minX, double maxX, double minY, double maxY, int seps)
{
- LogB.Information(string.Format("paintGrid: {0}, {1}, {2}, {3}", min, max, seps, horiz));
+ //LogB.Information(string.Format("paintGrid: {0}, {1}, {2}, {3}", min, max, seps, horiz));
- //TODO: improve this
- if(min == max)
- return;
+ double stepX = getGridStep(minX, maxX, seps);
+ double stepY = getGridStep(minY, maxY, seps);
+ g.Save();
+ g.SetDash(new double[]{1, 2}, 0);
+ // i <= max*1.5 to allow to have grid just above the maxpoint if it's below innermargins
+ // see: if(ytemp < outerMargins) continue;
+ for(double i = minX; i <= maxX *1.5 ; i += stepX)
+ {
+ int xtemp = Convert.ToInt32(calculatePaintX(i, graphWidth, maxX, minX, outerMargins +
innerMargins, outerMargins + innerMargins));
+ if(xtemp < outerMargins || xtemp > graphWidth - outerMargins)
+ continue;
+
+ g.MoveTo(xtemp, graphHeight - outerMargins);
+ g.LineTo(xtemp, outerMargins);
+ printText(xtemp, graphHeight - Convert.ToInt32(outerMargins/2), 0, textHeight,
Util.TrimDecimals(i, 1), g, true);
+ }
+
+ for(double i = minY; i <= maxY *1.5 ; i += stepY)
+ {
+ int ytemp = Convert.ToInt32(calculatePaintY(i, graphHeight, maxY, minY, outerMargins
+ innerMargins, outerMargins + innerMargins));
+ if(ytemp < outerMargins || ytemp > graphHeight - outerMargins)
+ continue;
+
+ g.MoveTo(outerMargins, ytemp);
+ g.LineTo(graphWidth - outerMargins, ytemp);
+ printText(Convert.ToInt32(outerMargins/2), ytemp, 0, textHeight, Util.TrimDecimals(i,
1), g, true);
+ }
+ g.Stroke ();
+ g.Restore();
+ }
+
+ private double getGridStep(double min, double max, int seps)
+ {
//show 5 steps positive, 5 negative (if possible)
double temp = Util.DivideSafe(max - min, seps);
double step = temp;
@@ -309,32 +337,7 @@ public abstract class CairoXY
if(step == 0)
step = 1;
- g.Save();
- g.SetDash(new double[]{1, 2}, 0);
- // i <= max*1.5 to allow to have grid just above the maxpoint if it's below innermargins
- // see: if(ytemp < outerMargins) continue;
- for(double i = min; i <= max *1.5 ; i += step)
- {
- //LogB.Information("i: " + i.ToString());
- if(horiz)
- {
- int ytemp = Convert.ToInt32(calculatePaintY(i, graphHeight, max, min,
outerMargins + innerMargins, outerMargins + innerMargins));
- if(ytemp < outerMargins || ytemp > graphHeight - outerMargins)
- continue;
- g.MoveTo(outerMargins, ytemp);
- g.LineTo(graphWidth - outerMargins, ytemp);
- printText(Convert.ToInt32(outerMargins/2), ytemp, 0, textHeight,
Util.TrimDecimals(i, 1), g, true);
- } else {
- int xtemp = Convert.ToInt32(calculatePaintX(i, graphWidth, max, min,
outerMargins + innerMargins, outerMargins + innerMargins));
- if(xtemp < outerMargins || xtemp > graphWidth - outerMargins)
- continue;
- g.MoveTo(xtemp, graphHeight - outerMargins);
- g.LineTo(xtemp, outerMargins);
- printText(xtemp, graphHeight - Convert.ToInt32(outerMargins/2), 0,
textHeight, Util.TrimDecimals(i, 1), g, true);
- }
- }
- g.Stroke ();
- g.Restore();
+ return step;
}
protected double calculatePaintX(double currentValue, int ancho, double maxValue, double minValue,
int rightMargin, int leftMargin)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]