Ticket #3313: work around openjdk bug without introducing new ones.patch

File work around openjdk bug without introducing new ones.patch, 1.9 KB (added by xeen, 15 years ago)

hopefully the OpenJDK has proper Area.intersect support :)

  • src/org/openstreetmap/josm/gui/MapView.java

     
    88import java.awt.Graphics;
    99import java.awt.Graphics2D;
    1010import java.awt.Point;
     11import java.awt.Polygon;
     12import java.awt.Rectangle;
    1113import java.awt.event.ComponentAdapter;
    1214import java.awt.event.ComponentEvent;
    1315import java.awt.event.MouseEvent;
    1416import java.awt.event.MouseMotionListener;
     17import java.awt.geom.Area;
    1518import java.awt.geom.GeneralPath;
    1619import java.awt.image.BufferedImage;
    1720import java.beans.PropertyChangeEvent;
     
    365368
    366369        // draw world borders
    367370        tempG.setColor(Color.WHITE);
    368         GeneralPath path = new GeneralPath();
    369371        Bounds b = getProjection().getWorldBoundsLatLon();
    370372        double lat = b.min.lat();
    371373        double lon = b.min.lon();
    372374
    373375        Point p = getPoint(b.min);
    374         path.moveTo(p.x, p.y);
     376
     377        GeneralPath path = new GeneralPath();
    375378
     379        path.moveTo(p.x, p.y);
    376380        double max = b.max.lat();
    377381        for(; lat <= max; lat += 1.0)
    378382        {
     
    398402            path.lineTo(p.x, p.y);
    399403        }
    400404
     405        int w = offscreenBuffer.getWidth();
     406        int h = offscreenBuffer.getHeight();
     407
     408        // Work around OpenJDK having problems when drawing out of bounds
     409        final Area border = new Area(path);
     410        // Make the viewport 1px larger in every direction to prevent an
     411        // additional 1px border when zooming in
     412        final Area viewport = new Area(new Rectangle(-1, -1, w + 2, h + 2));
     413        border.intersect(viewport);
     414        tempG.draw(border);
     415
    401416        if (playHeadMarker != null) {
    402417            playHeadMarker.paint(tempG, this);
    403418        }
    404         tempG.draw(path);
    405419
    406420        g.drawImage(offscreenBuffer, 0, 0, null);
    407421        super.paint(g);