/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2001 - 2013 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved. */ package org.pentaho.reporting.libraries.pixie.wmf; import java.awt.*; /** * A Windows metafile logical pen object. */ public class MfLogPen implements WmfObject { /** * ___ ___ ___ */ private static final float[] DASH_DASH = { 6f, 2f }; /** * _ _ _ _ _ _ */ private static final float[] DASH_DOT = { 2f, 2f }; /** * ___ _ ___ _ */ private static final float[] DASH_DASHDOT = { 6f, 2f, 2f, 2f }; /** * ___ _ _ ___ */ private static final float[] DASH_DASHDOTDOT = { 6f, 2f, 2f, 2f, 2f, 2f }; private int style; private int endCap; private int joinType; private int width; private Color color; /** * The default pen for a new DC. */ public MfLogPen() { style = PenConstants.PS_SOLID; width = 0; color = Color.black; } /** * Return one of the PS_ styles. */ public int getStyle() { return style; } public void setStyle( final int style ) { this.style = style & 0x000000FF; this.endCap = style & 0x00000F00; this.joinType = style & 0x0000F000; } /** * Return width. */ public int getWidth() { return width; } public void setWidth( final int width ) { this.width = width; } /** * Return color of the current pen, or null. */ public Color getColor() { return color; } public void setColor( final Color color ) { this.color = color; } /** * True if not a dashed or dotted style. */ public boolean isSimpleStyle() { switch( style ) { case PenConstants.PS_SOLID: case PenConstants.PS_NULL: case PenConstants.PS_INSIDEFRAME: return true; default: return false; } } public boolean isVisible() { return getStyle() != PenConstants.PS_NULL; } public int getType() { return OBJ_PEN; } public Stroke getStroke() { if ( isSimpleStyle() ) { return new BasicStroke( getWidth(), getEndCap(), getJoinType(), 0 ); } return new BasicStroke( getWidth(), getEndCap(), getJoinType(), 0, getDashes(), 0 ); } private int getJoinType() { switch( joinType ) { case PenConstants.PS_JOIN_ROUND: return BasicStroke.JOIN_ROUND; case PenConstants.PS_JOIN_BEVEL: return BasicStroke.JOIN_BEVEL; case PenConstants.PS_JOIN_MITER: return BasicStroke.JOIN_MITER; default: return BasicStroke.JOIN_ROUND; } } private int getEndCap() { switch( endCap ) { case PenConstants.PS_ENDCAP_ROUND: return BasicStroke.CAP_ROUND; case PenConstants.PS_ENDCAP_SQUARE: return BasicStroke.CAP_SQUARE; case PenConstants.PS_ENDCAP_FLAT: return BasicStroke.CAP_BUTT; default: return BasicStroke.CAP_ROUND; } } private float[] getDashes() { switch( getStyle() ) { case PenConstants.PS_DASH: return DASH_DASH; case PenConstants.PS_DOT: return DASH_DOT; case PenConstants.PS_DASHDOT: return DASH_DASHDOT; case PenConstants.PS_DASHDOTDOT: return DASH_DASHDOTDOT; default: throw new IllegalStateException( "Illegal Pen defined" ); } } public String toString() { final StringBuffer b = new StringBuffer( 100 ); b.append( "MfLogPen:=" ); b.append( " width=" ); b.append( getWidth() ); b.append( " style=" ); b.append( getStyle() ); b.append( " color=" ); b.append( getColor() ); return b.toString(); } }