mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-17 11:58:51 +00:00
morphshapefix
This commit is contained in:
@@ -2138,9 +2138,9 @@ public final class SWF implements TreeItem {
|
||||
float unzoom = (float) SWF.unitDivisor;
|
||||
int fixX = -displayRect.Xmin;
|
||||
int fixY = -displayRect.Ymin;
|
||||
displayRect = fixRect(displayRect);
|
||||
int width = displayRect.getWidth();
|
||||
int height = displayRect.getHeight();
|
||||
displayRect = fixRect(displayRect);
|
||||
|
||||
SerializableImage ret = new SerializableImage((int) (width / unzoom), (int) (height / unzoom), SerializableImage.TYPE_INT_ARGB);
|
||||
ret.bounds = new Rectangle2D.Double(-fixX / unzoom, -fixY / unzoom, width / unzoom, height / unzoom);
|
||||
|
||||
@@ -90,6 +90,8 @@ public class GenericTagPanel extends JPanel implements ChangeListener {
|
||||
remove(genericTagPropertiesEditorPaneScrollPanel);
|
||||
add(genericTagPropertiesEditPanelScrollPanel);
|
||||
} else {
|
||||
genericTagPropertiesEditPanel.removeAll();
|
||||
genericTagPropertiesEditPanel.setSize(0, 0);
|
||||
remove(genericTagPropertiesEditPanelScrollPanel);
|
||||
add(genericTagPropertiesEditorPaneScrollPanel);
|
||||
}
|
||||
|
||||
@@ -157,10 +157,7 @@ public final class ImagePanel extends JPanel implements ActionListener, FlashDis
|
||||
if (drawable == null) {
|
||||
return 0;
|
||||
}
|
||||
int ret = (int) Math.ceil(percent * drawable.getNumFrames() / 100.0);
|
||||
if (ret == 0) {
|
||||
ret = 1;
|
||||
}
|
||||
int ret = percent * (drawable.getNumFrames() - 1) / 100;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -184,7 +181,7 @@ public final class ImagePanel extends JPanel implements ActionListener, FlashDis
|
||||
if (drawable == null) {
|
||||
return;
|
||||
}
|
||||
int nframe = percent * drawable.getNumFrames() / 100;
|
||||
int nframe = percent * (drawable.getNumFrames() - 1) / 100;
|
||||
if (nframe != frame) {
|
||||
Matrix mat = new Matrix();
|
||||
mat.translateX = swf.displayRect.Xmin;
|
||||
|
||||
@@ -662,7 +662,6 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
|
||||
textValue = new LineMarkedEditorPane();
|
||||
textTopPanel.add(new JScrollPane(textValue), BorderLayout.CENTER);
|
||||
textValue.setEditable(false);
|
||||
//textValue.setFont(UIManager.getFont("TextField.font"));
|
||||
|
||||
JPanel textButtonsPanel = new JPanel();
|
||||
textButtonsPanel.setLayout(new FlowLayout());
|
||||
@@ -2443,6 +2442,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
|
||||
previewSplitPane.setDividerLocation(Configuration.guiPreviewSplitPaneDividerLocation.get(previewSplitPane.getWidth() / 2));
|
||||
showDetailWithPreview(CARDTEXTPANEL);
|
||||
textValue.setContentType("text/swf_text");
|
||||
//textValue.setFont(new Font("Monospaced", Font.PLAIN, 13));
|
||||
textValue.setText(textTag.getFormattedText());
|
||||
textValue.setCaretPosition(0);
|
||||
} else if (tagObj instanceof FontTag) {
|
||||
|
||||
@@ -202,70 +202,112 @@ public class DefineMorphShape2Tag extends CharacterTag implements BoundedTag, Mo
|
||||
List<SHAPERECORD> finalRecords = new ArrayList<>();
|
||||
FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(frame);
|
||||
LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), frame);
|
||||
int endIndex = 0;
|
||||
|
||||
for (int startIndex = 0; startIndex < startEdges.shapeRecords.size(); startIndex++, endIndex++) {
|
||||
int startPosX = 0, startPosY = 0;
|
||||
int endPosX = 0, endPosY = 0;
|
||||
int posX = 0, posY = 0;
|
||||
|
||||
for (int startIndex = 0, endIndex = 0;
|
||||
startIndex < startEdges.shapeRecords.size() &&
|
||||
endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) {
|
||||
|
||||
if (startIndex == 0) {
|
||||
StyleChangeRecord scr1 = (StyleChangeRecord) startEdges.shapeRecords.get(startIndex);
|
||||
StyleChangeRecord scr2 = (StyleChangeRecord) startEdges.shapeRecords.get(endIndex);
|
||||
StyleChangeRecord scr = (StyleChangeRecord) scr1.clone();
|
||||
if (scr1.stateMoveTo && scr2.stateMoveTo) {
|
||||
scr.moveDeltaX = scr1.moveDeltaX + (scr2.moveDeltaX - scr1.moveDeltaX) * frame / 65535;
|
||||
scr.moveDeltaY = scr1.moveDeltaY + (scr2.moveDeltaY - scr1.moveDeltaY) * frame / 65535;
|
||||
finalRecords.add(scr);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
SHAPERECORD edge1 = null;
|
||||
do {
|
||||
edge1 = startEdges.shapeRecords.get(startIndex);
|
||||
if (edge1 instanceof StyleChangeRecord) {
|
||||
finalRecords.add(edge1);
|
||||
edge1 = null;
|
||||
startIndex++;
|
||||
}
|
||||
} while (edge1 == null);
|
||||
SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex);
|
||||
SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex);
|
||||
if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) {
|
||||
StyleChangeRecord scr1;
|
||||
if (edge1 instanceof StyleChangeRecord) {
|
||||
scr1 = (StyleChangeRecord) edge1;
|
||||
if (scr1.stateMoveTo) {
|
||||
startPosX = scr1.moveDeltaX;
|
||||
startPosY = scr1.moveDeltaY;
|
||||
}
|
||||
} else {
|
||||
scr1 = new StyleChangeRecord();
|
||||
startIndex--;
|
||||
}
|
||||
StyleChangeRecord scr2;
|
||||
if (edge2 instanceof StyleChangeRecord) {
|
||||
scr2 = (StyleChangeRecord) edge2;
|
||||
if (scr2.stateMoveTo) {
|
||||
endPosX = scr2.moveDeltaX;
|
||||
endPosY = scr2.moveDeltaY;
|
||||
}
|
||||
} else {
|
||||
scr2 = new StyleChangeRecord();
|
||||
endIndex--;
|
||||
}
|
||||
StyleChangeRecord scr = (StyleChangeRecord) scr1.clone();
|
||||
if (scr1.stateMoveTo || scr2.stateMoveTo) {
|
||||
scr.moveDeltaX = startPosX + (endPosX - startPosX) * frame / 65535;
|
||||
scr.moveDeltaY = startPosY + (endPosY - startPosY) * frame / 65535;
|
||||
scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY;
|
||||
}
|
||||
finalRecords.add(scr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (edge1 instanceof EndShapeRecord) {
|
||||
finalRecords.add(edge1);
|
||||
break;
|
||||
}
|
||||
if (edge2 instanceof EndShapeRecord) {
|
||||
finalRecords.add(edge2);
|
||||
break;
|
||||
}
|
||||
if ((edge1 instanceof StyleChangeRecord) && (edge2 instanceof StyleChangeRecord)) {
|
||||
StyleChangeRecord scr1 = (StyleChangeRecord) edge1;
|
||||
StyleChangeRecord scr2 = (StyleChangeRecord) edge2;
|
||||
StyleChangeRecord scr = (StyleChangeRecord) scr1.clone();
|
||||
if (scr1.stateMoveTo && scr2.stateMoveTo) {
|
||||
scr.moveDeltaX = scr1.moveDeltaX + (scr2.moveDeltaX - scr1.moveDeltaX) * frame / 65535;
|
||||
scr.moveDeltaY = scr1.moveDeltaY + (scr2.moveDeltaY - scr1.moveDeltaY) * frame / 65535;
|
||||
finalRecords.add(scr);
|
||||
|
||||
if (edge1 instanceof CurvedEdgeRecord || edge2 instanceof CurvedEdgeRecord) {
|
||||
CurvedEdgeRecord cer1 = null;
|
||||
if (edge1 instanceof CurvedEdgeRecord) {
|
||||
cer1 = (CurvedEdgeRecord) edge1;
|
||||
} else if (edge1 instanceof StraightEdgeRecord) {
|
||||
cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1);
|
||||
}
|
||||
CurvedEdgeRecord cer2 = null;
|
||||
if (edge2 instanceof CurvedEdgeRecord) {
|
||||
cer2 = (CurvedEdgeRecord) edge2;
|
||||
} else if (edge2 instanceof StraightEdgeRecord) {
|
||||
cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2);
|
||||
}
|
||||
if ((cer2 == null) || (cer1 == null)) {
|
||||
continue;
|
||||
}
|
||||
CurvedEdgeRecord cer = new CurvedEdgeRecord();
|
||||
cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * frame / 65535;
|
||||
cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * frame / 65535;
|
||||
cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * frame / 65535;
|
||||
cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * frame / 65535;
|
||||
startPosX += cer1.controlDeltaX + cer1.anchorDeltaX;
|
||||
startPosY += cer1.controlDeltaY + cer1.anchorDeltaY;
|
||||
endPosX += cer2.controlDeltaX + cer2.anchorDeltaX;
|
||||
endPosY += cer2.controlDeltaY + cer2.anchorDeltaY;
|
||||
posX += cer.controlDeltaX + cer.anchorDeltaX;
|
||||
posY += cer.controlDeltaY + cer.anchorDeltaY;
|
||||
finalRecords.add(cer);
|
||||
} else {
|
||||
StraightEdgeRecord ser1 = null;
|
||||
if (edge1 instanceof StraightEdgeRecord) {
|
||||
ser1 = (StraightEdgeRecord) edge1;
|
||||
}
|
||||
StraightEdgeRecord ser2 = null;
|
||||
if (edge2 instanceof StraightEdgeRecord) {
|
||||
ser2 = (StraightEdgeRecord) edge2;
|
||||
}
|
||||
if ((ser2 == null) || (ser1 == null)) {
|
||||
continue;
|
||||
}
|
||||
StraightEdgeRecord ser = new StraightEdgeRecord();
|
||||
ser.generalLineFlag = true;
|
||||
ser.vertLineFlag = false;
|
||||
ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * frame / 65535;
|
||||
ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * frame / 65535;
|
||||
startPosX += ser1.deltaX;
|
||||
startPosY += ser1.deltaY;
|
||||
endPosX += ser2.deltaX;
|
||||
endPosY += ser2.deltaY;
|
||||
posX += ser.deltaX;
|
||||
posY += ser.deltaX;
|
||||
finalRecords.add(ser);
|
||||
}
|
||||
CurvedEdgeRecord cer1 = null;
|
||||
if (edge1 instanceof CurvedEdgeRecord) {
|
||||
cer1 = (CurvedEdgeRecord) edge1;
|
||||
} else if (edge1 instanceof StraightEdgeRecord) {
|
||||
cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1);
|
||||
}
|
||||
CurvedEdgeRecord cer2 = null;
|
||||
if (edge2 instanceof CurvedEdgeRecord) {
|
||||
cer2 = (CurvedEdgeRecord) edge2;
|
||||
} else if (edge2 instanceof StraightEdgeRecord) {
|
||||
cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2);
|
||||
}
|
||||
if ((cer2 == null) || (cer1 == null)) {
|
||||
continue;
|
||||
}
|
||||
CurvedEdgeRecord cer = new CurvedEdgeRecord();
|
||||
cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * frame / 65535;
|
||||
cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * frame / 65535;
|
||||
cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * frame / 65535;
|
||||
cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * frame / 65535;
|
||||
finalRecords.add(cer);
|
||||
}
|
||||
SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE();
|
||||
shape.fillStyles = fillStyles;
|
||||
|
||||
@@ -186,18 +186,44 @@ public class DefineMorphShapeTag extends CharacterTag implements BoundedTag, Mor
|
||||
FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(frame);
|
||||
LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), frame);
|
||||
|
||||
for (int startIndex = 0; startIndex < startEdges.shapeRecords.size(); startIndex++) {
|
||||
int startPosX = 0, startPosY = 0;
|
||||
int endPosX = 0, endPosY = 0;
|
||||
int posX = 0, posY = 0;
|
||||
|
||||
for (int startIndex = 0, endIndex = 0;
|
||||
startIndex < startEdges.shapeRecords.size() &&
|
||||
endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) {
|
||||
|
||||
SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex);
|
||||
SHAPERECORD edge2 = endEdges.shapeRecords.get(startIndex);
|
||||
SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex);
|
||||
if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) {
|
||||
StyleChangeRecord scr1 = (StyleChangeRecord) edge1;
|
||||
StyleChangeRecord scr2 = (StyleChangeRecord) edge2;
|
||||
StyleChangeRecord scr1;
|
||||
if (edge1 instanceof StyleChangeRecord) {
|
||||
scr1 = (StyleChangeRecord) edge1;
|
||||
if (scr1.stateMoveTo) {
|
||||
startPosX = scr1.moveDeltaX;
|
||||
startPosY = scr1.moveDeltaY;
|
||||
}
|
||||
} else {
|
||||
scr1 = new StyleChangeRecord();
|
||||
startIndex--;
|
||||
}
|
||||
StyleChangeRecord scr2;
|
||||
if (edge2 instanceof StyleChangeRecord) {
|
||||
scr2 = (StyleChangeRecord) edge2;
|
||||
if (scr2.stateMoveTo) {
|
||||
endPosX = scr2.moveDeltaX;
|
||||
endPosY = scr2.moveDeltaY;
|
||||
}
|
||||
} else {
|
||||
scr2 = new StyleChangeRecord();
|
||||
endIndex--;
|
||||
}
|
||||
StyleChangeRecord scr = (StyleChangeRecord) scr1.clone();
|
||||
if (scr1.stateMoveTo || scr2.stateMoveTo) {
|
||||
scr.stateMoveTo = true;
|
||||
scr.moveDeltaX = scr1.moveDeltaX + (scr2.moveDeltaX - scr1.moveDeltaX) * frame / 65535;
|
||||
scr.moveDeltaY = scr1.moveDeltaY + (scr2.moveDeltaY - scr1.moveDeltaY) * frame / 65535;
|
||||
scr.moveDeltaX = startPosX + (endPosX - startPosX) * frame / 65535;
|
||||
scr.moveDeltaY = startPosY + (endPosY - startPosY) * frame / 65535;
|
||||
scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY;
|
||||
}
|
||||
finalRecords.add(scr);
|
||||
continue;
|
||||
@@ -233,6 +259,12 @@ public class DefineMorphShapeTag extends CharacterTag implements BoundedTag, Mor
|
||||
cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * frame / 65535;
|
||||
cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * frame / 65535;
|
||||
cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * frame / 65535;
|
||||
startPosX += cer1.controlDeltaX + cer1.anchorDeltaX;
|
||||
startPosY += cer1.controlDeltaY + cer1.anchorDeltaY;
|
||||
endPosX += cer2.controlDeltaX + cer2.anchorDeltaX;
|
||||
endPosY += cer2.controlDeltaY + cer2.anchorDeltaY;
|
||||
posX += cer.controlDeltaX + cer.anchorDeltaX;
|
||||
posY += cer.controlDeltaY + cer.anchorDeltaY;
|
||||
finalRecords.add(cer);
|
||||
} else {
|
||||
StraightEdgeRecord ser1 = null;
|
||||
@@ -251,6 +283,12 @@ public class DefineMorphShapeTag extends CharacterTag implements BoundedTag, Mor
|
||||
ser.vertLineFlag = false;
|
||||
ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * frame / 65535;
|
||||
ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * frame / 65535;
|
||||
startPosX += ser1.deltaX;
|
||||
startPosY += ser1.deltaY;
|
||||
endPosX += ser2.deltaX;
|
||||
endPosY += ser2.deltaY;
|
||||
posX += ser.deltaX;
|
||||
posY += ser.deltaX;
|
||||
finalRecords.add(ser);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user