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; }
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; }