aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Ferrazzutti2013-05-28 11:24:20 (EDT)
committerSami Wagiaalla2013-05-30 09:48:11 (EDT)
commitf6cf0d213bc791ca45b2e3b8f0c6c4d01375177f (patch)
tree5640cb08ceb2844e397e0fdd287d70be2f14ce86
parent0606f3804628ebe7cebe6796c6c464af2e97038c (diff)
downloadorg.eclipse.linuxtools-f6cf0d213bc791ca45b2e3b8f0c6c4d01375177f.zip
org.eclipse.linuxtools-f6cf0d213bc791ca45b2e3b8f0c6c4d01375177f.tar.gz
org.eclipse.linuxtools-f6cf0d213bc791ca45b2e3b8f0c6c4d01375177f.tar.bz2
Improvement to pie chart slice colours.refs/changes/56/13356/4
First 13 slices still use the statically-defined colours from IColorsConstants.java, but later slices are now given randomized colours so as to make adjacent slices more visually distinct. Change-Id: Id932b214a4c220bad9eb796609b41fcabcd1e3a1 Reviewed-on: https://git.eclipse.org/r/13356 Tested-by: Hudson CI Reviewed-by: Sami Wagiaalla <swagiaal@redhat.com> IP-Clean: Sami Wagiaalla <swagiaal@redhat.com> Tested-by: Sami Wagiaalla <swagiaal@redhat.com>
-rw-r--r--profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/IColorsConstants.java48
-rw-r--r--profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java66
-rw-r--r--profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java38
3 files changed, 73 insertions, 79 deletions
diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/IColorsConstants.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/IColorsConstants.java
index d21aa81..df40023 100644
--- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/IColorsConstants.java
+++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/IColorsConstants.java
@@ -15,52 +15,8 @@ import org.eclipse.swt.graphics.RGB;
public interface IColorsConstants {
static final RGB[] COLORS = new RGB[] { new RGB(255, 0, 0), new RGB(0, 255, 0), new RGB(0, 0, 255),
new RGB(255, 255, 0), new RGB(255, 0, 255), new RGB(0, 255, 255), new RGB(255, 255, 255),
- new RGB(0, 100, 205), new RGB(100, 205, 0), new RGB(205, 0, 100), new RGB(0, 0, 0), new RGB(100, 255, 255),
- new RGB(255, 100, 255), new RGB(255, 255, 100), new RGB(255, 255, 255), new RGB(255, 255, 204),
- new RGB(255, 255, 153), new RGB(255, 255, 102), new RGB(255, 255, 51), new RGB(255, 255, 0),
- new RGB(255, 204, 255), new RGB(255, 204, 204), new RGB(255, 204, 153), new RGB(255, 204, 102),
- new RGB(255, 204, 51), new RGB(255, 204, 0), new RGB(255, 153, 255), new RGB(255, 153, 204),
- new RGB(255, 153, 153), new RGB(255, 153, 102), new RGB(255, 153, 51), new RGB(255, 153, 0),
- new RGB(255, 102, 255), new RGB(255, 102, 204), new RGB(255, 102, 153), new RGB(255, 102, 102),
- new RGB(255, 102, 51), new RGB(255, 102, 0), new RGB(255, 51, 255), new RGB(255, 51, 204),
- new RGB(255, 51, 153), new RGB(255, 51, 102), new RGB(255, 51, 51), new RGB(255, 51, 0),
- new RGB(255, 0, 255), new RGB(255, 0, 204), new RGB(255, 0, 153), new RGB(255, 0, 102),
- new RGB(255, 0, 51), new RGB(255, 0, 0), new RGB(204, 255, 255), new RGB(204, 255, 204),
- new RGB(204, 255, 153), new RGB(204, 255, 102), new RGB(204, 255, 51), new RGB(204, 255, 0),
- new RGB(204, 204, 255), new RGB(204, 204, 204), new RGB(204, 204, 153), new RGB(204, 204, 102),
- new RGB(204, 204, 51), new RGB(204, 204, 0), new RGB(204, 153, 255), new RGB(204, 153, 204),
- new RGB(204, 153, 153), new RGB(204, 153, 102), new RGB(204, 153, 51), new RGB(204, 153, 0),
- new RGB(204, 102, 255), new RGB(204, 102, 204), new RGB(204, 102, 153), new RGB(204, 102, 102),
- new RGB(204, 102, 51), new RGB(204, 102, 0), new RGB(204, 51, 255), new RGB(204, 51, 204),
- new RGB(204, 51, 153), new RGB(204, 51, 102), new RGB(204, 51, 51), new RGB(204, 51, 0),
- new RGB(204, 0, 255), new RGB(204, 0, 204), new RGB(204, 0, 153), new RGB(204, 0, 102),
- new RGB(204, 0, 51), new RGB(204, 0, 0), new RGB(153, 255, 255), new RGB(153, 255, 204),
- new RGB(153, 255, 153), new RGB(153, 255, 102), new RGB(153, 255, 51), new RGB(153, 255, 0),
- new RGB(153, 204, 255), new RGB(153, 204, 204), new RGB(153, 204, 153), new RGB(153, 204, 102),
- new RGB(153, 204, 51), new RGB(153, 204, 0), new RGB(153, 153, 255), new RGB(153, 153, 204),
- new RGB(153, 153, 153), new RGB(153, 153, 102), new RGB(153, 153, 51), new RGB(153, 153, 0),
- new RGB(153, 102, 255), new RGB(153, 102, 204), new RGB(153, 102, 153), new RGB(153, 102, 102),
- new RGB(153, 102, 51), new RGB(153, 102, 0), new RGB(153, 51, 255), new RGB(153, 51, 204),
- new RGB(153, 51, 153), new RGB(153, 51, 102), new RGB(153, 51, 51), new RGB(153, 51, 0),
- new RGB(153, 0, 255), new RGB(153, 0, 204), new RGB(153, 0, 153), new RGB(153, 0, 102),
- new RGB(153, 0, 51), new RGB(153, 0, 0), new RGB(102, 255, 255), new RGB(102, 255, 204),
- new RGB(102, 255, 153), new RGB(102, 255, 102), new RGB(102, 255, 51), new RGB(102, 255, 0),
- new RGB(102, 204, 255), new RGB(102, 204, 204), new RGB(102, 204, 153), new RGB(102, 204, 102),
- new RGB(102, 204, 51), new RGB(102, 204, 0), new RGB(102, 153, 255), new RGB(102, 153, 204),
- new RGB(102, 153, 153), new RGB(102, 153, 102), new RGB(102, 153, 51), new RGB(102, 153, 0),
- new RGB(102, 102, 255), new RGB(102, 102, 204), new RGB(102, 102, 153), new RGB(102, 102, 102),
- new RGB(102, 102, 51), new RGB(102, 102, 0), new RGB(102, 51, 255), new RGB(102, 51, 204),
- new RGB(102, 51, 153), new RGB(102, 51, 102), new RGB(102, 51, 51), new RGB(102, 51, 0),
- new RGB(102, 0, 255), new RGB(102, 0, 204), new RGB(102, 0, 153), new RGB(102, 0, 102),
- new RGB(102, 0, 51), new RGB(102, 0, 0), new RGB(51, 255, 255), new RGB(51, 255, 204),
- new RGB(51, 255, 153), new RGB(51, 255, 102), new RGB(51, 255, 51), new RGB(51, 255, 0),
- new RGB(51, 204, 255), new RGB(51, 204, 204), new RGB(51, 204, 153), new RGB(51, 204, 102),
- new RGB(51, 204, 51), new RGB(51, 204, 0), new RGB(51, 153, 255), new RGB(51, 153, 204),
- new RGB(51, 153, 153), new RGB(51, 153, 102), new RGB(51, 153, 51), new RGB(51, 153, 0),
- new RGB(51, 102, 255), new RGB(51, 102, 204), new RGB(51, 102, 153), new RGB(51, 102, 102),
- new RGB(51, 102, 51), new RGB(51, 102, 0), new RGB(51, 51, 255), new RGB(51, 51, 204),
- new RGB(51, 51, 153), new RGB(51, 51, 102), new RGB(51, 51, 51), new RGB(51, 51, 0), new RGB(51, 0, 255),
- new RGB(51, 0, 204), new RGB(51, 0, 153), new RGB(51, 0, 102), new RGB(51, 0, 51), new RGB(51, 0, 0),
+ new RGB(0, 100, 205), new RGB(0, 150, 100), new RGB(205, 0, 100), new RGB(0, 0, 0), new RGB(100, 255, 255),
+ new RGB(255, 100, 255)
};
diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java
index d25014e..d9a3a62 100644
--- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java
+++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChart.java
@@ -10,24 +10,29 @@
*******************************************************************************/
package org.eclipse.linuxtools.dataviewers.piechart;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-
import org.swtchart.Chart;
import org.swtchart.IBarSeries;
import org.swtchart.ISeries;
public class PieChart extends Chart {
+ protected List<RGB> colorList = new ArrayList<RGB>();
+
public PieChart(Composite parent, int style) {
super(parent, style);
Control plotArea = null;
for (Control child : getChildren()) {
- if (child.getClass().getName().equals("org.swtchart.internal.axis.AxisTitle")) //$NON-NLS-1$
- child.setVisible(false); // Don't show original Plot Area and axis
- else if (child.getClass().getName().equals("org.swtchart.internal.PlotArea")) { //$NON-NLS-1$
+ if (child.getClass().getName().equals("org.swtchart.internal.axis.AxisTitle")) { //$NON-NLS-1$
+ child.setVisible(false); // Don't show original Plot Area and axis
+ } else if (child.getClass().getName().equals("org.swtchart.internal.PlotArea")) { //$NON-NLS-1$
child.setVisible(false); // Don't show original Plot Area and axis
plotArea = child;
}
@@ -37,19 +42,22 @@ public class PieChart extends Chart {
@Override
public void addPaintListener(PaintListener listener) {
- if (!listener.getClass().getName().startsWith("org.swtchart.internal.axis")) //$NON-NLS-1$
- super.addPaintListener(listener);
+ if (!listener.getClass().getName().startsWith("org.swtchart.internal.axis")) { //$NON-NLS-1$
+ super.addPaintListener(listener);
+ }
}
/*
* Add data to this Pie Chart. A single pie Chart will be drawn with the data provided.
*/
public void addPieChartSeries(String labels[], double val[]) {
- for (ISeries s : this.getSeriesSet().getSeries())
- this.getSeriesSet().deleteSeries(s.getId());
+ for (ISeries s : this.getSeriesSet().getSeries()) {
+ this.getSeriesSet().deleteSeries(s.getId());
+ }
double newVal[][] = new double[val.length][1];
- for (int i = 0; i < val.length; i++)
- newVal[i][0] = val[i];
+ for (int i = 0; i < val.length; i++) {
+ newVal[i][0] = val[i];
+ }
addPieChartSeries(labels, newVal);
}
@@ -60,17 +68,45 @@ public class PieChart extends Chart {
* For the third 'a' will be 3 and 'b' will be 6.
*/
public void addPieChartSeries(String labels[], double val[][]) {
- for (ISeries s : this.getSeriesSet().getSeries())
- this.getSeriesSet().deleteSeries(s.getId());
+ for (ISeries s : this.getSeriesSet().getSeries()) {
+ this.getSeriesSet().deleteSeries(s.getId());
+ }
int size = Math.min(labels.length, val.length);
for (int i = 0; i < size; i++) {
IBarSeries s = (IBarSeries) this.getSeriesSet().createSeries(ISeries.SeriesType.BAR, labels[i]);
double d[] = new double[val[i].length];
- for (int j = 0; j < val[i].length; j++)
- d[j] = val[i][j];
+ for (int j = 0; j < val[i].length; j++) {
+ d[j] = val[i][j];
+ }
s.setXSeries(d);
- s.setBarColor(new Color(this.getDisplay(), IColorsConstants.COLORS[i]));
+ s.setBarColor(new Color(this.getDisplay(), sliceColor(i)));
}
}
+
+ protected RGB sliceColor(int i) {
+ if (colorList.size() > i) {
+ return colorList.get(i);
+ }
+
+ RGB next;
+
+ if (colorList.size() < IColorsConstants.COLORS.length) {
+ next = IColorsConstants.COLORS[i];
+ }
+ else {
+ RGB prev = colorList.get(colorList.size()-1);
+ int mod = 192;
+ int red = (int) (mod * Math.random());
+ int green = (int) ((mod - red) * Math.random());
+ int blue = mod - red - green;
+ next = new RGB(0, 0, 0);
+ next.red = (prev.red + red) % 256;
+ next.green = (prev.green + green) % 256;
+ next.blue = (prev.blue + blue) % 256;
+ }
+
+ colorList.add(next);
+ return next;
+ }
}
diff --git a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java
index 5c746ef..5b6856d 100644
--- a/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java
+++ b/profiling/org.eclipse.linuxtools.dataviewers.piechart/src/org/eclipse/linuxtools/dataviewers/piechart/PieChartPaintListener.java
@@ -16,7 +16,6 @@ import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
-
import org.swtchart.ISeries;
public class PieChartPaintListener implements PaintListener {
@@ -34,10 +33,11 @@ public class PieChartPaintListener implements PaintListener {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
Rectangle bounds;
- if (plotArea == null)
- bounds = gc.getClipping();
- else
- bounds = plotArea.getBounds();
+ if (plotArea == null) {
+ bounds = gc.getClipping();
+ } else {
+ bounds = plotArea.getBounds();
+ }
double[][] series = this.getPieSeriesArray();
int width = (bounds.width - bounds.x) / series.length;
int x = bounds.x;
@@ -62,19 +62,19 @@ public class PieChartPaintListener implements PaintListener {
int pieWidth = Math.min(bounds.width - X_GAP, bounds.height);
int pieX = bounds.x + (bounds.width - pieWidth) / 2;
int pieY = bounds.y + (bounds.height - pieWidth) / 2;
- if (sumTotal == 0)
- gc.drawOval(pieX, pieY, pieWidth, pieWidth);
- else {
+ if (sumTotal == 0) {
+ gc.drawOval(pieX, pieY, pieWidth, pieWidth);
+ } else {
double factor = 100 / sumTotal;
int sweepAngle = 0;
int incrementAngle = 0;
int initialAngle = 90;
for (int i = 0; i < nelemSeries; i++) {
- gc.setBackground(new Color(e.display, IColorsConstants.COLORS[i]));
+ gc.setBackground(new Color(e.display, chart.sliceColor(i)));
- if (i == (nelemSeries - 1))
- sweepAngle = 360 - incrementAngle;
- else {
+ if (i == (nelemSeries - 1)) {
+ sweepAngle = 360 - incrementAngle;
+ } else {
double angle = series[i] * factor * 3.6;
sweepAngle = (int) Math.round(angle);
}
@@ -88,17 +88,19 @@ public class PieChartPaintListener implements PaintListener {
private double[][] getPieSeriesArray() {
ISeries series[] = this.chart.getSeriesSet().getSeries();
- if (series == null || series.length == 0)
- return new double[0][0];
+ if (series == null || series.length == 0) {
+ return new double[0][0];
+ }
double result[][] = new double[series[0].getXSeries().length][series.length];
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
double d[] = series[j].getXSeries();
- if (d != null && d.length > 0)
- result[i][j] = d[i];
- else
- result[i][j] = 0;
+ if (d != null && d.length > 0) {
+ result[i][j] = d[i];
+ } else {
+ result[i][j] = 0;
+ }
}
}