static function build(&$writer, $lineStyle, $opts = array()) { $tagCode = $opts['tagCode']; $isMorph = $tagCode == 46 || $tagCode == 84; if ($isMorph === false) { $writer->putUI16LE($lineStyle['Width']); if ($tagCode == 83) { // DefineShape4 $writer->putUIBits($lineStyle['StartCapStyle'], 2); $writer->putUIBits($lineStyle['JoinStyle'], 2); $writer->putUIBit($lineStyle['HasFillFlag']); $writer->putUIBit($lineStyle['NoHScaleFlag']); $writer->putUIBit($lineStyle['NoVScaleFlag']); $writer->putUIBit($lineStyle['PixelHintingFlag']); // ---- $writer->putUIBits(0, 5); //Reserved $writer->putUIBit($lineStyle['NoClose']); $writer->putUIBits($lineStyle['EndCapStyle'], 2); if ($lineStyle['JoinStyle'] == 2) { $writer->putUI16LE($lineStyle['MiterLimitFactor']); } } if ($tagCode < 32) { // DefineShape1,2 IO_SWF_Type_RGB::build($writer, $lineStyle['Color']); } else { if ($tagCode == 32) { // DefineShape3 IO_SWF_Type_RGBA::build($writer, $lineStyle['Color']); } else { // DefineShape4 if ($lineStyle['HasFillFlag'] == 0) { IO_SWF_Type_RGBA::build($writer, $lineStyle['Color']); } else { IO_SWF_Type_FILLSTYLE::build($writer, $lineStyle['FillType'], $opts); } } } } else { $writer->putUI16LE($lineStyle['StartWidth']); $writer->putUI16LE($lineStyle['EndWidth']); IO_SWF_Type_RGBA::build($writer, $lineStyle['StartColor']); IO_SWF_Type_RGBA::build($writer, $lineStyle['EndColor']); } return true; }
static function build(&$writer, $textrecord, $opts = array()) { $writer->byteAlign(); $writer->putUIBit($textrecord['TextRecordType']); $writer->putUIBits($textrecord['StyleFlagsReserved'], 3); $styleFlagsHasFont = $textrecord['StyleFlagsHasFont']; $styleFlagsHasColor = $textrecord['StyleFlagsHasColor']; $styleFlagsHasYOffeet = $textrecord['StyleFlagsHasYOffeet']; $styleFlagsHasXOffeet = $textrecord['StyleFlagsHasXOffeet']; $writer->putUIBit($styleFlagsHasFont); $writer->putUIBit($styleFlagsHasColor); $writer->putUIBit($styleFlagsHasYOffeet); $writer->putUIBit($styleFlagsHasXOffeet); // if ($styleFlagsHasFont) { $writer->putUI16LE($textrecord['FontID']); } if ($styleFlagsHasColor) { if ($opts['tagCode'] == 11) { // DefintText IO_SWF_Type_RGB::build($writer, $textrecord['TextColor']); } else { // DefineText2 IO_SWF_Type_RGBA::build($writer, $textrecord['TextColor']); } } if ($styleFlagsHasXOffeet) { $writer->putUI16LE($textrecord['XOffset']); } if ($styleFlagsHasYOffeet) { $writer->putUI16LE($textrecord['YOffset']); } if ($styleFlagsHasFont) { $writer->putUI16LE($textrecord['TextHeight']); } $glyphCount = count($textrecord['GlyphEntries']); $writer->putUI8($glyphCount); foreach ($textrecord['GlyphEntries'] as $glyphEntrie) { IO_SWF_Type_GLYPHENTRY::build($writer, $glyphEntrie, $opts); } }
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(); IO_SWF_Type_RGB::build($writer, $this->_color); return $writer->output(); }