package info.limpet.stackedcharts.ui.editor.figures; import info.limpet.stackedcharts.ui.editor.Activator; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.ImageUtilities; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.swt.graphics.Image; /** * The label is a standard horizontal label by default and it can change orientation to vertical * */ public class DirectionalLabel extends Label { private boolean vertical; public DirectionalLabel(String fontName) { setFont(Activator.getDefault().getFont(fontName)); } @Override protected void paintFigure(Graphics graphics) { if (vertical) { String subStringText = getSubStringText(); if (!subStringText.isEmpty()) { Image image = ImageUtilities.createRotatedImageOfString(subStringText, getFont(), getForegroundColor(), getBackgroundColor()); graphics.drawImage(image, new Point(getTextLocation()) .translate(getLocation())); image.dispose(); } } else { super.paintFigure(graphics); } } @Override protected Dimension calculateLabelSize(Dimension txtSize) { Dimension labelSize = super.calculateLabelSize(txtSize); if (vertical) { labelSize = labelSize.transpose(); } return labelSize; } public void setVertical(boolean vertical) { this.vertical = vertical; repaint(); invalidate(); } }