1 50 51 package org.openlaszlo.iv.flash.api.action; 52 53 import java.io.PrintStream ; 54 import org.openlaszlo.iv.flash.util.*; 55 import org.openlaszlo.iv.flash.parser.*; 56 import org.openlaszlo.iv.flash.api.*; 57 import org.openlaszlo.iv.flash.context.Context; 58 59 64 public class ClipActions extends FlashItem { 65 66 private int prefix; private int mask; private IVVector clip_actions; 70 public ClipActions() {} 71 72 public void setPrefix( int prefix ) { 73 this.prefix = prefix; 74 } 75 76 public int getPrefix() { 77 return prefix; 78 } 79 80 85 public void setMask( int mask ) { 86 this.mask = mask; 87 } 88 89 94 public int getMask() { 95 return mask; 96 } 97 98 103 public void addAction( ClipAction action ) { 104 if( clip_actions == null ) { 105 clip_actions = new IVVector(); 106 } 107 clip_actions.addElement( action ); 108 } 109 110 115 public IVVector getActions() { 116 return clip_actions; 117 } 118 119 public static ClipActions parse( Parser p ) { 120 ClipActions a = new ClipActions(); 121 a.clip_actions = new IVVector(); 122 a.prefix = p.getUWord(); 123 int version = p.getFile().getVersion(); 124 a.mask = version>5? p.getUDWord(): p.getUWord(); 125 for(;;) { 126 int flags = version>5? p.getUDWord(): p.getUWord(); 127 if( flags == 0 ) break; 128 int length = p.getUDWord(); 129 int start = p.getPos(); 130 int end = start + length; 131 Program program = new Program( p.getBuf(), start, end ); 132 a.clip_actions.addElement( new ClipAction(flags, program) ); 133 p.setPos( end ); 134 } 135 return a; 136 } 137 138 public void write( FlashOutput fob ) { 139 fob.writeWord( prefix ); 140 int version = fob.getFlashFile().getVersion(); 141 142 if( version > 5 ) fob.writeDWord(mask); 143 else fob.writeWord( mask ); 144 145 clip_actions.write( fob ); 146 147 if( version > 5 ) fob.writeDWord( 0 ); 148 else fob.writeWord( 0 ); 149 } 150 151 public void printContent( PrintStream out, String indent ) { 152 out.println( indent+"Clip Actions: mask=0x"+Util.w2h(mask)+" prefix="+prefix+" count="+clip_actions.size() ); 153 clip_actions.printContent( out, indent+" " ); 154 } 155 156 public void apply( Context context ) { 157 for( int i=0; i<clip_actions.size(); i++ ) { 158 ClipAction a = (ClipAction) clip_actions.elementAt(i); 159 a.apply( context ); 160 } 161 } 162 163 public boolean isConstant() { 164 for( int i=0; i<clip_actions.size(); i++ ) { 165 ClipAction a = (ClipAction) clip_actions.elementAt(i); 166 if( !a.isConstant() ) return false; 167 } 168 return true; 169 } 170 171 protected FlashItem copyInto( FlashItem item, ScriptCopier copier ) { 172 super.copyInto( item, copier ); 173 ((ClipActions)item).prefix = prefix; 174 ((ClipActions)item).mask = mask; 175 ((ClipActions)item).clip_actions = clip_actions.getCopy( copier ); 176 return item; 177 } 178 179 public FlashItem getCopy( ScriptCopier copier ) { 180 return copyInto( new ClipActions(), copier ); 181 } 182 183 } 184 185 | Popular Tags |