gnujpdf blend modes

This commit is contained in:
Jindra Petřík
2021-03-21 17:04:32 +01:00
parent 5a4c9f34cc
commit bcbfea5666
7 changed files with 580 additions and 509 deletions

Binary file not shown.

View File

@@ -0,0 +1,9 @@
package com.jpexs.decompiler.flash.exporters;
/**
*
* @author JPEXS
*/
public interface BlendModeSetable {
public void setBlendMode(int mode);
}

View File

@@ -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();
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}

View File

@@ -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