From 233856140e5d4f6be5e0810bdcd45b4f0d360484 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 19 Mar 2016 09:55:48 +0100 Subject: [PATCH] multiple clipping areas fixed --- .../decompiler/flash/timeline/Timeline.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java index 471513630..ab90b73cf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -820,8 +820,9 @@ public class Timeline { List clips = new ArrayList<>(); int maxDepth = getMaxDepth(); + int clipCount = 0; for (int i = 1; i <= maxDepth; i++) { - boolean clipChanged = false; + boolean clipChanged = clipCount != clips.size(); for (int c = 0; c < clips.size(); c++) { if (clips.get(c).depth < i) { clips.remove(c); @@ -831,10 +832,22 @@ public class Timeline { if (clipChanged) { if (clips.size() > 0) { - g.setClip(clips.get(clips.size() - 1).shape); // todo: merge clips? + Area clip = null; + for (Clip clip1 : clips) { + Shape shape = clip1.shape; + if (clip == null) { + clip = new Area(shape); + } else { + clip.intersect(new Area(shape)); + } + } + + g.setClip(clip); } else { g.setClip(null); } + + clipCount = clips.size(); } if (!frameObj.layers.containsKey(i)) {