From 04fc13f4d246e6a078341b12a03cbebeb2e48775 Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Tue, 30 Apr 2013 13:12:32 +0200
Subject: [PATCH] cleaned up and fixed marker drawing

---
 .../java/com/xeiam/xchart/standalone/Example1.java     |  5 ++++-
 .../java/com/xeiam/xchart/internal/markers/Circle.java |  2 +-
 .../com/xeiam/xchart/internal/markers/Diamond.java     | 10 +++++-----
 .../java/com/xeiam/xchart/internal/markers/Marker.java |  3 +--
 .../java/com/xeiam/xchart/internal/markers/Square.java |  2 +-
 .../xeiam/xchart/internal/markers/TriangleDown.java    |  8 +++-----
 .../com/xeiam/xchart/internal/markers/TriangleUp.java  |  8 +++-----
 7 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java
index 75dbf9e0..e88d391b 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/Example1.java
@@ -17,6 +17,8 @@ package com.xeiam.xchart.standalone;
 
 import com.xeiam.xchart.BitmapEncoder;
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
+import com.xeiam.xchart.SeriesMarker;
 
 /**
  * Creates a simple Chart and saves it as a PNG and JPEG image file.
@@ -32,7 +34,8 @@ public class Example1 {
     chart.setChartTitle("Sample Chart");
     chart.setXAxisTitle("X");
     chart.setYAxisTitle("Y");
-    chart.addSeries("y(x)", null, yData);
+    Series series = chart.addSeries("y(x)", null, yData);
+    series.setMarker(SeriesMarker.CIRCLE);
 
     BitmapEncoder.savePNG(chart, "./Sample_Chart.png");
     BitmapEncoder.savePNGWithDPI(chart, "./Sample_Chart_300_DPI.png", 300);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java
index e146f43a..c41ad4f5 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Circle.java
@@ -28,7 +28,7 @@ public class Circle extends Marker {
   public void paint(Graphics2D g, double xOffset, double yOffset) {
 
     g.setStroke(stroke);
-    Shape circle = new Ellipse2D.Double(xOffset + Marker.X_OFFSET, yOffset + Marker.Y_OFFSET, Marker.SIZE, Marker.SIZE);
+    Shape circle = new Ellipse2D.Double(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE, Marker.SIZE, Marker.SIZE);
     g.fill(circle);
 
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java
index 5fb4cb1f..efa7298c 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Diamond.java
@@ -29,13 +29,13 @@ public class Diamond extends Marker {
     g.setStroke(stroke);
 
     // Make a diamond
-    double halfSize = Math.ceil((Marker.SIZE + 3) / 2.0);
+    double diamondHalfSize = Marker.HALF_SIZE * 1.3;
 
     Path2D.Double path = new Path2D.Double();
-    path.moveTo(xOffset - halfSize, yOffset - halfSize + halfSize);
-    path.lineTo(xOffset - halfSize + halfSize, yOffset - halfSize + Marker.SIZE + 3);
-    path.lineTo(xOffset - halfSize + Marker.SIZE + 3, yOffset - halfSize + halfSize);
-    path.lineTo(xOffset - halfSize + halfSize, yOffset - halfSize);
+    path.moveTo(xOffset - diamondHalfSize, yOffset);
+    path.lineTo(xOffset, yOffset - diamondHalfSize);
+    path.lineTo(xOffset + diamondHalfSize, yOffset);
+    path.lineTo(xOffset, yOffset + diamondHalfSize);
     path.closePath();
     g.fill(path);
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java
index 05bd0edb..930894be 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Marker.java
@@ -27,8 +27,7 @@ public abstract class Marker {
 
   public static final double SIZE = 8;
 
-  public static final double X_OFFSET = -1.0 * (SIZE / 2.0);
-  public static final double Y_OFFSET = -1.0 * (SIZE / 2.0);
+  public static final double HALF_SIZE = SIZE / 2.0;
 
   public abstract void paint(Graphics2D g, double xOffset, double yOffset);
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java
index 84dbc41d..ba506d6b 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/Square.java
@@ -28,7 +28,7 @@ public class Square extends Marker {
   public void paint(Graphics2D g, double xOffset, double yOffset) {
 
     g.setStroke(stroke);
-    Shape square = new Rectangle2D.Double(xOffset + Marker.X_OFFSET, yOffset + Marker.Y_OFFSET, Marker.SIZE, Marker.SIZE);
+    Shape square = new Rectangle2D.Double(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE, Marker.SIZE, Marker.SIZE);
     g.fill(square);
 
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java
index 3a0e0537..88adbb04 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleDown.java
@@ -29,12 +29,10 @@ public class TriangleDown extends Marker {
     g.setStroke(stroke);
 
     // Make a triangle
-    double halfSize = Math.ceil((Marker.SIZE + 1) / 2.0);
-
     Path2D.Double path = new Path2D.Double();
-    path.moveTo(xOffset - halfSize + 0, 1 + yOffset - halfSize + 0);
-    path.lineTo(xOffset - halfSize + halfSize, 1 + yOffset - halfSize + Marker.SIZE + 1);
-    path.lineTo(xOffset - halfSize + Marker.SIZE + 1, 1 + yOffset - halfSize + 0);
+    path.moveTo(xOffset - Marker.HALF_SIZE, 1 + yOffset - Marker.HALF_SIZE);
+    path.lineTo(xOffset, 1 + yOffset - Marker.HALF_SIZE + Marker.SIZE + 1);
+    path.lineTo(xOffset - Marker.HALF_SIZE + Marker.SIZE + 1, 1 + yOffset - Marker.HALF_SIZE);
     path.closePath();
     g.fill(path);
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java
index 21d8358c..add968f4 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/markers/TriangleUp.java
@@ -29,12 +29,10 @@ public class TriangleUp extends Marker {
     g.setStroke(stroke);
 
     // Make a triangle
-    double halfSize = Math.ceil((Marker.SIZE + 1) / 2.0);
-
     Path2D.Double path = new Path2D.Double();
-    path.moveTo(xOffset - halfSize, yOffset - halfSize + Marker.SIZE + 1);
-    path.lineTo(xOffset - halfSize + Marker.SIZE + 1, yOffset - halfSize + Marker.SIZE + 1);
-    path.lineTo(xOffset - halfSize + halfSize, yOffset - halfSize + 0);
+    path.moveTo(xOffset - Marker.HALF_SIZE, yOffset - Marker.HALF_SIZE + Marker.SIZE + 1);
+    path.lineTo(xOffset - Marker.HALF_SIZE + Marker.SIZE + 1, yOffset - Marker.HALF_SIZE + Marker.SIZE + 1);
+    path.lineTo(xOffset, yOffset - Marker.HALF_SIZE);
     path.closePath();
     g.fill(path);
 
-- 
GitLab