From 4e8c81370001397adedab917fc2aa5807e9dea07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 17 Nov 2014 14:29:51 +0100 Subject: [PATCH] Font display using FlashPlayer fix - correct rect --- lib/JavactiveX.jar | Bin 1128160 -> 1128162 bytes .../decompiler/flash/tags/base/FontTag.java | 4 +- nbproject/project.xml | 2 +- .../decompiler/flash/gui/PreviewPanel.java | 61 +++++++++++++++--- .../flash/gui/player/FlashPlayerPanel.java | 4 +- 5 files changed, 58 insertions(+), 13 deletions(-) diff --git a/lib/JavactiveX.jar b/lib/JavactiveX.jar index d3143e8899c9330c03bf57ae173f4eb9c9fb2787..e80251090903101ca15f9da9b4b8c7bbeff20199 100644 GIT binary patch delta 28474 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 delta 27533 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 G^#1@%vzK`Q diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java index 49675c624..e5a52fa81 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -55,7 +55,7 @@ import java.util.Set; */ public abstract class FontTag extends CharacterTag implements AloneTag, DrawableTag { - protected final int previewSize = 500; + public static final int PREVIEWSIZE = 500; public FontTag(SWF swf, int id, String name, ByteArrayRange data) { super(swf, id, name, data); @@ -316,7 +316,7 @@ public abstract class FontTag extends CharacterTag implements AloneTag, Drawable @Override public RECT getRect(Set added) { - return new RECT(0, (int) (previewSize * SWF.unitDivisor), 0, (int) (previewSize * SWF.unitDivisor)); + return new RECT(0, (int) (PREVIEWSIZE * SWF.unitDivisor), 0, (int) (PREVIEWSIZE * SWF.unitDivisor)); } @Override diff --git a/nbproject/project.xml b/nbproject/project.xml index 4ab983a72..73200092d 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -203,7 +203,7 @@ src - lib/LZMA.jar;lib/jna-3.5.1.jar;lib/jpproxy.jar;lib/trident-6.2.jar;lib/substance-flamingo-6.2.jar;lib/flamingo-6.2.jar;lib/substance-6.2.jar;lib/jl1.0.1.jar;lib/nellymoser.jar;lib/gif.jar;lib/avi.jar;lib/ttf.jar;lib/jpacker.jar;lib/sfntly.jar;lib/gnujpdf.jar;libsrc/ffdec_lib/src;lib/JavactiveX.jar;lib/tablelayout.jar;lib/jsyntaxpane-0.9.5.jar + lib/LZMA.jar;lib/jna-3.5.1.jar;lib/jpproxy.jar;lib/trident-6.2.jar;lib/substance-flamingo-6.2.jar;lib/flamingo-6.2.jar;lib/substance-6.2.jar;lib/jl1.0.1.jar;lib/nellymoser.jar;lib/gif.jar;lib/avi.jar;lib/ttf.jar;lib/jpacker.jar;lib/sfntly.jar;lib/gnujpdf.jar;libsrc/ffdec_lib/src;lib/tablelayout.jar;lib/jsyntaxpane-0.9.5.jar;lib/JavactiveX.jar build javadoc reports diff --git a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java index b5797114c..30d23cc6b 100644 --- a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java @@ -61,6 +61,7 @@ import com.jpexs.decompiler.flash.types.GLYPHENTRY; import com.jpexs.decompiler.flash.types.MATRIX; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.SHAPE; import com.jpexs.decompiler.flash.types.TEXTRECORD; import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; import com.jpexs.helpers.Helper; @@ -521,6 +522,12 @@ public class PreviewPanel extends JSplitPane implements ActionListener { SWFOutputStream sos2 = new SWFOutputStream(baos, SWF.DEFAULT_VERSION); int width = swf.displayRect.Xmax - swf.displayRect.Xmin; int height = swf.displayRect.Ymax - swf.displayRect.Ymin; + + if (tagObj instanceof FontTag) { + width = FontTag.PREVIEWSIZE*20; + height = FontTag.PREVIEWSIZE*20; + } + sos2.writeRECT(swf.displayRect); sos2.writeUI8(0); sos2.writeUI8(frameRate); @@ -648,9 +655,26 @@ public class PreviewPanel extends JSplitPane implements ActionListener { int cols = (int) Math.ceil(Math.sqrt(countGlyphs)); int rows = (int) Math.ceil(((float) countGlyphs) / ((float) cols)); int x = 0; - int y = 1; + int y = 0; int firstGlyphIndex = fontPageNum * SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW; countGlyphs = Math.min(SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW, countGlyphsTotal - firstGlyphIndex); + List shapes=((FontTag) tagObj).getGlyphShapeTable(); + int maxw = 0; + for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { + RECT b = shapes.get(f).getBounds(); + int w=(int)(b.getWidth()/((FontTag) tagObj).getDivider()); + if(w>maxw){ + maxw = w; + } + } + + int BORDER = 5*20; + + int textHeight = height / rows; + while(maxw*textHeight/1024 > width/cols-2*BORDER){ + textHeight--; + } + for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { if (x >= cols) { x = 0; @@ -658,20 +682,41 @@ public class PreviewPanel extends JSplitPane implements ActionListener { } List rec = new ArrayList<>(); TEXTRECORD tr = new TEXTRECORD(); - int textHeight = height / rows; + + RECT b = shapes.get(f).getBounds(); + int xmin = b.Xmin == Integer.MAX_VALUE?0:(int)(b.Xmin/((FontTag) tagObj).getDivider()); + xmin *= textHeight/1024.0; + int ymin = b.Ymin == Integer.MAX_VALUE?0:(int)(b.Ymin/((FontTag) tagObj).getDivider()); + ymin *= textHeight/1024.0; + int w=(int)(b.getWidth()/((FontTag) tagObj).getDivider()); + w *= textHeight/1024.0; + int h=(int)(b.getHeight()/((FontTag) tagObj).getDivider()); + h *= textHeight/1024.0; + tr.fontId = fontId; tr.styleFlagsHasFont = true; tr.textHeight = textHeight; + tr.xOffset=-xmin; + tr.yOffset=0; + tr.styleFlagsHasXOffset=true; + tr.styleFlagsHasYOffset=true; tr.glyphEntries = new GLYPHENTRY[1]; tr.styleFlagsHasColor = true; tr.textColor = new RGB(0, 0, 0); tr.glyphEntries[0] = new GLYPHENTRY(); - tr.glyphEntries[0].glyphAdvance = 0; + + + + double ga=((FontTag) tagObj).getGlyphAdvance(f); + int cw=ga==-1?w:(int)(ga/((FontTag) tagObj).getDivider()*textHeight/1024); + + tr.glyphEntries[0].glyphAdvance = cw; tr.glyphEntries[0].glyphIndex = f; - rec.add(tr); - mat.translateX = swf.displayRect.Xmin + x * width / cols; - mat.translateY = swf.displayRect.Ymin + y * height / rows; - new DefineTextTag(swf, 999 + f, new RECT(0, width, 0, height), new MATRIX(), rec).writeTag(sos2); + rec.add(tr); + + mat.translateX = x * width/ cols + width/cols/2 - w/2; + mat.translateY = y * height / rows; + new DefineTextTag(swf, 999 + f, new RECT(0, cw, ymin, ymin+h), new MATRIX(), rec).writeTag(sos2); new PlaceObject2Tag(swf, false, false, false, true, false, true, true, false, 1 + f, 999 + f, mat, null, 0, null, 0, null).writeTag(sos2); x++; } @@ -861,7 +906,7 @@ public class PreviewPanel extends JSplitPane implements ActionListener { fos.flush(); } if (flashPanel != null) { - flashPanel.displaySWF(tempFile.getAbsolutePath(), backgroundColor, frameRate); + flashPanel.displaySWF(tempFile.getAbsolutePath(), backgroundColor, frameRate); } showFlashViewerPanel(); } catch (IOException | ActionParseException ex) { diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index bcf3fc84e..3e554651d 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -173,7 +173,7 @@ public class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { if (bgColor != null) { setBackground(bgColor); } - flash.setMovie(flashName); + flash.setMovie(flashName); //play stopped = false; @@ -181,7 +181,7 @@ public class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { @Override public void close() throws IOException { - + } @Override