int newPixcelX = plot.getXPixcelFromX(currentX, r);
int newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
+
+ /*
+ * collect pixcels to draw and then draw them at once.
+ */
+ List<Integer> points = new ArrayList<Integer>();
+ points.add(newPixcelX);
+ points.add(newPixcelY);
for (int i = index; i < seriesItemSize; i++) {
- seriesItem = seriesItems.get(i);
+ seriesItem = seriesItems.get(i);
currentX = seriesItem.getX();
- oldPixcelX = newPixcelX;
- oldPixcelY = newPixcelY;
-
newPixcelX = plot.getXPixcelFromX(currentX, r);
newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
- gc.drawLine(oldPixcelX, oldPixcelY, newPixcelX, newPixcelY);
+
+ points.add(newPixcelX);
+ points.add(newPixcelY);
+
if (currentX > plot.getVisibleEndX()) {
- return;
+ break;
}
}
+ gc.drawPolyline(convertArray(points));
+
// // draw endVal
if (true == bEndVal) {
int endX = plot.getXPixcelFromX(plot.getValidEndX(), r);
int newPixcelX = plot.getXPixcelFromX(currentX, r);
int newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
+
+ /*
+ * collect pixcels to draw and then draw them at once.
+ */
+ List<Integer> points = new ArrayList<Integer>();
+ points.add(newPixcelX);
+ points.add(baseY);
+ points.add(newPixcelX);
+ points.add(newPixcelY);
for (int i = index; i < seriesItemSize; i++) {
- seriesItem = seriesItems.get(i);
+ seriesItem = seriesItems.get(i);
currentX = seriesItem.getX();
- oldPixcelX = newPixcelX;
- oldPixcelY = newPixcelY;
-
newPixcelX = plot.getXPixcelFromX(currentX, r);
newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
- int[] polygon = { oldPixcelX, baseY, oldPixcelX, oldPixcelY,
- newPixcelX, newPixcelY, newPixcelX, baseY };
- gc.setAlpha((int) (255 * 0.8));
- gc.fillPolygon(polygon);
- gc.setAlpha((int) (255 * 0.2));
- gc.drawPolygon(polygon);
+ points.add(newPixcelX);
+ points.add(newPixcelY);
+
+ if (i == seriesItemSize - 1 || currentX > plot.getVisibleEndX()) {
+ points.add(newPixcelX);
+ points.add(baseY);
+ }
if (currentX > plot.getVisibleEndX()) {
- gc.setAlpha(255);
- return;
+ break;
}
}
+ int[] pointArray = convertArray(points);
+ gc.setAlpha((int) (255 * 0.8));
+ gc.fillPolygon(pointArray);
+ gc.setAlpha((int) (255 * 0.2));
+ gc.drawPolygon(pointArray);
+
// // draw endVal
if (true == bEndVal) {
int endX = plot.getXPixcelFromX(plot.getValidEndX(), r);
return true;
}
+
+ private int[] convertArray(List<Integer> list) {
+ int[] array = new int[list.size()];
+ for (int i = 0; i < list.size(); i++) {
+ array[i] = list.get(i).intValue();
+ }
+ return array;
+ }
}