Ignore:
Timestamp:
2017-07-13T23:02:13+02:00 (9 years ago)
Author:
michael2402
Message:

Fix #15006: Separate offset handling for ways, areas and node. Handle offset for all three of them.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/placement/CompletelyInsideAreaStrategy.java

    r12082 r12476  
    33
    44import java.awt.Rectangle;
     5import java.awt.geom.Point2D;
    56import java.awt.geom.Rectangle2D;
    67
     
    2021     * An instance of this class.
    2122     */
    22     public static final CompletelyInsideAreaStrategy INSTANCE = new CompletelyInsideAreaStrategy();
     23    public static final CompletelyInsideAreaStrategy INSTANCE = new CompletelyInsideAreaStrategy(0, 0);
    2324
    24     protected CompletelyInsideAreaStrategy() {
     25    protected final double offsetX;
     26    protected final double offsetY;
     27
     28    protected CompletelyInsideAreaStrategy(double offsetX, double offsetY) {
     29        this.offsetX = offsetX;
     30        this.offsetY = offsetY;
    2531    }
    2632
     
    8995    }
    9096
    91     private static MapViewPositionAndRotation centerOf(MapViewState mapViewState, Rectangle centeredNBounds) {
    92         return new MapViewPositionAndRotation(
    93                 mapViewState.getForView(centeredNBounds.getCenterX(), centeredNBounds.getCenterY()), 0);
     97    private MapViewPositionAndRotation centerOf(MapViewState mapViewState, Rectangle centeredNBounds) {
     98        double x = centeredNBounds.getCenterX() + offsetX;
     99        double y = centeredNBounds.getCenterY() + offsetY;
     100        return new MapViewPositionAndRotation(mapViewState.getForView(x, y), 0);
    94101    }
    95102
     
    98105        return false;
    99106    }
     107
     108    @Override
     109    public PositionForAreaStrategy withAddedOffset(Point2D addToOffset) {
     110        if (Math.abs(addToOffset.getX()) < 1e-5 && Math.abs(addToOffset.getY()) < 1e-5) {
     111            return this;
     112        } else {
     113            return new CompletelyInsideAreaStrategy(offsetX + addToOffset.getX(), offsetY + addToOffset.getY());
     114        }
     115    }
     116
     117    @Override
     118    public String toString() {
     119        return "CompletelyInsideAreaStrategy [offsetX=" + offsetX + ", offsetY=" + offsetY + "]";
     120    }
     121
     122    @Override
     123    public int hashCode() {
     124        final int prime = 31;
     125        int result = 1;
     126        long temp;
     127        temp = Double.doubleToLongBits(offsetX);
     128        result = prime * result + (int) (temp ^ (temp >>> 32));
     129        temp = Double.doubleToLongBits(offsetY);
     130        result = prime * result + (int) (temp ^ (temp >>> 32));
     131        return result;
     132    }
     133
     134    @Override
     135    public boolean equals(Object obj) {
     136        if (this == obj) {
     137            return true;
     138        }
     139        if (obj == null) {
     140            return false;
     141        }
     142        if (getClass() != obj.getClass()) {
     143            return false;
     144        }
     145        CompletelyInsideAreaStrategy other = (CompletelyInsideAreaStrategy) obj;
     146        return Double.doubleToLongBits(offsetX) == Double.doubleToLongBits(other.offsetX)
     147                && Double.doubleToLongBits(offsetY) != Double.doubleToLongBits(other.offsetY);
     148    }
    100149}
Note: See TracChangeset for help on using the changeset viewer.