/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* FixedWidthStroke.java
*
* Created on 16. M\u00E4rz 2005, 15:55
*/
package de.cismet.cismap.commons.gui.piccolo;
import edu.umd.cs.piccolo.util.PPaintContext;
import java.awt.BasicStroke;
import de.cismet.cismap.commons.gui.MappingComponent;
/**
* DOCUMENT ME!
*
* @author hell
* @version $Revision$, $Date$
*/
public class CustomFixedWidthStroke extends BasicStroke {
//~ Instance fields --------------------------------------------------------
protected float multiplyer = 1.0f;
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private final MappingComponent mc;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new CustomFixedWidthStroke object.
*
* @param thickness DOCUMENT ME!
*/
public CustomFixedWidthStroke(final float thickness) {
this(thickness, null);
}
/**
* Creates a new CustomFixedWidthStroke object.
*
* @param thickness DOCUMENT ME!
* @param mc DOCUMENT ME!
*/
public CustomFixedWidthStroke(final float thickness, final MappingComponent mc) {
super(1.0f, CAP_ROUND, JOIN_ROUND);
setMultiplyer(thickness);
this.mc = mc;
}
/**
* Creates a new CustomFixedWidthStroke object.
*
* @param width DOCUMENT ME!
* @param lineCap DOCUMENT ME!
* @param lineJoin DOCUMENT ME!
* @param miterlimit DOCUMENT ME!
* @param dash DOCUMENT ME!
* @param dash_phase DOCUMENT ME!
*/
public CustomFixedWidthStroke(final float width,
final int lineCap,
final int lineJoin,
final float miterlimit,
final float[] dash,
final float dash_phase) {
this(width, lineCap, lineJoin, miterlimit, dash, dash_phase, null);
}
/**
* Creates a new CustomFixedWidthStroke object.
*
* @param width DOCUMENT ME!
* @param lineCap DOCUMENT ME!
* @param lineJoin DOCUMENT ME!
* @param miterlimit DOCUMENT ME!
* @param dash DOCUMENT ME!
* @param dash_phase DOCUMENT ME!
* @param mc DOCUMENT ME!
*/
public CustomFixedWidthStroke(final float width,
final int lineCap,
final int lineJoin,
final float miterlimit,
final float[] dash,
final float dash_phase,
final MappingComponent mc) {
super(width, lineCap, lineJoin, miterlimit, dash, dash_phase);
this.mc = mc;
}
/**
* Privater Defaultkonstruktor damit FixedWidthStroke in diesem Fall verwendet wird.
*/
private CustomFixedWidthStroke() {
this.mc = null;
}
//~ Methods ----------------------------------------------------------------
@Override
public float getLineWidth() {
if (PPaintContext.CURRENT_PAINT_CONTEXT != null) {
// log.fatal("LineWidth:"+super.getLineWidth() / (float) PPaintContext.CURRENT_PAINT_CONTEXT.getScale());
if (mc != null) {
return super.getLineWidth() * multiplyer * (float)mc.getStickyFeatureCorrectionFactor()
/ (float)mc.getCamera().getViewScale();
} else {
return super.getLineWidth() * multiplyer / (float)PPaintContext.CURRENT_PAINT_CONTEXT.getScale();
}
} else {
return super.getLineWidth() * multiplyer;
}
}
@Override
public float getMiterLimit() {
if (PPaintContext.CURRENT_PAINT_CONTEXT != null) {
float ml;
if (mc != null) {
ml = super.getMiterLimit() / (float)mc.getCamera().getViewScale();
} else {
ml = super.getMiterLimit() / (float)PPaintContext.CURRENT_PAINT_CONTEXT.getScale();
}
if (ml < 1.0f) {
return 1.0f;
} else {
return ml;
}
} else {
return 1.0f;
}
}
@Override
public float[] getDashArray() {
if (PPaintContext.CURRENT_PAINT_CONTEXT != null) {
final float[] dash = super.getDashArray();
if ((dash == null) || (dash.length == 0)) {
return null;
}
float scale;
if (mc != null) {
scale = (float)mc.getCamera().getViewScale();
} else {
scale = (float)PPaintContext.CURRENT_PAINT_CONTEXT.getScale();
}
final float[] temp = new float[dash.length];
for (int i = dash.length - 1; i >= 0; i--) {
temp[i] = dash[i] / scale;
}
return temp;
} else {
return super.getDashArray();
}
}
@Override
public float getDashPhase() {
if (PPaintContext.CURRENT_PAINT_CONTEXT != null) {
if (mc != null) {
return super.getDashPhase() / (float)mc.getCamera().getViewScale();
} else {
return super.getDashPhase() / (float)PPaintContext.CURRENT_PAINT_CONTEXT.getScale();
}
} else {
return super.getDashPhase(); // To change body of generated methods, choose Tools | Templates.
}
}
/**
* DOCUMENT ME!
*
* @param multiplyer DOCUMENT ME!
*/
public void setMultiplyer(final float multiplyer) {
this.multiplyer = multiplyer;
}
/*@Override
* public int getEndCap() { return this.CAP_ROUND; }
*
* @Override public int getLineJoin() { return this.JOIN_ROUND;}*/
}