blob: 014f349669050b6d32abb665e4dae95c61268a16 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.ui.util;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
/**
* Symbol drawing helper. Can draw common shapes to annotate legends or charts
*
* @author Matthew Khouzam
*/
public final class SymbolHelper {
private SymbolHelper() {
// do nothing
}
/**
* Draw a square
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawSquare(GC gc, Color color, int symbolSize, int centerX, int centerY) {
Color oldColor = gc.getBackground();
gc.setBackground(color);
int[] pts = new int[8];
pts[0] = centerX - symbolSize;
pts[1] = centerY - symbolSize;
pts[2] = centerX + symbolSize;
pts[3] = centerY - symbolSize;
pts[4] = centerX + symbolSize;
pts[5] = centerY + symbolSize;
pts[6] = centerX - symbolSize;
pts[7] = centerY + symbolSize;
gc.fillPolygon(pts);
gc.setBackground(oldColor);
}
/**
* Draw an isoceles triangle where the summit is facing upwards
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawTriangle(GC gc, Color color, int symbolSize, int centerX, int centerY) {
Color oldColor = gc.getBackground();
gc.setBackground(color);
int[] pts = new int[6];
pts[0] = centerX - symbolSize;
pts[1] = centerY + symbolSize / 3;
pts[2] = centerX;
pts[3] = centerY - symbolSize;
pts[4] = centerX + symbolSize;
pts[5] = centerY + symbolSize / 3;
gc.fillPolygon(pts);
gc.setBackground(oldColor);
}
/**
* Draw an isoceles triangle where the summit is facing downwards
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawInvertedTriangle(GC gc, Color color, int symbolSize, int centerX, int centerY) {
Color oldColor = gc.getBackground();
gc.setBackground(color);
int[] pts = new int[6];
pts[0] = centerX - symbolSize;
pts[1] = centerY - symbolSize / 3;
pts[2] = centerX;
pts[3] = centerY + symbolSize;
pts[4] = centerX + symbolSize;
pts[5] = centerY - symbolSize / 3;
gc.fillPolygon(pts);
gc.setBackground(oldColor);
}
/**
* Draw a plus
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawPlus(GC gc, Color color, int symbolSize, int centerX, int centerY) {
int prevLs = gc.getLineStyle();
int prevLw = gc.getLineWidth();
Color oldColor = gc.getForeground();
gc.setForeground(color);
gc.setLineWidth(Math.max(2, symbolSize / 4));
gc.drawLine(centerX - symbolSize, centerY, centerX + symbolSize, centerY);
gc.drawLine(centerX, centerY - symbolSize, centerX, centerY + symbolSize);
gc.setLineStyle(prevLs);
gc.setLineWidth(prevLw);
gc.setBackground(oldColor);
}
/**
* Draw a cross, an X symbol
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawCross(GC gc, Color color, int symbolSize, int centerX, int centerY) {
int prevLs = gc.getLineStyle();
int prevLw = gc.getLineWidth();
Color oldColor = gc.getForeground();
gc.setForeground(color);
gc.setLineWidth(Math.max(2, symbolSize / 4));
gc.drawLine(centerX - symbolSize, centerY - symbolSize, centerX + symbolSize, centerY + symbolSize);
gc.drawLine(centerX - symbolSize, centerY + symbolSize, centerX + symbolSize, centerY - symbolSize);
gc.setLineStyle(prevLs);
gc.setLineWidth(prevLw);
gc.setForeground(oldColor);
}
/**
* Draw a diamond, a square rotated by 45 degrees
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawDiamond(GC gc, Color color, int symbolSize, int centerX, int centerY) {
Color oldColor = gc.getBackground();
gc.setBackground(color);
int[] pts = new int[8];
pts[0] = centerX - symbolSize;
pts[1] = centerY;
pts[2] = centerX;
pts[3] = centerY - symbolSize;
pts[4] = centerX + symbolSize;
pts[5] = centerY;
pts[6] = centerX;
pts[7] = centerY + symbolSize;
gc.fillPolygon(pts);
gc.setBackground(oldColor);
}
/**
* Draw a circle
*
* @param gc
* the graphics context to draw to
* @param color
* the color of the symbol
* @param symbolSize
* the size of the symbol (radius in pixels)
* @param centerX
* the center point x coordinate
* @param centerY
* the center point y coordinate
*/
public static void drawCircle(GC gc, Color color, int symbolSize, int centerX, int centerY) {
Color oldColor = gc.getBackground();
gc.setBackground(color);
gc.fillOval(centerX - symbolSize, centerY - symbolSize, symbolSize * 2, symbolSize * 2);
gc.setBackground(oldColor);
}
}