package org.codemap.util;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
public abstract class ColorScheme {
public static ColorScheme colors() {
return new ColoredColorScheme();
}
public static ColorScheme blackWhite() {
return new BlackWhiteColorScheme();
}
public abstract MColor getWaterColor();
public abstract MColor getShoreColor();
public abstract MColor getHillColor();
public abstract double getDarkenFactor();
public abstract void renderLabel(GC gc, String text, Rectangle bounds);
public abstract double getLabelHeightFactor();
public abstract MColor getArrowColor();
}
class BlackWhiteColorScheme extends ColorScheme {
@Override
public MColor getWaterColor() {
return MColor.WHITE;
}
@Override
public MColor getShoreColor() {
return MColor.GRAY_SHORE;
}
@Override
public MColor getHillColor() {
return MColor.GRAY_HILL;
}
@Override
public double getDarkenFactor() {
return .8;
}
@Override
public void renderLabel(GC gc, String text, Rectangle bounds) {
gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_BLACK));
gc.drawText(text, bounds.x, bounds.y, SWT.DRAW_TRANSPARENT);
}
@Override
public double getLabelHeightFactor() {
return 3.0;
}
@Override
public MColor getArrowColor() {
return MColor.BLACK;
}
}
class ColoredColorScheme extends ColorScheme {
@Override
public MColor getWaterColor() {
return MColor.WATER;
}
@Override
public MColor getShoreColor() {
return MColor.SHORE;
}
@Override
public MColor getHillColor() {
return MColor.HILLGREEN;
}
@Override
public double getDarkenFactor() {
return .5;
}
@Override
public void renderLabel(GC gc, String text, Rectangle bounds) {
Device device = gc.getDevice();
gc.setAlpha(128);
gc.setForeground(device.getSystemColor(SWT.COLOR_BLACK));
gc.drawText(text, bounds.x + 1, bounds.y + 1, SWT.DRAW_TRANSPARENT);
gc.setAlpha(255);
gc.setForeground(device.getSystemColor(SWT.COLOR_WHITE));
gc.drawText(text, bounds.x, bounds.y, SWT.DRAW_TRANSPARENT);
}
@Override
public double getLabelHeightFactor() {
return 2.0;
}
@Override
public MColor getArrowColor() {
return MColor.WHITE;
}
}