vhardy      2002/09/19 00:36:50

  Modified:    sources/org/apache/batik/transcoder/wmf/tosvg
                        WMFPainter.java
  Log:
  Fix from Luan for his WMFPainter.java
  
  Revision  Changes    Path
  1.3       +123 -107  
xml-batik/sources/org/apache/batik/transcoder/wmf/tosvg/WMFPainter.java
  
  Index: WMFPainter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/transcoder/wmf/tosvg/WMFPainter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WMFPainter.java   10 Apr 2002 07:50:39 -0000      1.2
  +++ WMFPainter.java   19 Sep 2002 07:36:50 -0000      1.3
  @@ -40,7 +40,8 @@
     * @version $Id$
     * @author <a href="mailto:[EMAIL PROTECTED]";>Luan O'Carroll</a>
     */
  -public class WMFPainter {
  +public class WMFPainter
  +{
       private static final String WMF_FILE_EXTENSION = ".wmf";
   
       /**
  @@ -376,18 +377,20 @@
   
                   case WMFConstants.META_RECTANGLE:
                       {
  -                        int x1, y1, x2, y2;
  -                        x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  -                        x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  -                        y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  -                        y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
  +                      int x1, y1, x2, y2;
  +                      x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  +                      x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  +                      y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  +                      y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
   
  -                        if ( brushObject >= 0 ) {
  -                            setBrushColor( currentStore, g, brushObject );
  -                            g.fillRect( x1, y1, x2-x1-1, y2-y1-1 );
  -                        }
  -                        setPenColor( currentStore, g, penObject );
  -                        g.drawRect( x1, y1, x2-x1-1, y2-y1-1 );
  +                      if ( brushObject >= 0 ) {
  +                        setBrushColor( currentStore, g, brushObject );
  +                        g.fillRect( x1, y1, x2-x1, y2-y1 );
  +                      }
  +                      setPenColor( currentStore, g, penObject );
  +
  +                      if ( penObject >= 0 )
  +                        g.drawRect( x1, y1, x2-x1, y2-y1 );
                       }
                       break;
   
  @@ -412,17 +415,18 @@
   
                   case WMFConstants.META_ELLIPSE:
                       {
  -                        int x1, y1, x2, y2;
  -                        x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  -                        x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  -                        y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  -                        y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
  +                      int x1, y1, x2, y2;
  +                      x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  +                      x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  +                      y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  +                      y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
  +
  +                      setBrushColor( currentStore, g, brushObject );
  +                      if ( brushObject >= 0 )
  +                        g.fillOval( x1, y1, x2-x1, y2-y1 );
   
  -                        if ( brushObject >= 0 ) {
  -                            setBrushColor( currentStore, g, brushObject );
  -                            g.fillOval( x1, y1, x2-x1, y2-y1 );
  -                        }
  -                        setPenColor( currentStore, g, penObject );
  +                      setPenColor( currentStore, g, penObject );
  +                      if ( penObject >= 0 )
                           g.drawOval( x1, y1, x2-x1-1, y2-y1-1 );
                       }
                       break;
  @@ -462,7 +466,7 @@
                               TextLayout layout = new TextLayout( sr.text, font, frc 
);
                               pen.y += layout.getAscent();
   
  -                            if (( fontAngle != 0 ) || sr.text.startsWith("Sono una 
scala verticale di prevalenza") ) {
  +                            if ( fontAngle != 0 ) {
                                   AffineTransform at = new AffineTransform();
                                   float width = (float)layout.getBounds().getWidth();
                                   float height = 
(float)layout.getBounds().getHeight();
  @@ -486,26 +490,34 @@
                   case WMFConstants.META_ARC:
                   case WMFConstants.META_PIE:
                       {
  -                        int x1, y1, x2, y2, x3, y3, x4, y4;
  -                        x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  -                        x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  -                        x3 = (int)( scaleX * ( mr.ElementAt( 4 ).intValue()));
  -                        x4 = (int)( scaleX * ( mr.ElementAt( 6 ).intValue()));
  -                        y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  -                        y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
  -                        y3 = (int)( scaleY * ( mr.ElementAt( 5 ).intValue()));
  -                        y4 = (int)( scaleY * ( mr.ElementAt( 7 ).intValue()));
  +                      int x1, y1, x2, y2, x3, y3, x4, y4;
  +                      x1 = (int)( scaleX * ( vpX + mr.ElementAt( 0 ).intValue()));
  +                      x2 = (int)( scaleX * ( vpX + mr.ElementAt( 2 ).intValue()));
  +                      x3 = (int)( scaleX * ( mr.ElementAt( 4 ).intValue()));
  +                      x4 = (int)( scaleX * ( mr.ElementAt( 6 ).intValue()));
  +                      y1 = (int)( scaleY * ( vpY + mr.ElementAt( 1 ).intValue()));
  +                      y2 = (int)( scaleY * ( vpY + mr.ElementAt( 3 ).intValue()));
  +                      y3 = (int)( scaleY * ( mr.ElementAt( 5 ).intValue()));
  +                      y4 = (int)( scaleY * ( mr.ElementAt( 7 ).intValue()));
  +
  +                      int mx = x1+(x2-x1)/2;
  +                      int my = y1+(y2-y1)/2;
  +                      int startAngle = (int)Math.toDegrees( Math.atan2( 
-1.0*(y3-my), 1.0*(x3-mx)));
  +                      int endAngle = (int)Math.toDegrees( Math.atan2( -1.0*(y4-my), 
1.0*(x4-mx)));
  +                      if ( mr.functionId == 0x081A ) {
                           setBrushColor( currentStore, g, brushObject );
  -
  -                        int mx = x1+(x2-x1)/2;
  -                        int my = y1+(y2-y1)/2;
  -                        int startAngle = (int)Math.atan( (y3-my)/(x3-mx));
  -                        int endAngle = (int)Math.atan( (y4-my)/(x4-mx));
  -                        if ( mr.functionId == 0x0817 )
  -                            g.drawArc( x1, y1, x2-x1, y2-y1, startAngle, endAngle );
  -                        else
  -                            g.fillArc( x1, y1, x2-x1, y2-y1, startAngle, endAngle );
  -
  +                        if ( brushObject >= 0 )
  +                          g.fillArc( x1, y1, x2-x1, y2-y1, startAngle, endAngle );
  +                      }
  +
  +                      setPenColor( currentStore, g, penObject );
  +                      if ( startAngle < 0 ) startAngle = 360+startAngle;
  +                      if ( endAngle < 0 ) endAngle = 360+endAngle;
  +                      int len = Math.abs( endAngle - startAngle );
  +                      if ( endAngle < startAngle )
  +                        len = 360 - startAngle + endAngle;
  +                      if ( penObject >= 0 )
  +                        g.drawArc( x1, y1, x2-x1, y2-y1, startAngle, len );
                       }
                       break;
   
  @@ -623,26 +635,30 @@
           }
       }
   
  -    private void setPenColor( RecordStore currentStore, Graphics g, int penObject) {
  -        if ( penObject >= 0 ) {
  -            GdiObject gdiObj = currentStore.getObject( penObject );
  -            g.setColor( (Color)gdiObj.obj );
  -            penObject = -1;
  -        }
  +    private void setPenColor( RecordStore currentStore, Graphics g, int penObject)
  +    {
  +      if ( penObject >= 0 ) {
  +        GdiObject gdiObj = currentStore.getObject( penObject );
  +        g.setColor( (Color)gdiObj.obj );
  +        //penObject = -1;
  +      }
       }
   
  -    private void setBrushColor( RecordStore currentStore, Graphics g, int 
brushObject) {
  -        if ( brushObject >= 0 ) {
  -            GdiObject gdiObj = currentStore.getObject( brushObject );
  -            g.setColor( (Color)gdiObj.obj );
  -            brushObject = -1;
  -        }
  +
  +    private void setBrushColor( RecordStore currentStore, Graphics g, int 
brushObject)
  +    {
  +      if ( brushObject >= 0 ) {
  +        GdiObject gdiObj = currentStore.getObject( brushObject );
  +        g.setColor( (Color)gdiObj.obj );
  +        //brushObject = -1;
  +      }
       }
   
       /**
        * Sets the RecordStore this WMFPainter should use to render
        */
  -    public void setRecordStore(RecordStore currentStore){
  +    public void setRecordStore(RecordStore currentStore)
  +    {
           if(currentStore == null){
               throw new IllegalArgumentException();
           }
  @@ -681,68 +697,68 @@
   
   class MetaRecord /*implements Serializable*/
   {
  -     public int      functionId;
  -     public int      numPoints;
  +        public int   functionId;
  +        public int   numPoints;
  +
  +        private Vector       ptVector;
  +
  +        public MetaRecord()
  +        {
  +                ptVector = new Vector();
  +        }
   
  -     private Vector  ptVector;
  +        public void EnsureCapacity( int cc )
  +        {
  +                ptVector.ensureCapacity( cc );
  +        }
  +
  +        public void AddElement( Object obj )
  +        {
  +                ptVector.addElement( obj );
  +        }
   
  -     public MetaRecord()
  -     {
  -             ptVector = new Vector();
  -     }
  -
  -     public void EnsureCapacity( int cc )
  -     {
  -             ptVector.ensureCapacity( cc );
  -     }
  -
  -     public void AddElement( Object obj )
  -     {
  -             ptVector.addElement( obj );
  -     }
  -
  -     public Integer ElementAt( int offset )
  -     {
  -             return (Integer)ptVector.elementAt( offset );
  -     }
  +        public Integer ElementAt( int offset )
  +        {
  +                return (Integer)ptVector.elementAt( offset );
  +        }
   }
   
   class StringRecord extends MetaRecord /*implements Serializable*/
   {
  -     public String   text;
  +        public String        text;
   
  -     public StringRecord( String newText )
  -     {
  -             text = new String( newText );
  -     }
  +        public StringRecord( String newText )
  +        {
  +                text = new String( newText );
  +        }
   }
   
   class GdiObject /*implements Serializable*/
   {
  -     GdiObject( int _id, boolean _used )
  -     {
  -        id = _id;
  -        used = _used;
  -        type = 0;
  -     }
  -
  -     public void Clear()
  -     {
  -        used = false;
  -        type = 0;
  -     }
  -
  -     public void Setup( int _type, Object _obj )
  -     {
  -        obj = _obj;
  -        type = _type;
  -        used = true;
  -     }
  -
  -     int id;
  -     boolean used;
  -     Object obj;
  -     int type = 0;
  +  GdiObject( int _id, boolean _used )
  +  {
  +    id = _id;
  +    used = _used;
  +    type = 0;
  +  }
  +
  +  public void Clear()
  +  {
  +    used = false;
  +    type = 0;
  +  }
  +
  +  public void Setup( int _type, Object _obj )
  +  {
  +    obj = _obj;
  +    type = _type;
  +    used = true;
  +  }
  +
  +  int id;
  +  boolean used;
  +  Object obj;
  +  int type = 0;
   }
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to