Fixed: Flash viewer - slow on larger zooms (now only diplayed rect is rendered)

This commit is contained in:
Jindra Petřík
2021-03-29 10:05:56 +02:00
parent 4e93bf0af0
commit 6c709bc5e5
18 changed files with 186 additions and 46 deletions

View File

@@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle;
import com.jpexs.decompiler.flash.exporters.commonshape.Matrix;
import com.jpexs.decompiler.flash.tags.Tag;
import com.jpexs.decompiler.flash.tags.base.BoundedTag;
@@ -290,9 +291,13 @@ public class FolderPreviewPanel extends JPanel {
int height = 0;
SerializableImage imgSrc = null;
Matrix m = new Matrix();
double ow = 1;
double oh = 1;
if (treeItem instanceof Frame) {
Frame fn = (Frame) treeItem;
RECT rect = swf.displayRect;
ow = rect.getWidth();
oh = rect.getHeight();
double zoom = 1.0;
if (rect.getWidth() > 0) {
double ratio = (PREVIEW_SIZE - 1) * SWF.unitDivisor / (rect.getWidth());
@@ -321,9 +326,13 @@ public class FolderPreviewPanel extends JPanel {
imgSrc = ((ImageTag) treeItem).getImageCached();
width = imgSrc.getWidth();
height = imgSrc.getHeight();
ow = width * SWF.unitDivisor;
oh = height * SWF.unitDivisor;
} else if (treeItem instanceof BoundedTag) {
BoundedTag boundedTag = (BoundedTag) treeItem;
RECT rect = boundedTag.getRect();
ow = rect.getWidth();
oh = rect.getHeight();
width = (int) (rect.getWidth() / SWF.unitDivisor) + 1;
height = (int) (rect.getHeight() / SWF.unitDivisor) + 1;
m.translate(-rect.Xmin, -rect.Ymin);
@@ -362,7 +371,8 @@ public class FolderPreviewPanel extends JPanel {
image.fillTransparent();
if (imgSrc == null) {
DrawableTag drawable = (DrawableTag) treeItem;
drawable.toImage(0, 0, 0, new RenderContext(), image, false, m, m, m, null, scale, false);
ExportRectangle viewRectangle = new ExportRectangle(0, 0, ow, oh);
drawable.toImage(0, 0, 0, new RenderContext(), image, false, m, m, m, m, null, scale, false, viewRectangle);
} else {
Graphics2D g = (Graphics2D) image.getGraphics();
g.setTransform(m.toTransform());