static function build(&$writer, $buttonrecord, $opts = array()) { $writer->byteAlign(); $writer->putUIBits(0, 2); // ButtonReserved $buttonHasBlendMode = $buttonrecord['ButtonHasBlandMode']; $buttonHasFilterList = $buttonrecord['ButtonHasFilterList']; $writer->putUIBit($buttonHasBlendMode); $writer->putUIBit($buttonHasFilterList); $writer->putUIBit($buttonrecord['ButtonStateHitTest']); $writer->putUIBit($buttonrecord['ButtonStateDown']); $writer->putUIBit($buttonrecord['ButtonStateOver']); $writer->putUIBit($buttonrecord['ButtonStateUp']); // $writer->putUI16LE($buttonrecord['CharacterID']); $writer->putUI16LE($buttonrecord['PlaceDepth']); IO_SWF_Type_MATRIX::build($writer, $buttonrecord['PlaceMatrix']); if ($opts['tagCode'] == 34) { // DefineButton2 IO_SWF_Type_CXFORMWITHALPHA::build($writer, $buttonrecord['ColorTransform']); } else { IO_SWF_Type_CXFORM::build($writer, $buttonrecord['ColorTransform']); } if ($opts['tagCode'] == 34 && $opts['Version'] >= 8) { // DefineButton2 & SWF8 later if ($buttonHasFilterList == 1) { IO_SWF_Type_FILTERLIST::build($writer, $buttonrecord['FilterList']); } if ($buttonHasBlendMode == 1) { $writer->putUI8($buttonrecord['BlendMode']); } } }
function buildContent($tagCode, $opts = array()) { $opts['tagCode'] = $tagCode; $writer = new IO_Bit(); $writer->putUI16LE($this->_CharacterID); IO_SWF_TYPE_RECT::build($writer, $this->_TextBounds); IO_SWF_Type_MATRIX::build($writer, $this->_TextMatrix); $glyphBits = $this->_GlyphBits; // XXX $advanceBits = $this->_AdvanceBits; // XXX $writer->putUI8($glyphBits); $writer->putUI8($advanceBits); $opts['GlyphBits'] = $glyphBits; $opts['AdvanceBits'] = $advanceBits; foreach ($this->_TextRecords as $textRecord) { IO_SWF_Type_TEXTRECORD::build($writer, $textRecord, $opts); } $writer->putUI8(0); // TEXTRECORD TERMINATER return $writer->output(); }
static function build(&$writer, $fillStyle, $opts = array()) { $tagCode = $opts['tagCode']; $isMorph = $tagCode == 46 || $tagCode == 84; $fillStyleType = $fillStyle['FillStyleType']; $writer->putUI8($fillStyleType); switch ($fillStyleType) { case 0x0: // solid fill if ($isMorph === false) { if ($tagCode < 32) { // 32:DefineShape3 IO_SWF_Type_RGB::build($writer, $fillStyle['Color']); } else { IO_SWF_Type_RGBA::build($writer, $fillStyle['Color']); } } else { IO_SWF_Type_RGBA::build($writer, $fillStyle['StartColor']); IO_SWF_Type_RGBA::build($writer, $fillStyle['EndColor']); } break; case 0x10: // linear gradient fill // linear gradient fill case 0x12: // radial gradient fill // radial gradient fill case 0x13: // focal gradient fill // 8 and later if ($isMorph === false) { IO_SWF_Type_MATRIX::build($writer, $fillStyle['GradientMatrix']); } else { IO_SWF_Type_MATRIX::build($writer, $fillStyle['StartGradientMatrix']); IO_SWF_Type_MATRIX::build($writer, $fillStyle['EndGradientMatrix']); } $writer->byteAlign(); if ($isMorph === false) { $writer->putUIBits($fillStyle['SpreadMode'], 2); $writer->putUIBits($fillStyle['InterpolationMode'], 2); $numGradients = count($fillStyle['GradientRecords']); $writer->putUIBits($numGradients, 4); } else { $numGradients = count($fillStyle['GradientRecords']); $writer->putUI8($numGradients); } foreach ($fillStyle['GradientRecords'] as $gradientRecord) { if ($isMorph === false) { $writer->putUI8($gradientRecord['Ratio']); if ($tagCode < 32) { // 32:DefineShape3 IO_SWF_Type_RGB::build($writer, $gradientRecord['Color']); } else { IO_SWF_Type_RGBA::build($writer, $gradientRecord['Color']); } } else { $writer->putUI8($gradientRecord['StartRatio']); IO_SWF_Type_RGBA::build($writer, $gradientRecord['StartColor']); $writer->putUI8($gradientRecord['EndRatio']); IO_SWF_Type_RGBA::build($writer, $gradientRecord['EndColor']); } } if ($fillStyleType == 0x13) { // focal gradient fill // 8 and later $writer->putUI8($gradientRecord['FocalPoint']); } break; // case 0x13: // focal gradient fill // 8 and later // break; // case 0x13: // focal gradient fill // 8 and later // break; case 0x40: // repeating bitmap fill // repeating bitmap fill case 0x41: // clipped bitmap fill // clipped bitmap fill case 0x42: // non-smoothed repeating bitmap fill // non-smoothed repeating bitmap fill case 0x43: // non-smoothed clipped bitmap fill $writer->putUI16LE($fillStyle['BitmapId']); if ($isMorph === false) { IO_SWF_Type_MATRIX::build($writer, $fillStyle['BitmapMatrix']); } else { IO_SWF_Type_MATRIX::build($writer, $fillStyle['StartBitmapMatrix']); IO_SWF_Type_MATRIX::build($writer, $fillStyle['EndBitmapMatrix']); } break; default: throw new IO_SWF_Exception("Unknown FillStyleType={$fillStyleType} tagCode={$tagCode}"); } return true; }
function buildContent($tagCode, $opts = array()) { $writer = new IO_Bit(); switch ($tagCode) { case 4: // PlaceObject $this->_characterId = $writer->getUI16LE(); $this->_depth = $writer->getUI16LE(); $this->_matrix = IO_SWF_Type_MATRIX::parse($writer); if ($writer->hasNextData()) { // optional $this->_colorTransform = IO_SWF_Type_CXFORM::parse($writer); } break; case 26: // PlaceObject2 // if (is_null($this->_characterId) === false) { $this->_placeFlagHasCharacter = 1; } else { $this->_placeFlagHasCharacter = 0; } if (is_null($this->_matrix) === false) { $this->_placeFlagHasMatrix = 1; } else { $this->_placeFlagHasMatrix = 0; } if (is_null($this->_colorTransform) === false) { $this->_placeFlagHasColorTransform = 1; } else { $this->_placeFlagHasColorTransform = 0; } if (is_null($this->_ratio) === false) { $this->_placeFlagHasRatio = 1; } else { $this->_placeFlagHasRatio = 0; } if (is_null($this->_name) === false) { $this->_placeFlagHasName = 1; } else { $this->_placeFlagHasName = 0; } if (is_null($this->_clipDepth) === false) { $this->_placeFlagHasClipDepth = 1; } else { $this->_placeFlagHasClipDepth = 0; } if (is_null($this->_clipActions) === false) { $this->_placeFlagHasClipActions = 1; } else { $this->_placeFlagHasClipActions = 0; } // placeFlag $writer->putUIBit($this->_placeFlagHasClipActions); $writer->putUIBit($this->_placeFlagHasClipDepth); $writer->putUIBit($this->_placeFlagHasName); $writer->putUIBit($this->_placeFlagHasRatio); $writer->putUIBit($this->_placeFlagHasColorTransform); $writer->putUIBit($this->_placeFlagHasMatrix); $writer->putUIBit($this->_placeFlagHasCharacter); $writer->putUIBit($this->_placeFlagMove); // $writer->putUI16LE($this->_depth); if ($this->_placeFlagHasCharacter) { $writer->putUI16LE($this->_characterId); } if ($this->_placeFlagHasMatrix) { IO_SWF_Type_MATRIX::build($writer, $this->_matrix); } if ($this->_placeFlagHasColorTransform) { IO_SWF_Type_CXFORMWITHALPHA::build($writer, $this->_colorTransform); } if ($this->_placeFlagHasRatio) { $writer->putUI16LE($this->_ratio); } if ($this->_placeFlagHasName) { IO_SWF_Type_String::build($writer, $this->_name); } if ($this->_placeFlagHasClipDepth) { $writer->putUI16LE($this->_clipDepth); } if ($this->_placeFlagHasClipActions) { IO_SWF_Type_CLIPACTIONS::build($writer, $this->_clipActions, $opts); } break; } return $writer->output(); }