mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-26 15:47:28 +00:00
gnujpdf blend modes
This commit is contained in:
BIN
lib/gnujpdf.jar
BIN
lib/gnujpdf.jar
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
package com.jpexs.decompiler.flash.exporters;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public interface BlendModeSetable {
|
||||
public void setBlendMode(int mode);
|
||||
}
|
||||
@@ -1,457 +0,0 @@
|
||||
package com.jpexs.decompiler.flash.exporters;
|
||||
|
||||
import com.jpexs.decompiler.flash.exporters.commonshape.Matrix;
|
||||
import java.awt.Color;
|
||||
import java.awt.Composite;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.Image;
|
||||
import java.awt.Paint;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Shape;
|
||||
import java.awt.Stroke;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.BufferedImageOp;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.awt.image.renderable.RenderableImage;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class DualGraphics2D extends Graphics2D {
|
||||
|
||||
private final Graphics2D first;
|
||||
|
||||
private final Graphics2D second;
|
||||
|
||||
public DualGraphics2D(Graphics2D first, Graphics2D second) {
|
||||
this.first = first;
|
||||
this.second = second;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Shape s) {
|
||||
first.draw(s);
|
||||
second.draw(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) {
|
||||
boolean ok1 = first.drawImage(img, xform, obs);
|
||||
boolean ok2 = second.drawImage(img, xform, obs);
|
||||
return ok1 && ok2; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {
|
||||
first.drawImage(img, op, x, y);
|
||||
second.drawImage(img, op, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
|
||||
first.drawRenderedImage(img, xform);
|
||||
second.drawRenderedImage(img, xform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRenderableImage(RenderableImage img, AffineTransform xform) {
|
||||
first.drawRenderableImage(img, xform);
|
||||
second.drawRenderableImage(img, xform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(String str, int x, int y) {
|
||||
first.drawString(str, x, y);
|
||||
second.drawString(str, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(String str, float x, float y) {
|
||||
first.drawString(str, x, y);
|
||||
second.drawString(str, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(AttributedCharacterIterator iterator, int x, int y) {
|
||||
first.drawString(iterator, x, y);
|
||||
second.drawString(iterator, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(AttributedCharacterIterator iterator, float x, float y) {
|
||||
first.drawString(iterator, x, y);
|
||||
second.drawString(iterator, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawGlyphVector(GlyphVector g, float x, float y) {
|
||||
first.drawGlyphVector(g, x, y);
|
||||
second.drawGlyphVector(g, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Shape s) {
|
||||
first.fill(s);
|
||||
second.fill(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hit(Rectangle rect, Shape s, boolean onStroke) {
|
||||
boolean ok1 = first.hit(rect, s, onStroke);
|
||||
boolean ok2 = second.hit(rect, s, onStroke);
|
||||
return ok1 && ok2; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public GraphicsConfiguration getDeviceConfiguration() {
|
||||
return first.getDeviceConfiguration(); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setComposite(Composite comp) {
|
||||
first.setComposite(comp);
|
||||
second.setComposite(comp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaint(Paint paint) {
|
||||
first.setPaint(paint);
|
||||
second.setPaint(paint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStroke(Stroke s) {
|
||||
first.setStroke(s);
|
||||
second.setStroke(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) {
|
||||
first.setRenderingHint(hintKey, hintValue);
|
||||
second.setRenderingHint(hintKey, hintValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRenderingHint(RenderingHints.Key hintKey) {
|
||||
return first.getRenderingHint(hintKey); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRenderingHints(Map<?, ?> hints) {
|
||||
first.setRenderingHints(hints);
|
||||
second.setRenderingHints(hints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRenderingHints(Map<?, ?> hints) {
|
||||
first.addRenderingHints(hints);
|
||||
second.addRenderingHints(hints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderingHints getRenderingHints() {
|
||||
return first.getRenderingHints();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void translate(int x, int y) {
|
||||
first.translate(x, y);
|
||||
second.translate(x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void translate(double tx, double ty) {
|
||||
first.translate(tx, ty);
|
||||
second.translate(tx, ty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rotate(double theta) {
|
||||
first.rotate(theta);
|
||||
second.rotate(theta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rotate(double theta, double x, double y) {
|
||||
first.rotate(theta, x, y);
|
||||
second.rotate(theta, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scale(double sx, double sy) {
|
||||
first.scale(sx, sy);
|
||||
second.scale(sx, sy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shear(double shx, double shy) {
|
||||
first.shear(shx, shy);
|
||||
second.shear(shx, shy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(AffineTransform Tx) {
|
||||
first.transform(Tx);
|
||||
second.transform(Tx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTransform(AffineTransform Tx) {
|
||||
first.setTransform(Tx);
|
||||
second.setTransform(Tx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AffineTransform getTransform() {
|
||||
return first.getTransform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Paint getPaint() {
|
||||
return first.getPaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Composite getComposite() {
|
||||
return first.getComposite();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackground(Color color) {
|
||||
first.setBackground(color);
|
||||
second.setBackground(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getBackground() {
|
||||
return first.getBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stroke getStroke() {
|
||||
return first.getStroke();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clip(Shape s) {
|
||||
first.clip(s);
|
||||
second.clip(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontRenderContext getFontRenderContext() {
|
||||
return first.getFontRenderContext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Graphics create() {
|
||||
return this; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getColor() {
|
||||
return first.getColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(Color c) {
|
||||
first.setColor(c);
|
||||
second.setColor(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaintMode() {
|
||||
first.setPaintMode();
|
||||
second.setPaintMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setXORMode(Color c1) {
|
||||
first.setXORMode(c1);
|
||||
second.setXORMode(c1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Font getFont() {
|
||||
return first.getFont();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFont(Font font) {
|
||||
first.setFont(font);
|
||||
second.setFont(font);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontMetrics getFontMetrics(Font f) {
|
||||
return first.getFontMetrics();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle getClipBounds() {
|
||||
return first.getClipBounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clipRect(int x, int y, int width, int height) {
|
||||
first.clearRect(x, y, width, height);
|
||||
second.clipRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClip(int x, int y, int width, int height) {
|
||||
first.setClip(x, y, width, height);
|
||||
second.setClip(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Shape getClip() {
|
||||
return first.getClip();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClip(Shape clip) {
|
||||
first.setClip(clip);
|
||||
second.setClip(clip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyArea(int x, int y, int width, int height, int dx, int dy) {
|
||||
first.copyArea(x, y, width, height, dx, dy);
|
||||
second.copyArea(x, y, width, height, dx, dy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawLine(int x1, int y1, int x2, int y2) {
|
||||
first.drawLine(x1, y1, x2, y2);
|
||||
second.drawLine(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRect(int x, int y, int width, int height) {
|
||||
first.fillRect(x, y, width, height);
|
||||
second.fillRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearRect(int x, int y, int width, int height) {
|
||||
first.clearRect(x, y, width, height);
|
||||
second.clearRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
|
||||
first.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
second.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
|
||||
first.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
second.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawOval(int x, int y, int width, int height) {
|
||||
first.drawOval(x, y, width, height);
|
||||
second.drawOval(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillOval(int x, int y, int width, int height) {
|
||||
first.fillOval(x, y, width, height);
|
||||
second.fillOval(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
|
||||
first.drawArc(x, y, width, height, startAngle, arcAngle);
|
||||
second.drawArc(x, y, width, height, startAngle, arcAngle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
|
||||
first.fillArc(x, y, width, height, startAngle, arcAngle);
|
||||
second.fillArc(x, y, width, height, startAngle, arcAngle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
first.drawPolyline(xPoints, yPoints, nPoints);
|
||||
second.drawPolyline(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
first.drawPolyline(xPoints, yPoints, nPoints);
|
||||
second.drawPolyline(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
first.fillPolygon(xPoints, yPoints, nPoints);
|
||||
second.fillPolygon(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, x, y, observer);
|
||||
boolean ok2 = second.drawImage(img, x, y, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, x, y, width, height, observer);
|
||||
boolean ok2 = second.drawImage(img, x, y, width, height, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, x, y, bgcolor, observer);
|
||||
boolean ok2 = second.drawImage(img, x, y, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, x, y, width, height, bgcolor, observer);
|
||||
boolean ok2 = second.drawImage(img, x, y, width, height, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
|
||||
boolean ok2 = second.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = first.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);
|
||||
boolean ok2 = second.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
first.dispose();
|
||||
second.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
package com.jpexs.decompiler.flash.exporters;
|
||||
|
||||
import gnu.jpdf.PDFGraphics;
|
||||
import java.awt.Color;
|
||||
import java.awt.Composite;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.Image;
|
||||
import java.awt.Paint;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Shape;
|
||||
import java.awt.Stroke;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.BufferedImageOp;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.awt.image.renderable.RenderableImage;
|
||||
import java.text.AttributedCharacterIterator;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable {
|
||||
|
||||
private final Graphics2D imageGraphics;
|
||||
|
||||
private final PDFGraphics pdfGraphics;
|
||||
|
||||
public DualPdfGraphics2D(Graphics2D first, PDFGraphics second) {
|
||||
this.imageGraphics = first;
|
||||
this.pdfGraphics = second;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Shape s) {
|
||||
imageGraphics.draw(s);
|
||||
pdfGraphics.draw(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, xform, obs);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, xform, obs);
|
||||
return ok1 && ok2; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {
|
||||
imageGraphics.drawImage(img, op, x, y);
|
||||
pdfGraphics.drawImage(img, op, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
|
||||
imageGraphics.drawRenderedImage(img, xform);
|
||||
pdfGraphics.drawRenderedImage(img, xform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRenderableImage(RenderableImage img, AffineTransform xform) {
|
||||
imageGraphics.drawRenderableImage(img, xform);
|
||||
pdfGraphics.drawRenderableImage(img, xform);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(String str, int x, int y) {
|
||||
imageGraphics.drawString(str, x, y);
|
||||
pdfGraphics.drawString(str, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(String str, float x, float y) {
|
||||
imageGraphics.drawString(str, x, y);
|
||||
pdfGraphics.drawString(str, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(AttributedCharacterIterator iterator, int x, int y) {
|
||||
imageGraphics.drawString(iterator, x, y);
|
||||
pdfGraphics.drawString(iterator, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawString(AttributedCharacterIterator iterator, float x, float y) {
|
||||
imageGraphics.drawString(iterator, x, y);
|
||||
pdfGraphics.drawString(iterator, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawGlyphVector(GlyphVector g, float x, float y) {
|
||||
imageGraphics.drawGlyphVector(g, x, y);
|
||||
pdfGraphics.drawGlyphVector(g, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Shape s) {
|
||||
imageGraphics.fill(s);
|
||||
pdfGraphics.fill(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hit(Rectangle rect, Shape s, boolean onStroke) {
|
||||
boolean ok1 = imageGraphics.hit(rect, s, onStroke);
|
||||
boolean ok2 = pdfGraphics.hit(rect, s, onStroke);
|
||||
return ok1 && ok2; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public GraphicsConfiguration getDeviceConfiguration() {
|
||||
return imageGraphics.getDeviceConfiguration(); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setComposite(Composite comp) {
|
||||
imageGraphics.setComposite(comp);
|
||||
pdfGraphics.setComposite(comp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaint(Paint paint) {
|
||||
imageGraphics.setPaint(paint);
|
||||
pdfGraphics.setPaint(paint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStroke(Stroke s) {
|
||||
imageGraphics.setStroke(s);
|
||||
pdfGraphics.setStroke(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) {
|
||||
imageGraphics.setRenderingHint(hintKey, hintValue);
|
||||
pdfGraphics.setRenderingHint(hintKey, hintValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getRenderingHint(RenderingHints.Key hintKey) {
|
||||
return imageGraphics.getRenderingHint(hintKey); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRenderingHints(Map<?, ?> hints) {
|
||||
imageGraphics.setRenderingHints(hints);
|
||||
pdfGraphics.setRenderingHints(hints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRenderingHints(Map<?, ?> hints) {
|
||||
imageGraphics.addRenderingHints(hints);
|
||||
pdfGraphics.addRenderingHints(hints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderingHints getRenderingHints() {
|
||||
return imageGraphics.getRenderingHints();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void translate(int x, int y) {
|
||||
imageGraphics.translate(x, y);
|
||||
pdfGraphics.translate(x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void translate(double tx, double ty) {
|
||||
imageGraphics.translate(tx, ty);
|
||||
pdfGraphics.translate(tx, ty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rotate(double theta) {
|
||||
imageGraphics.rotate(theta);
|
||||
pdfGraphics.rotate(theta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rotate(double theta, double x, double y) {
|
||||
imageGraphics.rotate(theta, x, y);
|
||||
pdfGraphics.rotate(theta, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scale(double sx, double sy) {
|
||||
imageGraphics.scale(sx, sy);
|
||||
pdfGraphics.scale(sx, sy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shear(double shx, double shy) {
|
||||
imageGraphics.shear(shx, shy);
|
||||
pdfGraphics.shear(shx, shy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(AffineTransform Tx) {
|
||||
imageGraphics.transform(Tx);
|
||||
pdfGraphics.transform(Tx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTransform(AffineTransform Tx) {
|
||||
imageGraphics.setTransform(Tx);
|
||||
pdfGraphics.setTransform(Tx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AffineTransform getTransform() {
|
||||
return imageGraphics.getTransform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Paint getPaint() {
|
||||
return imageGraphics.getPaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Composite getComposite() {
|
||||
return imageGraphics.getComposite();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackground(Color color) {
|
||||
imageGraphics.setBackground(color);
|
||||
pdfGraphics.setBackground(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getBackground() {
|
||||
return imageGraphics.getBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stroke getStroke() {
|
||||
return imageGraphics.getStroke();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clip(Shape s) {
|
||||
imageGraphics.clip(s);
|
||||
pdfGraphics.clip(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontRenderContext getFontRenderContext() {
|
||||
return imageGraphics.getFontRenderContext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Graphics create() {
|
||||
return this; //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getColor() {
|
||||
return imageGraphics.getColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(Color c) {
|
||||
imageGraphics.setColor(c);
|
||||
pdfGraphics.setColor(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPaintMode() {
|
||||
imageGraphics.setPaintMode();
|
||||
pdfGraphics.setPaintMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setXORMode(Color c1) {
|
||||
imageGraphics.setXORMode(c1);
|
||||
pdfGraphics.setXORMode(c1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Font getFont() {
|
||||
return imageGraphics.getFont();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFont(Font font) {
|
||||
imageGraphics.setFont(font);
|
||||
pdfGraphics.setFont(font);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontMetrics getFontMetrics(Font f) {
|
||||
return imageGraphics.getFontMetrics();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle getClipBounds() {
|
||||
return imageGraphics.getClipBounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clipRect(int x, int y, int width, int height) {
|
||||
imageGraphics.clearRect(x, y, width, height);
|
||||
pdfGraphics.clipRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClip(int x, int y, int width, int height) {
|
||||
imageGraphics.setClip(x, y, width, height);
|
||||
pdfGraphics.setClip(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Shape getClip() {
|
||||
return imageGraphics.getClip();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClip(Shape clip) {
|
||||
imageGraphics.setClip(clip);
|
||||
pdfGraphics.setClip(clip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyArea(int x, int y, int width, int height, int dx, int dy) {
|
||||
imageGraphics.copyArea(x, y, width, height, dx, dy);
|
||||
pdfGraphics.copyArea(x, y, width, height, dx, dy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawLine(int x1, int y1, int x2, int y2) {
|
||||
imageGraphics.drawLine(x1, y1, x2, y2);
|
||||
pdfGraphics.drawLine(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRect(int x, int y, int width, int height) {
|
||||
imageGraphics.fillRect(x, y, width, height);
|
||||
pdfGraphics.fillRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearRect(int x, int y, int width, int height) {
|
||||
imageGraphics.clearRect(x, y, width, height);
|
||||
pdfGraphics.clearRect(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
|
||||
imageGraphics.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
pdfGraphics.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
|
||||
imageGraphics.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
pdfGraphics.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawOval(int x, int y, int width, int height) {
|
||||
imageGraphics.drawOval(x, y, width, height);
|
||||
pdfGraphics.drawOval(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillOval(int x, int y, int width, int height) {
|
||||
imageGraphics.fillOval(x, y, width, height);
|
||||
pdfGraphics.fillOval(x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
|
||||
imageGraphics.drawArc(x, y, width, height, startAngle, arcAngle);
|
||||
pdfGraphics.drawArc(x, y, width, height, startAngle, arcAngle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
|
||||
imageGraphics.fillArc(x, y, width, height, startAngle, arcAngle);
|
||||
pdfGraphics.fillArc(x, y, width, height, startAngle, arcAngle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
imageGraphics.drawPolyline(xPoints, yPoints, nPoints);
|
||||
pdfGraphics.drawPolyline(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
imageGraphics.drawPolyline(xPoints, yPoints, nPoints);
|
||||
pdfGraphics.drawPolyline(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
|
||||
imageGraphics.fillPolygon(xPoints, yPoints, nPoints);
|
||||
pdfGraphics.fillPolygon(xPoints, yPoints, nPoints);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, x, y, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, x, y, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, x, y, width, height, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, x, y, width, height, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, x, y, bgcolor, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, x, y, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, x, y, width, height, bgcolor, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, x, y, width, height, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) {
|
||||
boolean ok1 = imageGraphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);
|
||||
boolean ok2 = pdfGraphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer);
|
||||
return ok1 && ok2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
imageGraphics.dispose();
|
||||
pdfGraphics.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlendMode(int mode) {
|
||||
switch (mode) {
|
||||
case 0:
|
||||
case 1:
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 2:
|
||||
//Layer
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 3:
|
||||
pdfGraphics.setBlendMode("Multiply");
|
||||
break;
|
||||
case 4:
|
||||
pdfGraphics.setBlendMode("Screen");
|
||||
break;
|
||||
case 5:
|
||||
pdfGraphics.setBlendMode("Lighten");
|
||||
break;
|
||||
case 6:
|
||||
pdfGraphics.setBlendMode("Darken");
|
||||
break;
|
||||
case 7:
|
||||
pdfGraphics.setBlendMode("Difference");
|
||||
break;
|
||||
case 8:
|
||||
//Add
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 9:
|
||||
//Subtract
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 10:
|
||||
//Invert
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 11:
|
||||
//Alpha
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 12:
|
||||
//Erase
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
case 13:
|
||||
pdfGraphics.setBlendMode("Overlay");
|
||||
break;
|
||||
case 14:
|
||||
pdfGraphics.setBlendMode("HardLight");
|
||||
break;
|
||||
default: // Not implemented
|
||||
pdfGraphics.setBlendMode("Normal");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -533,7 +533,7 @@ public class FrameExporter {
|
||||
return compositeGraphics;
|
||||
}
|
||||
final Graphics2D parentGraphics = (Graphics2D) super.getGraphics();
|
||||
compositeGraphics = new DualGraphics2D(parentGraphics, g);
|
||||
compositeGraphics = new DualPdfGraphics2D(parentGraphics, (PDFGraphics) g);
|
||||
return compositeGraphics;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.jpexs.decompiler.flash.timeline;
|
||||
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.exporters.BlendModeSetable;
|
||||
import com.jpexs.decompiler.flash.exporters.FrameExporter;
|
||||
import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle;
|
||||
import com.jpexs.decompiler.flash.exporters.commonshape.Matrix;
|
||||
@@ -694,7 +695,6 @@ public class Timeline {
|
||||
//strokeTransform = strokeTransform.preConcatenate(Matrix.getTranslateInstance(-rect.xMin, -rect.yMin));
|
||||
//strokeTransform = strokeTransform.clone();
|
||||
//strokeTransform.translate(-rect.xMin, -rect.yMin);
|
||||
|
||||
if (drawable instanceof ButtonTag) {
|
||||
dframe = ButtonTag.FRAME_UP;
|
||||
if (renderContext.cursorPosition != null) {
|
||||
@@ -710,7 +710,6 @@ public class Timeline {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (filters != null && !filters.isEmpty()) {
|
||||
canUseSameImage = false;
|
||||
}
|
||||
@@ -767,55 +766,58 @@ public class Timeline {
|
||||
|
||||
AffineTransform trans = drawMatrix.toTransform();
|
||||
|
||||
switch (blendMode) {
|
||||
case 0:
|
||||
case 1:
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 2: // Layer
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 3:
|
||||
g.setComposite(BlendComposite.Multiply);
|
||||
break;
|
||||
case 4:
|
||||
g.setComposite(BlendComposite.Screen);
|
||||
break;
|
||||
case 5:
|
||||
g.setComposite(BlendComposite.Lighten);
|
||||
break;
|
||||
case 6:
|
||||
g.setComposite(BlendComposite.Darken);
|
||||
break;
|
||||
case 7:
|
||||
g.setComposite(BlendComposite.Difference);
|
||||
break;
|
||||
case 8:
|
||||
g.setComposite(BlendComposite.Add);
|
||||
break;
|
||||
case 9:
|
||||
g.setComposite(BlendComposite.Subtract);
|
||||
break;
|
||||
case 10:
|
||||
g.setComposite(BlendComposite.Invert);
|
||||
break;
|
||||
case 11:
|
||||
g.setComposite(BlendComposite.Alpha);
|
||||
break;
|
||||
case 12:
|
||||
g.setComposite(BlendComposite.Erase);
|
||||
break;
|
||||
case 13:
|
||||
g.setComposite(BlendComposite.Overlay);
|
||||
break;
|
||||
case 14:
|
||||
g.setComposite(BlendComposite.HardLight);
|
||||
break;
|
||||
default: // Not implemented
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
if (g instanceof BlendModeSetable) {
|
||||
((BlendModeSetable) g).setBlendMode(blendMode);
|
||||
} else {
|
||||
switch (blendMode) {
|
||||
case 0:
|
||||
case 1:
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 2: // Layer
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 3:
|
||||
g.setComposite(BlendComposite.Multiply);
|
||||
break;
|
||||
case 4:
|
||||
g.setComposite(BlendComposite.Screen);
|
||||
break;
|
||||
case 5:
|
||||
g.setComposite(BlendComposite.Lighten);
|
||||
break;
|
||||
case 6:
|
||||
g.setComposite(BlendComposite.Darken);
|
||||
break;
|
||||
case 7:
|
||||
g.setComposite(BlendComposite.Difference);
|
||||
break;
|
||||
case 8:
|
||||
g.setComposite(BlendComposite.Add);
|
||||
break;
|
||||
case 9:
|
||||
g.setComposite(BlendComposite.Subtract);
|
||||
break;
|
||||
case 10:
|
||||
g.setComposite(BlendComposite.Invert);
|
||||
break;
|
||||
case 11:
|
||||
g.setComposite(BlendComposite.Alpha);
|
||||
break;
|
||||
case 12:
|
||||
g.setComposite(BlendComposite.Erase);
|
||||
break;
|
||||
case 13:
|
||||
g.setComposite(BlendComposite.Overlay);
|
||||
break;
|
||||
case 14:
|
||||
g.setComposite(BlendComposite.HardLight);
|
||||
break;
|
||||
default: // Not implemented
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (clipDepth > -1) {
|
||||
BufferedImage mask = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
|
||||
Graphics2D gm = (Graphics2D) mask.getGraphics();
|
||||
@@ -855,6 +857,9 @@ public class Timeline {
|
||||
g.setTransform(drawMatrix.toTransform());
|
||||
g.drawImage(img.getBufferedImage(), 0, 0, null);
|
||||
}
|
||||
if (g instanceof BlendModeSetable) {
|
||||
((BlendModeSetable) g).setBlendMode(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user