package org.geogebra.desktop.awt;
import java.awt.geom.GeneralPath;
import java.awt.geom.Path2D;
import org.geogebra.common.awt.GAffineTransform;
import org.geogebra.common.awt.GGeneralPath;
import org.geogebra.common.awt.GPathIterator;
import org.geogebra.common.awt.GPoint2D;
import org.geogebra.common.awt.GRectangle;
import org.geogebra.common.awt.GRectangle2D;
import org.geogebra.common.awt.GShape;
import org.geogebra.common.util.debug.Log;
public class GGeneralPathD implements GGeneralPath, GShapeD {
private GeneralPath impl = new GeneralPath();
public GGeneralPathD(GeneralPath g) {
impl = g;
}
public GGeneralPathD() {
// default winding rule changed for ggb50 (for Polygons) #3983
impl = new GeneralPath(Path2D.WIND_EVEN_ODD);
}
public GGeneralPathD(int rule) {
impl = new GeneralPath(rule);
}
public static GeneralPath getAwtGeneralPath(GGeneralPath gp) {
if (!(gp instanceof GGeneralPathD)) {
if (gp != null) {
Log.debug("other type");
}
return null;
}
return ((GGeneralPathD) gp).impl;
}
@Override
public synchronized void moveTo(double f, double g) {
impl.moveTo(f, g);
}
@Override
public synchronized void reset() {
impl.reset();
}
@Override
public synchronized void lineTo(double x, double y) {
impl.lineTo(x, y);
}
@Override
public synchronized void closePath() {
impl.closePath();
}
@Override
public synchronized void append(GShape s, boolean connect) {
if (!(s instanceof GShapeD)) {
return;
}
impl.append(((GShapeD) s).getAwtShape(), connect);
}
@Override
public boolean intersects(int i, int j, int k, int l) {
return impl.intersects(i, j, k, l);
}
@Override
public boolean contains(int x, int y) {
return impl.contains(x, y);
}
@Override
public GRectangle getBounds() {
return new GRectangleD(impl.getBounds());
}
@Override
public GRectangle2D getBounds2D() {
return new GGenericRectangle2DD(impl.getBounds2D());
}
public boolean contains(GRectangle rectangle) {
return impl.contains(GRectangleD.getAWTRectangle(rectangle));
}
@Override
public boolean contains(double xTry, double yTry) {
return impl.contains(xTry, yTry);
}
@Override
public java.awt.Shape getAwtShape() {
return impl;
}
@Override
public GPathIterator getPathIterator(GAffineTransform affineTransform) {
// TODO Auto-generated method stub
return new GPathIteratorD(impl.getPathIterator(
GAffineTransformD.getAwtAffineTransform(affineTransform)));
}
@Override
public boolean intersects(double x, double y, double w, double h) {
return impl.intersects(x, y, w, h);
}
@Override
public boolean intersects(GRectangle2D r) {
return impl.intersects(GGenericRectangle2DD.getAWTRectangle2D(r));
}
@Override
public GShape createTransformedShape(GAffineTransform affineTransform) {
return new GGenericShapeD(impl.createTransformedShape(
((GAffineTransformD) affineTransform).getImpl()));
}
@Override
public GPoint2D getCurrentPoint() {
if (impl.getCurrentPoint() == null) {
return null;
}
return new GPoint2DD(impl.getCurrentPoint().getX(),
impl.getCurrentPoint().getY());
}
@Override
public boolean contains(GRectangle2D p) {
return impl.contains(GGenericRectangle2DD.getAWTRectangle2D(p));
}
@Override
public boolean contains(double arg0, double arg1, double arg2,
double arg3) {
return impl.contains(arg0, arg1, arg2, arg3);
}
@Override
public boolean contains(GPoint2D p) {
if (p == null) {
return false;
}
return impl.contains(p.getX(), p.getY());
}
@Override
public void curveTo(double f, double g, double h, double i, double j,
double k) {
impl.curveTo(f, g, h, i, j, k);
}
}