deweese     01/12/13 17:07:50

  Modified:    sources/org/apache/batik/apps/svgbrowser FindDialog.java
               sources/org/apache/batik/ext/awt/image GraphicsUtil.java
               sources/org/apache/batik/ext/awt/image/rendered
                        AbstractTiledRed.java
               sources/org/apache/batik/gvt PatternPaintContext.java
  Log:
  1) Fixed a bug with find and case insensitivity
  2) Put in work arounds for several Mac OS X bugs.
  
  Revision  Changes    Path
  1.7       +14 -7     
xml-batik/sources/org/apache/batik/apps/svgbrowser/FindDialog.java
  
  Index: FindDialog.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/FindDialog.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FindDialog.java   2001/10/05 15:34:26     1.6
  +++ FindDialog.java   2001/12/14 01:07:50     1.7
  @@ -69,7 +69,7 @@
    * an SVG document.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: FindDialog.java,v 1.6 2001/10/05 15:34:26 tkormann Exp $
  + * @version $Id: FindDialog.java,v 1.7 2001/12/14 01:07:50 deweese Exp $
    */
   public class FindDialog extends JDialog implements ActionMap {
   
  @@ -288,6 +288,7 @@
            gn = walker.nextGraphicsNode();
            while (gn != null && 
                   ((currentIndex = match(gn, text, currentIndex)) < 0)) {
  +             currentIndex = 0;
                gn = walker.nextGraphicsNode();
            }
        }
  @@ -295,13 +296,12 @@
       }
   
       /**
  -     * Returns the index inside the specified TextNode of the specified text, or
  -     * -1 if not found.
  +     * Returns the index inside the specified TextNode of the
  +     * specified text, or -1 if not found.
        *
        * @param node the graphics node to check
        * @param text the text use to match 
  -     * @param index the index from which to start
  -     */
  +     * @param index the index from which to start */
       protected int match(GraphicsNode node, String text, int index) {
           if (!(node instanceof TextNode)
               || !node.isVisible()
  @@ -326,15 +326,22 @@
           }
        TextNode textNode = (TextNode)gn;
        // mark the selection of the substring found
  -     String text = textNode.getText();
  +     String text    = textNode.getText();
        String pattern = search.getText();
  +        if (!caseSensitive.isSelected()) {
  +            text    = text.toLowerCase();
  +            pattern = pattern.toLowerCase();
  +        }
  +     int end = text.indexOf(pattern, currentIndex);
  +
        AttributedCharacterIterator aci = 
            textNode.getAttributedCharacterIterator();
        aci.first();
  -     for (int i=0; i < text.indexOf(pattern, currentIndex); ++i) {
  +     for (int i=0; i < end; ++i) {
            aci.next();
        }
        Mark startMark = textNode.getMarkerForChar(aci.getIndex(), true);
  +     
        for (int i = 0; i < pattern.length()-1; ++i) {
            aci.next();
        }
  
  
  
  1.22      +9 -2      
xml-batik/sources/org/apache/batik/ext/awt/image/GraphicsUtil.java
  
  Index: GraphicsUtil.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/GraphicsUtil.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- GraphicsUtil.java 2001/12/05 13:46:04     1.21
  +++ GraphicsUtil.java 2001/12/14 01:07:50     1.22
  @@ -66,10 +66,13 @@
    * implementations.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thomas DeWeese</a>
  - * @version $Id: GraphicsUtil.java,v 1.21 2001/12/05 13:46:04 deweese Exp $
  + * @version $Id: GraphicsUtil.java,v 1.22 2001/12/14 01:07:50 deweese Exp $
    */
   public class GraphicsUtil {
   
  +    public static boolean useMacOSXHacks = 
  +     ("Mac OS X".equals(System.getProperty("os.name")));
  +
       public static AffineTransform IDENTITY = new AffineTransform();
   
       /**
  @@ -283,7 +286,11 @@
               // System.out.println("Starting Draw: " + cr);
               long startTime = System.currentTimeMillis();
   
  -            if (false) {
  +            if (useMacOSXHacks) {
  +             // We use this code path on MacOSX since the tile
  +             // drawing code below sometimes dies for no real
  +             // reason this seems to behave better.
  +
                   // org.ImageDisplay.showImage("foo: ", cr);
                   // This can be significantly faster but can also
                   // require much more memory.
  
  
  
  1.12      +89 -28    
xml-batik/sources/org/apache/batik/ext/awt/image/rendered/AbstractTiledRed.java
  
  Index: AbstractTiledRed.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/ext/awt/image/rendered/AbstractTiledRed.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- AbstractTiledRed.java     2001/07/26 18:03:07     1.11
  +++ AbstractTiledRed.java     2001/12/14 01:07:50     1.12
  @@ -13,7 +13,9 @@
   import java.util.Map;
   import java.util.List;
   import java.awt.Rectangle;
  +import java.awt.Point;
   
  +import java.awt.image.DataBufferInt;
   import java.awt.image.Raster;
   import java.awt.image.WritableRaster;
   import java.awt.image.SampleModel;
  @@ -26,7 +28,7 @@
    * the subclass implementation.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thomas DeWeese</a>
  - * @version $Id: AbstractTiledRed.java,v 1.11 2001/07/26 18:03:07 deweese Exp $
  + * @version $Id: AbstractTiledRed.java,v 1.12 2001/12/14 01:07:50 deweese Exp $
    */
   public abstract class AbstractTiledRed 
       extends    AbstractRed
  @@ -380,33 +382,7 @@
                   (insideTx0, insideTy0, xtiles, ytiles, occupied,
                    0, 0, xtiles, ytiles);
               // System.out.println("Starting Splits");
  -            TileBlock [] blocks = block.getBestSplit();
  -
  -            // System.out.println("Starting Computation: " + this);
  -            if (blocks != null)
  -                // System.out.println("Ending Splits: " + blocks.length);
  -
  -                for (int i=0; i<blocks.length; i++) {
  -                    TileBlock curr = blocks[i];
  -                    
  -                    // System.out.println("Block " + i + ":\n" + curr);
  -
  -                    int xloc = curr.getXLoc()*tileWidth +tileGridXOff;
  -                    int yloc = curr.getYLoc()*tileHeight+tileGridYOff;
  -                    Rectangle tb = new Rectangle(xloc, yloc,
  -                                                 curr.getWidth()*tileWidth,
  -                                                 curr.getHeight()*tileHeight);
  -                    tb = tb.intersection(bounds);
  -
  -                    WritableRaster child = 
  -                        wr.createWritableChild(tb.x, tb.y, tb.width, tb.height,
  -                                               tb.x, tb.y, null);
  -                    // System.out.println("Computing : " + child);
  -                    genRect(child);
  -
  -                    if (Thread.currentThread().isInterrupted())
  -                        return;
  -                }
  +         drawBlock(block, wr);
               // Exception e= new Exception("Foo");
               // e.printStackTrace();
           }
  @@ -508,5 +484,90 @@
               }
       }
   
  +    protected void drawBlock(TileBlock block, WritableRaster wr) {
  +     TileBlock [] blocks = block.getBestSplit();
  +     if (blocks == null)
  +         return;
  +
  +     if (GraphicsUtil.useMacOSXHacks) 
  +         // Mac OS X doesn't properly handle child rasters that
  +         // only reference part of the parent.  In particular it
  +         // appears to draw as if the childs X & Y were located at
  +         // the parents upper left corner.
  +         drawBlockAndCopy(blocks, wr);
  +     else
  +         drawBlockInPlace(blocks, wr);
  +    }
  +
  +    protected void drawBlockAndCopy(TileBlock []blocks, WritableRaster wr) {
  +     if (blocks.length == 1) {
  +         TileBlock curr = blocks[0];
  +         int xloc = curr.getXLoc()*tileWidth +tileGridXOff;
  +         int yloc = curr.getYLoc()*tileHeight+tileGridYOff;
  +         if ((xloc == wr.getMinX()) &&
  +             (yloc == wr.getMinY())) {
  +             // Safe to draw in place...
  +             drawBlockInPlace(blocks, wr);
  +             return;
  +         }
  +     }
  +
  +     int maxSz=0;
  +     for (int i=0; i<blocks.length; i++) {
  +         int sz = ((blocks[i].getWidth() *tileWidth)*
  +                   (blocks[i].getHeight()*tileHeight));
  +         if (sz > maxSz) maxSz=sz;
  +     }
  +     DataBufferInt dbi = new DataBufferInt(maxSz);
  +     int [] masks = { 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000 };
  +     boolean use_INT_PACK = GraphicsUtil.is_INT_PACK_Data
  +         (wr.getSampleModel(), false);
  +
  +     for (int i=0; i<blocks.length; i++) {
  +         TileBlock curr = blocks[i];
  +         int xloc = curr.getXLoc()*tileWidth +tileGridXOff;
  +         int yloc = curr.getYLoc()*tileHeight+tileGridYOff;
  +         Rectangle tb = new Rectangle(xloc, yloc,
  +                                      curr.getWidth()*tileWidth,
  +                                      curr.getHeight()*tileHeight);
  +         tb = tb.intersection(bounds);
  +         Point loc = new Point(tb.x, tb.y);
  +         WritableRaster child = Raster.createPackedRaster
  +             (dbi, tb.width, tb.height, tb.width, masks, loc);
  +         genRect(child);
  +         if (use_INT_PACK) GraphicsUtil.copyData_INT_PACK(child, wr);
  +         else              GraphicsUtil.copyData_FALLBACK(child, wr);
  +
  +         if (Thread.currentThread().isInterrupted())
  +             return;
  +     }
  +    }
  +
  +
  +    protected void drawBlockInPlace(TileBlock [] blocks, WritableRaster wr) {
  +     // System.out.println("Ending Splits: " + blocks.length);
  +
  +     for (int i=0; i<blocks.length; i++) {
  +         TileBlock curr = blocks[i];
  +                    
  +         // System.out.println("Block " + i + ":\n" + curr);
  +
  +         int xloc = curr.getXLoc()*tileWidth +tileGridXOff;
  +         int yloc = curr.getYLoc()*tileHeight+tileGridYOff;
  +         Rectangle tb = new Rectangle(xloc, yloc,
  +                                      curr.getWidth()*tileWidth,
  +                                      curr.getHeight()*tileHeight);
  +         tb = tb.intersection(bounds);
  +
  +         WritableRaster child = 
  +             wr.createWritableChild(tb.x, tb.y, tb.width, tb.height,
  +                                    tb.x, tb.y, null);
  +         // System.out.println("Computing : " + child);
  +         genRect(child);
  +
  +         if (Thread.currentThread().isInterrupted())
  +             return;
  +     }
  +    }
   }
   
  
  
  
  1.8       +10 -2     xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java
  
  Index: PatternPaintContext.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/PatternPaintContext.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PatternPaintContext.java  2001/09/17 20:45:18     1.7
  +++ PatternPaintContext.java  2001/12/14 01:07:50     1.8
  @@ -39,7 +39,7 @@
    * paint implementation.
    *
    * @author <a href="[EMAIL PROTECTED]">Vincent Hardy</a>
  - * @version $Id: PatternPaintContext.java,v 1.7 2001/09/17 20:45:18 deweese Exp $
  + * @version $Id: PatternPaintContext.java,v 1.8 2001/12/14 01:07:50 deweese Exp $
    */
   public class PatternPaintContext implements PaintContext {
   
  @@ -162,6 +162,14 @@
           GraphicsUtil.coerceData(wr, tiled.getColorModel(), 
                                   rasterCM.isAlphaPremultiplied());
   
  -        return wr;
  +     // On Mac OS X it always wants the raster at 0,0 if the
  +     // requested width and height matches raster we can just
  +     // return it.  Otherwise we create a translated child that
  +     // lives at 0,0.
  +     if ((raster.getWidth()  == width) &&
  +         (raster.getHeight() == height))
  +         return raster;
  +
  +     return wr.createTranslatedChild(0,0);
       }
   }
  
  
  

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

Reply via email to