package org.archstudio.bna.things.labels; import java.awt.Dimension; import java.awt.Font; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.archstudio.bna.IBNAView; import org.archstudio.bna.ICoordinate; import org.archstudio.bna.ICoordinateMapper; import org.archstudio.bna.IThingPeer; import org.archstudio.bna.things.AbstractThingPeer; import org.archstudio.bna.ui.IUIResources; import org.archstudio.swtutils.constants.LineStyle; import org.archstudio.sysutils.SystemUtils; import org.eclipse.swt.graphics.Rectangle; public class UserNotificationThingPeer<T extends UserNotificationThing> extends AbstractThingPeer<T> implements IThingPeer<T> { int SPACING = 4; public UserNotificationThingPeer(T thing, IBNAView view, ICoordinateMapper cm) { super(thing, view, cm); } @Override public boolean draw(Rectangle localBounds, IUIResources r) { Point2D lap = cm.worldToLocal(t.getAnchorPoint()); String text = t.getText().trim(); Font font = r.getFont(t.getFontName(), t.getFontStyle(), t.getFontSize()); Dimension size = r.getTextSize(font, text); Rectangle2D.Double localShape = new Rectangle2D.Double(lap.getX() - size.width / 2, lap.getY() - size.height / 2, size.width, size.height); localShape.x -= SPACING; localShape.y -= SPACING; localShape.width += 2 * SPACING; localShape.height += 2 * SPACING; double alpha = SystemUtils .bound(0, Math.sin(Math.PI * t.getLife() / UserNotificationThing.TIME_TO_LIVE) * 2, 1); if (t.getColor() != null) { r.fillShape(localShape, t.getColor(), t.isGradientFilled() ? t.getSecondaryColor() : null, alpha); } r.drawShape(localShape, t.getEdgeColor(), 1, LineStyle.SOLID, 1); r.drawText(font, text, localShape.x + SPACING, localShape.y + SPACING, t.getEdgeColor(), 1); return true; } @Override public boolean isInThing(ICoordinate location) { return false; } }