/*
* Copyright 2007-2008 Hidekatsu Izuno
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package net.arnx.wmf2svg.gdi.svg;
import org.w3c.dom.Text;
import net.arnx.wmf2svg.gdi.*;
/**
* @author Hidekatsu Izuno
*/
class SvgPen extends SvgObject implements GdiPen {
private int style;
private int width;
private int color;
public SvgPen(
SvgGdi gdi,
int style,
int width,
int color) {
super(gdi);
this.style = style;
this.width = (width > 0) ? width : 1;
this.color = color;
}
public int getStyle() {
return style;
}
public int getWidth() {
return width;
}
public int getColor() {
return color;
}
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + color;
result = PRIME * result + style;
result = PRIME * result + width;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final SvgPen other = (SvgPen) obj;
if (color != other.color)
return false;
if (style != other.style)
return false;
if (width != other.width)
return false;
return true;
}
public Text createTextNode(String id) {
return getGDI().getDocument().createTextNode("." + id + " { " + toString() + " }\n");
}
public String toString() {
StringBuffer buffer = new StringBuffer();
if (style == PS_NULL) {
buffer.append("stroke: none; ");
} else {
// stroke
buffer.append("stroke: " + toColor(color) + "; ");
// stroke-width
buffer.append("stroke-width: " + width + "; ");
// stroke-linejoin
buffer.append("stroke-linejoin: round; ");
// stroke-dasharray
if (width == 1 && PS_DASH <= style && style <= PS_DASHDOTDOT) {
buffer.append("stroke-dasharray: ");
switch (style) {
case PS_DASH :
buffer.append(
"" + toRealSize(18) + "," + toRealSize(6));
break;
case PS_DOT :
buffer.append("" + toRealSize(3) + "," + toRealSize(3));
break;
case PS_DASHDOT :
buffer.append(
""
+ toRealSize(9)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3));
break;
case PS_DASHDOTDOT :
buffer.append(
""
+ toRealSize(9)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3)
+ ","
+ toRealSize(3));
break;
}
buffer.append("; ");
}
}
if (buffer.length() > 0) buffer.setLength(buffer.length()-1);
return buffer.toString();
}
}