package org.geogebra.desktop.factories;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Font;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.TexturePaint;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import org.geogebra.common.awt.GAffineTransform;
import org.geogebra.common.awt.GAlphaComposite;
import org.geogebra.common.awt.GArc2D;
import org.geogebra.common.awt.GArea;
import org.geogebra.common.awt.GBasicStroke;
import org.geogebra.common.awt.GBufferedImage;
import org.geogebra.common.awt.GColor;
import org.geogebra.common.awt.GDimension;
import org.geogebra.common.awt.GEllipse2DDouble;
import org.geogebra.common.awt.GFont;
import org.geogebra.common.awt.GFontRenderContext;
import org.geogebra.common.awt.GGeneralPath;
import org.geogebra.common.awt.GGradientPaint;
import org.geogebra.common.awt.GLine2D;
import org.geogebra.common.awt.GPaint;
import org.geogebra.common.awt.GPoint2D;
import org.geogebra.common.awt.GQuadCurve2D;
import org.geogebra.common.awt.GRectangle;
import org.geogebra.common.awt.GRectangle2D;
import org.geogebra.common.awt.GShape;
import org.geogebra.common.awt.MyImage;
import org.geogebra.common.awt.font.GTextLayout;
import org.geogebra.common.euclidian.EuclidianStatic;
import org.geogebra.common.euclidian.event.FocusListener;
import org.geogebra.common.factories.AwtFactory;
import org.geogebra.common.util.debug.Log;
import org.geogebra.desktop.awt.GAffineTransformD;
import org.geogebra.desktop.awt.GAlphaCompositeD;
import org.geogebra.desktop.awt.GArc2DD;
import org.geogebra.desktop.awt.GAreaD;
import org.geogebra.desktop.awt.GBasicStrokeD;
import org.geogebra.desktop.awt.GBufferedImageD;
import org.geogebra.desktop.awt.GDimensionD;
import org.geogebra.desktop.awt.GEllipse2DDoubleD;
import org.geogebra.desktop.awt.GFontD;
import org.geogebra.desktop.awt.GGeneralPathD;
import org.geogebra.desktop.awt.GGenericRectangle2DD;
import org.geogebra.desktop.awt.GGradientPaintD;
import org.geogebra.desktop.awt.GLine2DD;
import org.geogebra.desktop.awt.GPoint2DD;
import org.geogebra.desktop.awt.GQuadCurve2DD;
import org.geogebra.desktop.awt.GRectangleD;
import org.geogebra.desktop.awt.GTextLayoutD;
import org.geogebra.desktop.awt.GTexturePaintD;
import org.geogebra.desktop.euclidian.event.FocusListenerD;
import org.geogebra.desktop.gui.MyImageD;
public class AwtFactoryD extends AwtFactory {
@Override
public GAffineTransform newAffineTransform() {
return new GAffineTransformD();
}
@Override
public GRectangle2D newRectangle2D() {
return new GGenericRectangle2DD();
}
@Override
public GRectangle newRectangle(int x, int y, int w, int h) {
return new GRectangleD(x, y, w, h);
}
@Override
public GBufferedImage newBufferedImage(int pixelWidth, int pixelHeight,
double pixelRatio) {
return new GBufferedImageD(pixelWidth, pixelHeight,
GBufferedImage.TYPE_INT_ARGB);
}
@Override
public GBufferedImage createBufferedImage(int width, int height,
boolean transparency) throws OutOfMemoryError {
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
BufferedImage bufImg = gc.createCompatibleImage(width, height,
(transparency ? Transparency.TRANSLUCENT
: Transparency.BITMASK));
// Graphics2D g = (Graphics2D)bufImg.getGraphics();
// g.setBackground(new Color(0,0,0,0));
// g.clearRect(0,0,width,height);
return new GBufferedImageD(bufImg);
}
@Override
public MyImage newMyImage(int pixelWidth, int pixelHeight,
int typeIntArgb) {
return new MyImageD(
new BufferedImage(pixelWidth, pixelHeight, typeIntArgb));
}
@Override
public GDimension newDimension(int width, int height) {
return new GDimensionD(width, height);
}
@Override
public GPoint2D newPoint2D() {
return new GPoint2DD();
}
@Override
public GPoint2D newPoint2D(double x, double y) {
return new GPoint2DD(x, y);
}
/*
* @Override public Point newPoint() { return new geogebra.awt.Point(); }
*
* @Override public Point newPoint(int x, int y) { return new
* geogebra.awt.Point(x,y); }
*/
@Override
public GRectangle newRectangle(int i, int j) {
return new GRectangleD(i, j);
}
@Override
public GGeneralPath newGeneralPath() {
return new GGeneralPathD();
}
@Override
public GBasicStroke newMyBasicStroke(double f) {
return new GBasicStrokeD(f, GBasicStroke.CAP_ROUND,
GBasicStroke.JOIN_ROUND);
}
@Override
public GBasicStroke newBasicStroke(double width, int endCap, int lineJoin,
double miterLimit, double[] dash) {
BasicStroke s = new BasicStroke((float) width, endCap, lineJoin,
(float) miterLimit, doubleToFloat(dash), 0f);
return new GBasicStrokeD(s);
}
@Override
public GBasicStroke newBasicStroke(double f) {
return new GBasicStrokeD(f);
}
@Override
// CAP_BUTT, JOIN_MITER behaves differently on JRE & GWT
// see #1699
public GBasicStroke newBasicStrokeJoinMitre(double f) {
return new GBasicStrokeD(f, GBasicStroke.CAP_SQUARE,
GBasicStroke.JOIN_MITER);
}
@Override
public GLine2D newLine2D() {
return new GLine2DD();
}
@Override
public GRectangle newRectangle(GRectangle bb) {
return new GRectangleD(bb);
}
@Override
public GRectangle newRectangle() {
return new GRectangleD();
}
@Override
public GEllipse2DDoubleD newEllipse2DDouble() {
return new GEllipse2DDoubleD();
}
@Override
public GEllipse2DDouble newEllipse2DDouble(double i, double j, double k,
double l) {
return new GEllipse2DDoubleD(i, j, k, l);
}
@Override
public GArc2D newArc2D() {
return new GArc2DD();
}
@Override
public GQuadCurve2D newQuadCurve2D() {
return new GQuadCurve2DD();
}
/*
* @Override public Area newArea(GeneralPathClipped gp) { return new
* geogebra.awt.Area(gp); }
*/
@Override
public GArea newArea() {
return new GAreaD();
}
@Override
public GArea newArea(GShape shape) {
return new GAreaD(shape);
}
@Override
public GGeneralPath newGeneralPath(int rule) {
return new GGeneralPathD(rule);
}
@Override
public GBasicStroke newBasicStroke(double f, int cap, int join) {
return new GBasicStrokeD(f, cap, join);
}
@Override
public GTextLayout newTextLayout(String string, GFont fontLine,
GFontRenderContext frc) {
return new GTextLayoutD(string, fontLine, frc);
}
@Override
public GAlphaComposite newAlphaComposite(double alpha) {
return new GAlphaCompositeD(
AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
(float) alpha));
}
@Override
public GGradientPaint newGradientPaint(double x, double y, GColor bg2,
double x2, double i, GColor bg) {
return new GGradientPaintD(x, y, bg2, x2, i, bg);
}
@Override
public FocusListener newFocusListener(Object listener) {
return new FocusListenerD(listener);
}
@Override
public GPaint newTexturePaint(GBufferedImage subimage, GRectangle rect) {
return new GTexturePaintD(subimage, rect);
}
@Override
public GPaint newTexturePaint(MyImage subimage, GRectangle rect) {
return new GTexturePaintD(new TexturePaint(
(BufferedImage) ((MyImageD) subimage).getImage(),
GRectangleD.getAWTRectangle(rect)));
}
@Override
public GFont newFont(String name, int style, int size) {
return new GFontD(new Font(name, style, size));
}
public BasicStroke getAwtStroke(GBasicStroke s) {
if (!(s instanceof GBasicStrokeD)) {
if (s != null) {
Log.debug("other type: " + s.getClass());
}
return null;
}
return ((GBasicStrokeD) s).getImpl();
}
static public BasicStroke getDefaultStrokeAwt() {
return ((AwtFactoryD) AwtFactory.getPrototype())
.getAwtStroke(EuclidianStatic.getDefaultStroke());
}
}