Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 function buildContent($tagCode, $opts = array())
 {
     $writer = new IO_Bit();
     IO_SWF_Type_RGB::build($writer, $this->_color);
     return $writer->output();
 }