/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.handlers;
import org.eclipse.draw2d.Border;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.handles.MoveHandle;
/**
* A new handle for oval borders.
*
* @author Sascha Zur
* @author Oliver Seebach
*
*/
public class OvalBorderMoveHandle extends MoveHandle {
private static final int BORDERWIDTH = 2;
public OvalBorderMoveHandle(GraphicalEditPart owner) {
super(owner);
}
@Override
public Border getBorder() {
RoundedLineBorder border = new RoundedLineBorder();
border.setWidth(BORDERWIDTH);
return border;
}
@Override
protected void paintFigure(Graphics graphics) {
graphics.drawOval(new Rectangle(getBounds().x, getBounds().y, getBounds().width - 1, getBounds().height - 1));
}
/**
* Oval shaped border.
*
* @author Oliver Seebach
*/
class RoundedLineBorder extends LineBorder {
RoundedLineBorder() {
super();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.draw2d.LineBorder#getInsets(org.eclipse.draw2d.IFigure)
*/
@Override
public Insets getInsets(IFigure figure) {
return new Insets(getWidth());
}
/**
* {@inheritDoc}
*
* @see org.eclipse.draw2d.LineBorder#paint(org.eclipse.draw2d.IFigure, org.eclipse.draw2d.Graphics,
* org.eclipse.draw2d.geometry.Insets)
*/
@Override
public void paint(IFigure figure, Graphics graphics, Insets insets) {
Rectangle rect = getPaintRectangle(figure, insets);
rect.setSize(rect.width - 1, rect.height - 1); // -1 as oval doesn't fit otherwise
tempRect.setBounds(rect);
tempRect.shrink(getWidth() / 2, getWidth() / 2);
graphics.setLineWidth(getWidth());
graphics.setLineStyle(getStyle());
if (getColor() != null) {
graphics.setForegroundColor(getColor());
} else {
graphics.setForegroundColor(figure.getForegroundColor());
}
graphics.drawOval(tempRect);
}
}
}