Ejemplo n.º 1
0
 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']);
         }
     }
 }
Ejemplo n.º 2
0
Archivo: Text.php Proyecto: yoya/IO_SWF
 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();
 }
Ejemplo 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;
 }
Ejemplo n.º 4
0
 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();
 }