From 0403e847f50a6d2d1e45dca8346cc17d978667f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 4 Dec 2016 10:30:34 +0100 Subject: [PATCH] no magic shapes offsets --- .../decompiler/flash/iggy/IggyCharOffset.java | 12 ------------ .../jpexs/decompiler/flash/iggy/IggyFont.java | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java index 687ecaad1..2023a9841 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyCharOffset.java @@ -32,14 +32,8 @@ public class IggyCharOffset implements StructureInterface { @IggyFieldType(DataType.uint32_t) long zero3; @IggyFieldType(DataType.uint64_t) - private long address; - long offset; - public long getAddress() { - return address; - } - public IggyCharOffset(ReadDataStreamInterface stream) throws IOException { readFromDataStream(stream); } @@ -65,12 +59,6 @@ public class IggyCharOffset implements StructureInterface { yscale = stream.readUI16(); zero3 = stream.readUI32(); offset = stream.readUI64(); - if (ischar1 > 0) { - address = offset + stream.position() - 8; - } else { - address = 0; - LOGGER.finer(String.format("Empty char")); - } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java index f2a9136e6..1e93ec19c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFont.java @@ -264,12 +264,19 @@ public class IggyFont extends IggyTag { //here is offset [7] - 1136 s.seek(abs_start_of_char_struct, SeekMode.SET); charOffsets = new ArrayList<>(); + List charAddresses = new ArrayList<>(); for (int i = 0; i < char_count; i++) { - charOffsets.add(new IggyCharOffset(s)); + IggyCharOffset iggyOffset = new IggyCharOffset(s); + charOffsets.add(iggyOffset); + if (iggyOffset.offset == 1) { + charAddresses.add(0L); + } else { + charAddresses.add(iggyOffset.offset + s.position() - 8); + } } glyphs = new ArrayList<>(); for (int i = 0; i < char_count; i++) { - long addr = charOffsets.get(i).getAddress(); + long addr = charAddresses.get(i); if (addr != 0) { s.seek(addr, SeekMode.SET); glyphs.add(new IggyShape(s)); @@ -374,14 +381,18 @@ public class IggyFont extends IggyTag { s.setOlderOffsetToThisPos(start_of_char_struct_ofs_pos); ib.writeConstLengthArray(IggyIndexBuilder.CONST_CHAR_OFFSET_SIZE, charOffsets.size()); + + List toFixOffsets = new ArrayList<>(); //offsets of shapes for (IggyCharOffset ofs : charOffsets) { + ofs.offset = FILL_LATER_IF_AVAILABLE; ofs.writeToDataStream(s); + toFixOffsets.add(s.position() - 8); } - //long afterOfsAddr = s.position(); for (int i = 0; i < glyphs.size(); i++) { IggyShape shp = glyphs.get(i); if (shp != null) { + s.setOlderOffsetToThisPos(toFixOffsets.get(i)); shp.writeToDataStream(s); } }