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; }
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; }
function buildContent($tagCode, $opts = array()) { $writer = new IO_Bit(); $writer->putUI16LE($this->CharacterID); IO_SWF_Type_RECT::build($writer, $this->Bounds); // ---- $hasText = is_null($this->InitialText) ? 0 : 1; $hasTextColor = is_null($this->TextColor) ? 0 : 1; $hasMaxLength = is_null($this->MaxLength) ? 0 : 1; $hasFont = is_null($this->FontID) ? 0 : 1; $hasFontClass = is_null($this->FontClass) ? 0 : 1; $hasLayout = is_null($this->Align) ? 0 : 1; // ---- $writer->byteAlign(); $writer->putUIBit($hasText); $writer->putUIBit($this->WordWrap); $writer->putUIBit($this->Multiline); $writer->putUIBit($this->Password); $writer->putUIBit($this->ReadOnly); $writer->putUIBit($hasTextColor); $writer->putUIBit($hasMaxLength); $writer->putUIBit($hasFont); // ---- $writer->putUIBit($hasFontClass); $writer->putUIBit($this->AutoSize); $writer->putUIBit($hasLayout); $writer->putUIBit($this->NoSelect); $writer->putUIBit($this->Border); $writer->putUIBit($this->WasStatic); $writer->putUIBit($this->HTML); $writer->putUIBit($this->UseOutlines); if ($hasFont) { $writer->putUI16LE($this->FontID); } if ($hasFontClass) { IO_SWF_Type_String::build($writer, $this->FontClass); } if ($hasFont) { $writer->putUI16LE($this->FontHeight); } if ($hasTextColor) { IO_SWF_Type_RGBA::build($writer, $this->TextColor); } if ($hasMaxLength) { $writer->putUI16LE($this->MaxLength); } if ($hasLayout) { $writer->putUI8($this->Align); $writer->putUI16LE($this->LeftMargin); $writer->putUI16LE($this->RightMargin); $writer->putUI16LE($this->Indent); $writer->putSI16LE($this->Leading); } IO_SWF_Type_String::build($writer, $this->VariableName); if ($hasText) { IO_SWF_Type_String::build($writer, $this->InitialText); } return $writer->output(); }