Example #1
0
 static function parse(&$reader, $opts = array())
 {
     $buttonrecord = array();
     $reader->byteAlign();
     $buttonrecord['ButtonReserved'] = $reader->getUIBits(2);
     // must be 0
     $buttonHasBlendMode = $reader->getUIBit();
     $buttonHasFilterList = $reader->getUIBit();
     $buttonrecord['ButtonHasBlandMode'] = $buttonHasBlendMode;
     $buttonrecord['ButtonHasFilterList'] = $buttonHasFilterList;
     $buttonrecord['ButtonStateHitTest'] = $reader->getUIBit();
     $buttonrecord['ButtonStateDown'] = $reader->getUIBit();
     $buttonrecord['ButtonStateOver'] = $reader->getUIBit();
     $buttonrecord['ButtonStateUp'] = $reader->getUIBit();
     $buttonrecord['CharacterID'] = $reader->getUI16LE();
     $buttonrecord['PlaceDepth'] = $reader->getUI16LE();
     $buttonrecord['PlaceMatrix'] = IO_SWF_Type_MATRIX::parse($reader);
     if ($opts['tagCode'] == 34) {
         // DefineButton2
         $buttonrecord['ColorTransform'] = IO_SWF_Type_CXFORMWITHALPHA::parse($reader);
     } else {
         $buttonrecord['ColorTransform'] = IO_SWF_Type_CXFORM::parse($reader);
     }
     if ($opts['tagCode'] == 34 && $opts['Version'] >= 8) {
         // DefineButton2 & SWF8 later
         if ($buttonHasFilterList == 1) {
             $buttonrecord['FilterList'] = IO_SWF_Type_FILTERLIST::parse($reader);
         }
         if ($buttonHasBlendMode == 1) {
             $buttonrecord['BlendMode'] = $reader->getUI8();
         }
     }
     return $buttonrecord;
 }
Example #2
0
 function parseContent($tagCode, $content, $opts = array())
 {
     $reader = new IO_Bit();
     $reader->input($content);
     switch ($tagCode) {
         case 4:
             // PlaceObject
             $this->_characterId = $reader->getUI16LE();
             $this->_depth = $reader->getUI16LE();
             $this->_matrix = IO_SWF_Type_MATRIX::parse($reader);
             if ($reader->hasNextData()) {
                 // optional
                 $this->_colorTransform = IO_SWF_Type_CXFORM::parse($reader);
             }
             break;
         case 26:
             // PlaceObject2
             // placeFlag
             $this->_placeFlagHasClipActions = $reader->getUIBit();
             $this->_placeFlagHasClipDepth = $reader->getUIBit();
             $this->_placeFlagHasName = $reader->getUIBit();
             $this->_placeFlagHasRatio = $reader->getUIBit();
             $this->_placeFlagHasColorTransform = $reader->getUIBit();
             $this->_placeFlagHasMatrix = $reader->getUIBit();
             $this->_placeFlagHasCharacter = $reader->getUIBit();
             $this->_placeFlagMove = $reader->getUIBit();
             //
             $this->_depth = $reader->getUI16LE();
             if ($this->_placeFlagHasCharacter) {
                 $this->_characterId = $reader->getUI16LE();
             }
             if ($this->_placeFlagHasMatrix) {
                 $this->_matrix = IO_SWF_Type_MATRIX::parse($reader);
             }
             if ($this->_placeFlagHasColorTransform) {
                 $this->_colorTransform = IO_SWF_Type_CXFORMWITHALPHA::parse($reader);
             }
             if ($this->_placeFlagHasRatio) {
                 $this->_ratio = $reader->getUI16LE();
             }
             if ($this->_placeFlagHasName) {
                 $this->_name = IO_SWF_Type_String::parse($reader);
             }
             if ($this->_placeFlagHasClipDepth) {
                 $this->_clipDepth = $reader->getUI16LE();
             }
             if ($this->_placeFlagHasClipActions) {
                 $this->_clipActions = IO_SWF_Type_CLIPACTIONS::parse($reader, $opts);
             }
             break;
     }
     return true;
 }