/** * */ package org.codemap.layers; import org.codemap.CodemapCore; import org.codemap.Location; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; public class Label implements Comparable<Label> { public final int fontHeight; public final Rectangle bounds; private final int px, py; public final String text; private Location location; private boolean hasFocus; public Label(int px, int py, Point extent, int height, String text, Location loc) { this.px = px; this.py = py; this.bounds = new Rectangle(px, py, extent.x, extent.y); this.fontHeight = height; this.text = text; this.location = loc; location.setLabel(this); } public boolean intersects(Label each) { return this.bounds.intersects(each.bounds); } public void changeOrientation(double dx, double dy) { bounds.x = (int) (px + dx * bounds.width); bounds.y = (int) (py + dy * bounds.height); } @Override public int compareTo(Label each) { return each.getArea() - this.getArea(); } private int getArea() { return bounds.height * bounds.width; } public void render(GC gc, FontData[] fontData) { // hack for nicer screenshots // int height = (int) (fontHeight * 1.2); // if (height < 12) return; int height = fontHeight; if (height < 11) return; int fontStyle = hasFocus ? SWT.BOLD : SWT.NORMAL; for (FontData fd: fontData) { fd.setHeight(height); fd.setStyle(fontStyle); } Font font = new Font(gc.getDevice(), fontData); gc.setFont(font); CodemapCore.colorScheme().renderLabel(gc, text, bounds); font.dispose(); } public void setHasFocus(boolean b) { hasFocus = b; } }