package org.swtchart.ext.internal; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; /** * Selection rectangle with mouse to zoom in/out. */ public class SelectionRectangle { /** the start point of selection */ private Point startPoint; /** the end point of selection */ private Point endPoint; /** * Sets the start point. * * @param x * the X coordinate of start point in pixels * @param y * the Y coordinate of start point in pixels */ public void setStartPoint(int x, int y) { startPoint = new Point(x, y); } /** * Sets the end point. * * @param x * the X coordinate of end point in pixels * @param y * the X coordinate of end point in pixels */ public void setEndPoint(int x, int y) { endPoint = new Point(x, y); } /** * Gets the horizontal selected range. * * @return the horizontal selected range in pixels */ public Point getHorizontalRange() { if (startPoint == null || endPoint == null) { return null; } return new Point(startPoint.x, endPoint.x); } /** * Gets the vertical selected range. * * @return the vertical selected range in pixels */ public Point getVerticalRange() { if (startPoint == null || endPoint == null) { return null; } return new Point(startPoint.y, endPoint.y); } /** * Check if selection is disposed. * * @return true if selection is disposed. */ public boolean isDisposed() { return startPoint == null; } /** * Disposes the resource. */ public void dispose() { startPoint = null; endPoint = null; } /** * Draws the selection rectangle on chart panel. * * @param gc * the graphics context */ public void draw(GC gc) { if (startPoint == null || endPoint == null) { return; } int minX; int maxX; if (startPoint.x > endPoint.x) { minX = endPoint.x; maxX = startPoint.x; } else { minX = startPoint.x; maxX = endPoint.x; } int minY; int maxY; if (startPoint.y > endPoint.y) { minY = endPoint.y; maxY = startPoint.y; } else { minY = startPoint.y; maxY = endPoint.y; } gc.drawRectangle(minX, minY, maxX - minX, maxY - minY); } }