mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-30 07:36:12 +00:00
feat: add advanced multi sample anti-aliased shape renderer
Multi sample anti-alias renderer with configurable grid. It can be turned on with icon under render window, and with checkbox for export.
This commit is contained in:
@@ -2332,7 +2332,7 @@ public class CommandLineArgumentParser {
|
||||
}
|
||||
}
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
// Here the exportFormats array should contain only validitems
|
||||
commandLineMode = true;
|
||||
@@ -3014,7 +3014,7 @@ public class CommandLineArgumentParser {
|
||||
File outFile = new File(args.pop());
|
||||
printHeader();
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
try (StdInAwareFileInputStream is = new StdInAwareFileInputStream(inFile)) {
|
||||
|
||||
|
||||
@@ -174,6 +174,8 @@ public class ExportDialog extends AppDialog {
|
||||
|
||||
private JCheckBox transparentFrameBackgroundCheckBox;
|
||||
|
||||
private JCheckBox antialiasCheckBox;
|
||||
|
||||
private JTextField durationTextField = new JTextField(4);
|
||||
|
||||
private JTextField numberOfFramesTextField = new JTextField(4);
|
||||
@@ -276,6 +278,8 @@ public class ExportDialog extends AppDialog {
|
||||
}
|
||||
}
|
||||
|
||||
Configuration.useMsaaForExport.set(antialiasCheckBox.isSelected());
|
||||
|
||||
StringBuilder cfg = new StringBuilder();
|
||||
for (int i = 0; i < optionNames.length; i++) {
|
||||
Object val = ((ComboValue) combos[i].getSelectedItem()).value;
|
||||
@@ -347,6 +351,70 @@ public class ExportDialog extends AppDialog {
|
||||
numberOfFramesTextField.setVisible(mode.hasFrames());
|
||||
}
|
||||
|
||||
boolean aaVisible = false;
|
||||
|
||||
if (isOptionEnabled(FrameExportMode.class)) {
|
||||
FrameExportMode mode = getValue(FrameExportMode.class);
|
||||
switch (mode) {
|
||||
case CANVAS:
|
||||
case PDF:
|
||||
case SWF:
|
||||
case SVG:
|
||||
break;
|
||||
default:
|
||||
aaVisible = true;
|
||||
}
|
||||
}
|
||||
if (isOptionEnabled(SpriteExportMode.class)) {
|
||||
SpriteExportMode mode = getValue(SpriteExportMode.class);
|
||||
switch (mode) {
|
||||
case CANVAS:
|
||||
case PDF:
|
||||
case SWF:
|
||||
case SVG:
|
||||
break;
|
||||
default:
|
||||
aaVisible = true;
|
||||
}
|
||||
}
|
||||
if (isOptionEnabled(ButtonExportMode.class)) {
|
||||
ButtonExportMode mode = getValue(ButtonExportMode.class);
|
||||
switch (mode) {
|
||||
case SWF:
|
||||
case SVG:
|
||||
case SVG_COMBINED:
|
||||
break;
|
||||
default:
|
||||
aaVisible = true;
|
||||
}
|
||||
}
|
||||
if (isOptionEnabled(ShapeExportMode.class)) {
|
||||
ShapeExportMode mode = getValue(ShapeExportMode.class);
|
||||
switch (mode) {
|
||||
case CANVAS:
|
||||
case SWF:
|
||||
case SVG:
|
||||
break;
|
||||
default:
|
||||
aaVisible = true;
|
||||
}
|
||||
}
|
||||
if (isOptionEnabled(MorphShapeExportMode.class)) {
|
||||
MorphShapeExportMode mode = getValue(MorphShapeExportMode.class);
|
||||
switch (mode) {
|
||||
case CANVAS:
|
||||
case SWF:
|
||||
case SVG:
|
||||
case SVG_FRAMES:
|
||||
case SVG_START_END:
|
||||
break;
|
||||
default:
|
||||
aaVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
antialiasCheckBox.setVisible(aaVisible);
|
||||
|
||||
transparentFrameBackgroundCheckBox.setVisible(isOptionEnabled(FrameExportMode.class));
|
||||
|
||||
boolean hasZoom = false;
|
||||
@@ -521,14 +589,13 @@ public class ExportDialog extends AppDialog {
|
||||
label.setLabelFor(combos[i]);
|
||||
}
|
||||
|
||||
|
||||
gbc.gridy++;
|
||||
gbc.gridx = 0;
|
||||
gbc.gridwidth = 5;
|
||||
gbc.fill = GridBagConstraints.BOTH;
|
||||
|
||||
|
||||
comboPanel.add(new JPanel(), gbc);
|
||||
|
||||
|
||||
gbc.insets = new Insets(2, 2, 2, 2);
|
||||
|
||||
embedCheckBox = new JCheckBox(translate("embed"));
|
||||
@@ -571,6 +638,24 @@ public class ExportDialog extends AppDialog {
|
||||
}
|
||||
}
|
||||
|
||||
antialiasCheckBox = new JCheckBox(translate("antialias"));
|
||||
antialiasCheckBox.setToolTipText(translate("antialias.hint"));
|
||||
antialiasCheckBox.setVisible(false);
|
||||
|
||||
if (Configuration.useMsaaForExport.get()) {
|
||||
antialiasCheckBox.setSelected(true);
|
||||
}
|
||||
|
||||
if (visibleOptionClasses.contains(FrameExportMode.class)
|
||||
|| visibleOptionClasses.contains(ButtonExportMode.class)
|
||||
|| visibleOptionClasses.contains(ShapeExportMode.class)
|
||||
|| visibleOptionClasses.contains(MorphShapeExportMode.class)
|
||||
|| visibleOptionClasses.contains(SpriteExportMode.class)) {
|
||||
gbc.gridy++;
|
||||
antialiasCheckBox.setVisible(true);
|
||||
comboPanel.add(antialiasCheckBox, gbc);
|
||||
}
|
||||
|
||||
durationTextField.setVisible(false);
|
||||
numberOfFramesTextField.setVisible(false);
|
||||
if (visibleOptionClasses.contains(MorphShapeExportMode.class)) {
|
||||
|
||||
@@ -308,7 +308,7 @@ public class FolderPreviewPanel extends JPanel {
|
||||
treeItem = ((SceneFrame) treeItem).getFrame();
|
||||
}
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForDisplay.get() ? Configuration.reduceAntialiasConflationByScalingValueForDisplay.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForDisplay.get() ? Configuration.msaaGridForDisplay.get() : 1;
|
||||
|
||||
if (treeItem instanceof Frame) {
|
||||
Frame fn = (Frame) treeItem;
|
||||
@@ -333,8 +333,6 @@ public class FolderPreviewPanel extends JPanel {
|
||||
String key = "frame_" + fn.frame + "_" + timeline.id + "_" + zoom;
|
||||
imgSrc = swf.getFromCache(key);
|
||||
if (imgSrc == null) {
|
||||
aaScale = Configuration.calculateRealAaScale(rect.getWidth(), rect.getHeight(), zoom, aaScale);
|
||||
|
||||
imgSrc = SWF.frameToImageGet(timeline, fn.frame, 0, null, 0, rect, new Matrix(), null, swf.getBackgroundColor() == null ? null : swf.getBackgroundColor().backgroundColor.toColor(), zoom, !Configuration.disableBitmapSmoothing.get(), aaScale);
|
||||
swf.putToCache(key, imgSrc);
|
||||
}
|
||||
@@ -385,23 +383,14 @@ public class FolderPreviewPanel extends JPanel {
|
||||
return null;
|
||||
}
|
||||
|
||||
aaScale = Configuration.calculateRealAaScale(width, height, 1, aaScale);
|
||||
|
||||
if (imgSrc == null) {
|
||||
m = m.preConcatenate(Matrix.getScaleInstance(scale * aaScale));
|
||||
m = m.preConcatenate(Matrix.getScaleInstance(scale));
|
||||
DrawableTag drawable = (DrawableTag) treeItem;
|
||||
ExportRectangle viewRectangle = new ExportRectangle(0, 0, ow, oh);
|
||||
|
||||
SerializableImage imageLarger = new SerializableImage(width * aaScale, height * aaScale, SerializableImage.TYPE_INT_ARGB);
|
||||
SerializableImage imageLarger = new SerializableImage(width, height, SerializableImage.TYPE_INT_ARGB);
|
||||
imageLarger.fillTransparent();
|
||||
drawable.toImage(0, 0, 0, new RenderContext(), imageLarger, imageLarger, false, m, new Matrix(), m, m, null, scale * aaScale, false, viewRectangle, viewRectangle, true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(), aaScale);
|
||||
if (aaScale > 1) {
|
||||
SerializableImage imageNormalSize = new SerializableImage(width, height, SerializableImage.TYPE_INT_ARGB);
|
||||
imageNormalSize.fillTransparent();
|
||||
|
||||
imageNormalSize.getGraphics().drawImage(imageLarger.getBufferedImage().getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
|
||||
return imageNormalSize;
|
||||
}
|
||||
drawable.toImage(0, 0, 0, new RenderContext(), imageLarger, imageLarger, false, m, new Matrix(), m, m, null, scale, false, viewRectangle, viewRectangle, true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(), aaScale);
|
||||
return imageLarger;
|
||||
}
|
||||
|
||||
|
||||
@@ -5081,7 +5081,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
Matrix m = Matrix.getTranslateInstance(-rect.Xmin * zoomDouble, -rect.Ymin * zoomDouble);
|
||||
m.scale(zoomDouble);
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForDisplay.get() ? Configuration.reduceAntialiasConflationByScalingValueForDisplay.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForDisplay.get() ? Configuration.msaaGridForDisplay.get() : 1;
|
||||
|
||||
textTag.toImage(0, 0, 0, new RenderContext(), image, image, false, m, m, m, m, new ConstantColorColorTransform(0xFFC0C0C0), zoomDouble, false, new ExportRectangle(rect), new ExportRectangle(rect), true, Timeline.DRAW_MODE_ALL, 0, false, aaScale);
|
||||
|
||||
@@ -5217,12 +5217,10 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
) {
|
||||
Timeline timeline = drawable.getTimeline();
|
||||
SerializableImage img;
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForDisplay.get() ? Configuration.reduceAntialiasConflationByScalingValueForDisplay.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForDisplay.get() ? Configuration.msaaGridForDisplay.get() : 1;
|
||||
|
||||
aaScale = Configuration.calculateRealAaScale((int) viewRect.getWidth(), (int) viewRect.getHeight(), zoom, aaScale);
|
||||
|
||||
int width = aaScale * (int) (viewRect.getWidth() * zoom);
|
||||
int height = aaScale * (int) (viewRect.getHeight() * zoom);
|
||||
int width = (int) (viewRect.getWidth() * zoom);
|
||||
int height = (int) (viewRect.getHeight() * zoom);
|
||||
if (width == 0) {
|
||||
width = 1;
|
||||
}
|
||||
@@ -5231,18 +5229,14 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
}
|
||||
|
||||
Rectangle realRectAA = new Rectangle(realRect);
|
||||
realRectAA.x *= aaScale;
|
||||
realRectAA.y *= aaScale;
|
||||
realRectAA.width *= aaScale;
|
||||
realRectAA.height *= aaScale;
|
||||
|
||||
|
||||
SerializableImage image = new SerializableImage((int) Math.ceil(width / SWF.unitDivisor),
|
||||
(int) Math.ceil(height / SWF.unitDivisor), SerializableImage.TYPE_INT_ARGB);
|
||||
image.fillTransparent();
|
||||
|
||||
Matrix m = new Matrix();
|
||||
m.translate(-viewRect.xMin * zoom * aaScale, -viewRect.yMin * zoom * aaScale);
|
||||
m.scale(zoom * aaScale);
|
||||
m.translate(-viewRect.xMin * zoom, -viewRect.yMin * zoom);
|
||||
m.scale(zoom);
|
||||
|
||||
Matrix fullM = m.clone();
|
||||
|
||||
@@ -5279,7 +5273,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
|
||||
if (Configuration.showGrid.get() && (drawable instanceof SWF) && !Configuration.gridOverObjects.get()) {
|
||||
Graphics2D g = (Graphics2D) image.getBufferedImage().getGraphics();
|
||||
drawGridSwf(g, realRectAA, zoom * aaScale);
|
||||
drawGridSwf(g, realRectAA, zoom);
|
||||
}
|
||||
|
||||
parentMatrix = new Matrix();
|
||||
@@ -5291,7 +5285,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
ignoreDepths.add(parentDepthState.depth);
|
||||
if (Configuration.halfTransparentParentLayersEasy.get()) {
|
||||
parentTimelined.getTimeline().toImage(parentFrames.get(i), 0, new RenderContext(), image, image, false,
|
||||
parentMatrix.preConcatenate(m), new Matrix(), parentMatrix.preConcatenate(m), null, zoom * aaScale, true, viewRect, viewRect, parentMatrix.preConcatenate(m), true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(),
|
||||
parentMatrix.preConcatenate(m), new Matrix(), parentMatrix.preConcatenate(m), null, zoom, true, viewRect, viewRect, parentMatrix.preConcatenate(m), true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(),
|
||||
ignoreDepths, aaScale);
|
||||
}
|
||||
parentMatrix = parentMatrix.concatenate(new Matrix(parentDepthState.matrix));
|
||||
@@ -5304,12 +5298,9 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
g.fillRect(realRectAA.x, realRectAA.y, realRectAA.width, realRectAA.height);
|
||||
}
|
||||
|
||||
timeline.toImage(frame, time, renderContext, image, image, false, parentMatrix.preConcatenate(m), new Matrix(), parentMatrix.preConcatenate(m), null, zoom * aaScale, true, viewRect, viewRect, parentMatrix.preConcatenate(m), true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(), ignoreDepths, aaScale);
|
||||
|
||||
if (Configuration.reduceAntialiasConflationByScalingForDisplay.get()) {
|
||||
image = new SerializableImage(ImageResizer.resizeImage(image.getBufferedImage(), image.getWidth() / aaScale, image.getHeight() / aaScale, RenderingHints.VALUE_INTERPOLATION_BICUBIC, true));
|
||||
}
|
||||
timeline.toImage(frame, time, renderContext, image, image, false, parentMatrix.preConcatenate(m), new Matrix(), parentMatrix.preConcatenate(m), null, zoom, true, viewRect, viewRect, parentMatrix.preConcatenate(m), true, Timeline.DRAW_MODE_ALL, 0, !Configuration.disableBitmapSmoothing.get(), ignoreDepths, aaScale);
|
||||
|
||||
|
||||
Graphics2D gg = (Graphics2D) image.getGraphics();
|
||||
gg.setStroke(new BasicStroke(3));
|
||||
gg.setPaint(Color.green);
|
||||
@@ -5885,12 +5876,14 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
first = false;
|
||||
CharacterTag c = ds.getCharacter();
|
||||
|
||||
ret.append(tagNameResolver.getTagName(c));
|
||||
if (ds.depth > -1) {
|
||||
ret.append(" ");
|
||||
ret.append(AppStrings.translate("imagePanel.depth"));
|
||||
ret.append(" ");
|
||||
ret.append(ds.depth);
|
||||
if (c != null) {
|
||||
ret.append(tagNameResolver.getTagName(c));
|
||||
if (ds.depth > -1) {
|
||||
ret.append(" ");
|
||||
ret.append(AppStrings.translate("imagePanel.depth"));
|
||||
ret.append(" ");
|
||||
ret.append(ds.depth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2275,7 +2275,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
selFile2 = selFile;
|
||||
}
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
EventListener evl = swf.getExportEventListener();
|
||||
|
||||
@@ -2395,7 +2395,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
return;
|
||||
}
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
EventListener evl = swf.getExportEventListener();
|
||||
|
||||
@@ -2491,7 +2491,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
public void exportAllDebug(SWF swf, AbortRetryIgnoreHandler handler, String selFile, ExportDialog export) throws IOException, InterruptedException {
|
||||
EventListener evl = swf.getExportEventListener();
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
if (export.isOptionEnabled(ImageExportMode.class)) {
|
||||
for (ImageExportMode exportMode : ImageExportMode.values()) {
|
||||
@@ -5667,7 +5667,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
try {
|
||||
AbortRetryIgnoreHandler errorHandler = new GuiAbortRetryIgnoreHandler();
|
||||
|
||||
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
|
||||
int aaScale = Configuration.useMsaaForExport.get() ? Configuration.msaaGridForExport.get() : 1;
|
||||
|
||||
FrameExporter frameExporter = new FrameExporter();
|
||||
FrameExportSettings fes = new FrameExportSettings(mode, dialog.getZoom(), dialog.isTransparentFrameBackgroundEnabled(), aaScale);
|
||||
|
||||
BIN
src/com/jpexs/decompiler/flash/gui/graphics/antialias16.png
Normal file
BIN
src/com/jpexs/decompiler/flash/gui/graphics/antialias16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 372 B |
BIN
src/com/jpexs/decompiler/flash/gui/graphics/antialias32.png
Normal file
BIN
src/com/jpexs/decompiler/flash/gui/graphics/antialias32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 571 B |
@@ -679,3 +679,15 @@ config.description.svgExportGaussianBlur = Use gaussian blur instead of box blur
|
||||
#after 25.1.3
|
||||
config.name.exportFlaAs3DisableScriptLayer = FLA export - AS3 - disable script layer
|
||||
config.description.exportFlaAs3DisableScriptLayer = In ActionScript 3 FLA export, the scripts in frames will stay inside class they belong, instead of putting them separately to Script layer. True = in class, False = in Script layer.
|
||||
|
||||
config.name.useMsaaForDisplay = Use Multi sample Anti-aliasing (Display)
|
||||
config.description.useMsaaForDisplay = Use Multi sample Anti-aliasing 4x4 for display purposes.
|
||||
|
||||
config.name.useMsaaForExport = Use Multi sample Anti-aliasing (Export)
|
||||
config.description.useMsaaForExport = Use Multi sample Anti-aliasing 4x4 for export purposes.
|
||||
|
||||
config.name.msaaGridForDisplay = Multi sample Anti-aliasing Grid (Display)
|
||||
config.description.msaaGridForDisplay = Multi sample Anti-aliasing grid size NxN for display purposes.
|
||||
|
||||
config.name.msaaGridForExport = Multi sample Anti-aliasing Grid (Export)
|
||||
config.description.msaaGridForExport = Multi sample Anti-aliasing grid size NxN for display purposes.
|
||||
|
||||
@@ -679,3 +679,15 @@ config.description.svgExportGaussianBlur = Pou\u017e\u00edt gaussovsk\u00fd blur
|
||||
#after 25.1.3
|
||||
config.name.exportFlaAs3DisableScriptLayer = Export FLA \u2013 AS3 - zak\u00e1zat vrstvu skript\u016f
|
||||
config.description.exportFlaAs3DisableScriptLayer = P\u0159i exportu ActionScript 3 FLA z\u016fstanou skripty ve sn\u00edmc\u00edch uvnit\u0159 t\u0159\u00eddy, do kter\u00e9 pat\u0159\u00ed, m\u00edsto aby byly odd\u011blen\u011b um\u00edst\u011bny do vrstvy Script. True = ve t\u0159\u00edd\u011b, False = ve vrstv\u011b Script.
|
||||
|
||||
config.name.useMsaaForDisplay = Pou\u017e\u00edt v\u00edcen\u00e1sobn\u00e9 vyhlazov\u00e1n\u00ed (Zobrazen\u00ed)
|
||||
config.description.useMsaaForDisplay = Pou\u017e\u00edt v\u00edcen\u00e1sobn\u00e9 vyhlazov\u00e1n\u00ed 4x4 pro \u00fa\u010dely zobrazen\u00ed.
|
||||
|
||||
config.name.useMsaaForExport = Pou\u017e\u00edt v\u00edcen\u00e1sobn\u00e9 vyhlazov\u00e1n\u00ed (Export)
|
||||
config.description.useMsaaForExport = Pou\u017e\u00edt v\u00edcen\u00e1sobn\u00e9 vyhlazov\u00e1n\u00ed 4x4 pro \u00fa\u010dely exportu.
|
||||
|
||||
config.name.msaaGridForDisplay = M\u0159\u00ed\u017eka v\u00edcen\u00e1sobn\u00e9ho vyhlazov\u00e1n\u00ed (Zobrazen\u00ed)
|
||||
config.description.msaaGridForDisplay = Velikost m\u0159\u00ed\u017eky v\u00edcen\u00e1sobn\u00e9ho vyhlazov\u00e1n\u00ed NxN pro \u00fa\u010dely zobrazen\u00ed.
|
||||
|
||||
config.name.msaaGridForExport = M\u0159\u00ed\u017eka v\u00edcen\u00e1sobn\u00e9ho vyhlazov\u00e1n\u00ed (Export)
|
||||
config.description.msaaGridForExport = Velikost m\u0159\u00ed\u017eky v\u00edcen\u00e1sobn\u00e9ho vyhlazov\u00e1n\u00ed NxN pro \u00fa\u010dely zobrazen\u00ed.
|
||||
|
||||
@@ -608,3 +608,15 @@ config.description.svgExportGaussianBlur = Beim SVG-Export den gau\u00dfschen We
|
||||
#after 25.1.3
|
||||
config.name.exportFlaAs3DisableScriptLayer = FLA-Export \u2013 AS3 - Skriptebene deaktivieren
|
||||
config.description.exportFlaAs3DisableScriptLayer = Beim Export von ActionScript 3 FLA bleiben die Skripte in Frames innerhalb der Klasse, zu der sie geh\u00f6ren, anstatt separat in die Skriptebene verschoben zu werden. True = in der Klasse, False = in der Skriptebene.
|
||||
|
||||
config.name.useMsaaForDisplay = Multisample-Anti-Aliasing verwenden (Anzeige)
|
||||
config.description.useMsaaForDisplay = Multisample-Anti-Aliasing 4x4 f\u00fcr Anzeigezwecke verwenden.
|
||||
|
||||
config.name.useMsaaForExport = Multisample-Anti-Aliasing verwenden (Export)
|
||||
config.description.useMsaaForExport = Multisample-Anti-Aliasing 4x4 f\u00fcr Exportzwecke verwenden.
|
||||
|
||||
config.name.msaaGridForDisplay = Multisample-Anti-Aliasing-Raster (Anzeige)
|
||||
config.description.msaaGridForDisplay = Rastergr\u00f6\u00dfe NxN f\u00fcr Multisample-Anti-Aliasing f\u00fcr Anzeigezwecke.
|
||||
|
||||
config.name.msaaGridForExport = Multisample-Anti-Aliasing-Raster (Export)
|
||||
config.description.msaaGridForExport = Rastergr\u00f6\u00dfe NxN pro Multisample-Anti-Aliasing pro Anzeigezwecke.
|
||||
|
||||
@@ -679,3 +679,15 @@ config.description.svgExportGaussianBlur = Pou\u017ei\u0165 gaussovsk\u00fd blur
|
||||
#after 25.1.3
|
||||
config.name.exportFlaAs3DisableScriptLayer = Export FLA \u2013 AS3 - zak\u00e1za\u0165 vrstvu skriptov
|
||||
config.description.exportFlaAs3DisableScriptLayer = Pri exporte ActionScript 3 FLA zostan\u00fa skripty v sn\u00edmkach vn\u00fatri triedy, do ktorej patria, namiesto toho, aby boli oddelene umiestnen\u00e9 do vrstvy Script. True = v triede, False = vo vrstve Script.
|
||||
|
||||
config.name.useMsaaForDisplay = Pou\u017ei\u0165 viacn\u00e1sobn\u00e9 vyhladzovanie (Zobrazenie)
|
||||
config.description.useMsaaForDisplay = Pou\u017ei\u0165 viacn\u00e1sobn\u00e9 vyhladzovanie 4x4 na \u00fa\u010dely zobrazenia.
|
||||
|
||||
config.name.useMsaaForExport = Pou\u017ei\u0165 viacn\u00e1sobn\u00e9 vyhladzovanie (Export)
|
||||
config.description.useMsaaForExport = Pou\u017ei\u0165 viacn\u00e1sobn\u00e9 vyhladzovanie 4x4 na \u00fa\u010dely exportu.
|
||||
|
||||
config.name.msaaGridForDisplay = Mrie\u017eka viacn\u00e1sobn\u00e9ho vyhladzovania (Zobrazenie)
|
||||
config.description.msaaGridForDisplay = Ve\u013ekos\u0165 mrie\u017eky viacn\u00e1sobn\u00e9ho vyhladzovania NxN na \u00fa\u010dely zobrazenia.
|
||||
|
||||
config.name.msaaGridForExport = Mrie\u017eka viacn\u00e1sobn\u00e9ho vyhladzovania (Export)
|
||||
config.description.msaaGridForExport = Ve\u013ekos\u0165 mrie\u017eky viacn\u00e1sobn\u00e9ho vyhladzovania NxN na \u00fa\u010dely zobrazenia.
|
||||
|
||||
@@ -124,3 +124,6 @@ morphshapes.apng = APNG
|
||||
|
||||
#after 25.1.3
|
||||
buttons.svg_combined = SVG combined
|
||||
|
||||
antialias = Use advanced MSAA renderer (slow)
|
||||
antialias.hint = Use advanced renderer with multi sample anti-aliasing. More precise, but slower than standard renderer. Use for seamless shape rendering.
|
||||
|
||||
@@ -122,3 +122,7 @@ arrow = \ud83e\udc06
|
||||
|
||||
#after 25.1.3
|
||||
buttons.svg_combined = SVG kombinovan\u00e9
|
||||
|
||||
antialias = Pou\u017e\u00edt pokro\u010dil\u00fd MSAA renderer (pomal\u00e9)
|
||||
antialias.hint = Pou\u017e\u00edt pokro\u010dil\u00fd renderer s v\u00edcen\u00e1sobn\u00fdm vyhlazov\u00e1n\u00edm. P\u0159esn\u011bj\u0161\u00ed, ale pomalej\u0161\u00ed ne\u017e standardn\u00ed renderer. Vhodn\u00e9 pro vykreslov\u00e1n\u00ed tvar\u016f bez \u0161v\u016f.
|
||||
|
||||
|
||||
@@ -119,3 +119,6 @@ morphshapes.apng = APNG
|
||||
|
||||
#after 25.1.3
|
||||
buttons.svg_combined = SVG kombiniertes
|
||||
|
||||
antialias = Erweiterter MSAA-Renderer verwenden (langsam)
|
||||
antialias.hint = Erweiterter Renderer mit Multisample-Anti-Aliasing verwenden. Pr\u00e4ziser, aber langsamer als der Standard-Renderer. Geeignet f\u00fcr nahtloses Rendern ohne sichtbare \u00dcberg\u00e4nge zwischen Formen.
|
||||
|
||||
@@ -124,3 +124,6 @@ morphshapes.apng = APNG
|
||||
|
||||
#after 25.1.3
|
||||
buttons.svg_combined = SVG kombinovan\u00e9
|
||||
|
||||
antialias = Pou\u017ei\u0165 pokro\u010dil\u00fd MSAA renderer (pomal\u00e9)
|
||||
antialias.hint = Pou\u017ei\u0165 pokro\u010dil\u00fd renderer s viacn\u00e1sobn\u00fdm vyhladzovan\u00edm. Presnej\u0161\u00ed, ale pomal\u0161\u00ed ne\u017e \u0161tandardn\u00fd renderer. Vhodn\u00e9 pre vykres\u013eovanie tvarov bez \u0161vov.
|
||||
|
||||
@@ -1149,4 +1149,6 @@ contextmenu.exportXaml = Export XAML
|
||||
menu.file.import.bulkImport = Bulk import...
|
||||
menu.file.import.createTagFromFile = Create tag from file...
|
||||
|
||||
contextmenu.convertTextType = Convert text type
|
||||
contextmenu.convertTextType = Convert text type
|
||||
|
||||
button.antialias.hint = Use advanced renderer with multi sample anti-aliasing (slow)
|
||||
|
||||
@@ -1149,4 +1149,6 @@ contextmenu.exportXaml = Exportovat XAML
|
||||
menu.file.import.bulkImport = Hromadn\u00fd import...
|
||||
menu.file.import.createTagFromFile = Vytvo\u0159it tag ze souboru...
|
||||
|
||||
contextmenu.convertTextType = Konvertovat typ textu
|
||||
contextmenu.convertTextType = Konvertovat typ textu
|
||||
|
||||
button.antialias.hint = Pou\u017e\u00edt pokro\u010dil\u00fd renderer s v\u00edcen\u00e1sobn\u00fdm vyhlazov\u00e1n\u00edm (pomal\u00e9)
|
||||
|
||||
@@ -1010,4 +1010,6 @@ contextmenu.exportXaml = Exportiere als XAML
|
||||
menu.file.import.bulkImport = Massenimport...
|
||||
menu.file.import.createTagFromFile = Tag aus Datei erstellen...
|
||||
|
||||
contextmenu.convertTextType = Texttyp konvertieren
|
||||
contextmenu.convertTextType = Texttyp konvertieren
|
||||
|
||||
button.antialias.hint = Erweiterter Renderer mit Multisample-Anti-Aliasing verwenden (langsam)
|
||||
|
||||
@@ -1149,4 +1149,6 @@ contextmenu.exportXaml = Exportova\u0165 XAML
|
||||
menu.file.import.bulkImport = Hromadn\u00fd import...
|
||||
menu.file.import.createTagFromFile = Vytvori\u0165 tag zo s\u00faboru...
|
||||
|
||||
contextmenu.convertTextType = Konvertova\u0165 typ textu
|
||||
contextmenu.convertTextType = Konvertova\u0165 typ textu
|
||||
|
||||
button.antialias.hint = Pou\u017ei\u0165 pokro\u010dil\u00fd renderer s viacn\u00e1sobn\u00fdm vyhladzovan\u00edm (pomal\u00e9)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.jpexs.decompiler.flash.gui.player;
|
||||
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.configuration.ConfigurationItemChangeListener;
|
||||
import com.jpexs.decompiler.flash.gui.AppStrings;
|
||||
import com.jpexs.decompiler.flash.gui.MainPanel;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
@@ -125,7 +126,9 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
|
||||
|
||||
private final int zeroCharacterWidth;
|
||||
|
||||
private JButton selectColorButton;
|
||||
private final JButton selectColorButton;
|
||||
|
||||
private JToggleButton msaaButton;
|
||||
|
||||
static {
|
||||
Font font = new JLabel().getFont();
|
||||
@@ -152,6 +155,19 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
|
||||
selectColorButton = new JButton(View.getIcon("color16"));
|
||||
selectColorButton.addActionListener(this::selectBkColorButtonActionPerformed);
|
||||
selectColorButton.setToolTipText(AppStrings.translate("button.selectbkcolor.hint"));
|
||||
|
||||
msaaButton = new JToggleButton(View.getIcon("antialias16"));
|
||||
msaaButton.addActionListener(this::msaaButtonActionPerformed);
|
||||
msaaButton.setToolTipText(AppStrings.translate("button.antialias.hint"));
|
||||
msaaButton.setSelected(Configuration.useMsaaForDisplay.get());
|
||||
|
||||
Configuration.useMsaaForDisplay.addListener(new ConfigurationItemChangeListener<Boolean>() {
|
||||
@Override
|
||||
public void configurationItemChanged(Boolean newValue) {
|
||||
msaaButton.setSelected(newValue);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
zoomPanel = new ZoomPanel(display);
|
||||
zoomPanel.setVisible(false);
|
||||
@@ -162,6 +178,7 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
|
||||
snapshotButton.setVisible(false);
|
||||
|
||||
graphicButtonsPanel.add(zoomPanel);
|
||||
graphicButtonsPanel.add(msaaButton);
|
||||
graphicButtonsPanel.add(selectColorButton);
|
||||
graphicButtonsPanel.add(snapshotButton);
|
||||
|
||||
@@ -499,6 +516,10 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
|
||||
putImageToClipBoard(display.printScreen());
|
||||
}
|
||||
|
||||
private void msaaButtonActionPerformed(ActionEvent evt) {
|
||||
Configuration.useMsaaForDisplay.set(msaaButton.isSelected());
|
||||
}
|
||||
|
||||
private void showButtonActionPerformed(ActionEvent evt) {
|
||||
display.setDisplayed(showButton.isSelected());
|
||||
if (!showButton.isSelected()) {
|
||||
|
||||
Reference in New Issue
Block a user