Exemplo n.º 1
0
 function buildContent($tagCode, $opts = array())
 {
     $isMorph = $tagCode == 46 || $tagCode == 84;
     $writer = new IO_Bit();
     if (empty($opts['noShapeId'])) {
         $writer->putUI16LE($this->_shapeId);
     }
     $opts = array('tagCode' => $tagCode);
     if ($isMorph === false) {
         IO_SWF_Type_RECT::build($writer, $this->_shapeBounds);
         // 描画スタイル
         IO_SWF_Type_FILLSTYLEARRAY::build($writer, $this->_fillStyles, $opts);
         IO_SWF_Type_LINESTYLEARRAY::build($writer, $this->_lineStyles, $opts);
         // 描画枠
         $opts['fillStyleCount'] = count($this->_fillStyles);
         $opts['lineStyleCount'] = count($this->_lineStyles);
         IO_SWF_Type_SHAPE::build($writer, $this->_shapeRecords, $opts);
     } else {
         IO_SWF_Type_RECT::build($writer, $this->_startBounds);
         IO_SWF_Type_RECT::build($writer, $this->_endBounds);
         $writer->byteAlign();
         list($offset_offset, $dummy) = $writer->getOffset();
         $this->_offset = $writer->putUI32LE(0);
         // at first, write dummy
         // 描画スタイル
         IO_SWF_Type_FILLSTYLEARRAY::build($writer, $this->_morphFillStyles, $opts);
         IO_SWF_Type_LINESTYLEARRAY::build($writer, $this->_morphLineStyles, $opts);
         // 描画枠
         $opts['fillStyleCount'] = count($this->_morphFillStyles);
         $opts['lineStyleCount'] = count($this->_morphLineStyles);
         // StartEdge
         IO_SWF_Type_SHAPE::build($writer, $this->_startEdge, $opts);
         // EndEdge
         $writer->byteAlign();
         list($end_edge_offset, $dummy) = $writer->getOffset();
         $this->_offset = $end_edge_offset - $offset_offset - 4;
         $writer->setUI32LE($this->_offset, $offset_offset);
         IO_SWF_Type_SHAPE::build($writer, $this->_endEdge, $opts);
     }
     return $writer->output();
 }
Exemplo n.º 2
0
Arquivo: Font.php Projeto: yoya/IO_SWF
 function buildContent($tagCode, $opts = array())
 {
     $writer = new IO_Bit();
     $writer->putUI16LE($this->FontID);
     //
     $fontFlagsHasLayout = is_null($this->FontAscent) ? 0 : 1;
     //
     $writer->putUIBit($fontFlagsHasLayout);
     $writer->putUIBit($this->FontFlagsShiftJIS);
     $writer->putUIBit($this->FontFlagsSmallText);
     $writer->putUIBit($this->FontFlagsANSI);
     $writer->putUIBit($this->FontFlagsWideOffsets);
     $writer->putUIBit($this->FontFlagsWideCodes);
     $writer->putUIBit($this->FontFlagsItalic);
     $writer->putUIBit($this->FontFlagsBold);
     IO_SWF_Type_LANGCODE::build($writer, $this->LanguageCode);
     $fontNameLen = strlen($this->FontName);
     $writer->putUI8($fontNameLen);
     $writer->putData($this->FontName);
     $numGlyphs = count($this->OffsetTable);
     $writer->putUI16LE($numGlyphs);
     if ($numGlyphs === 0) {
         return $writer->output();
         // no glyphs field.
     }
     list($startOfOffsetTable, $dummy) = $writer->getOffset();
     $startOfOffsetTable2 = array();
     if ($this->FontFlagsWideOffsets) {
         foreach ($this->OffsetTable as $idx => $offset) {
             list($startOfOffsetTables[$idx], $dummy) = $writer->getOffset();
             $writer->putUI32LE(0);
             // dummy
         }
     } else {
         foreach ($this->OffsetTable as $idx => $offset) {
             list($startOfOffsetTables[$idx], $dummy) = $writer->getOffset();
             $writer->putUI16LE(0);
             // dummy
         }
     }
     list($startOfcodeTableOffset, $dummy) = $writer->getOffset();
     if ($this->FontFlagsWideOffsets) {
         $writer->putUI32LE(0);
         // dummy
     } else {
         $writer->putUI16LE(0);
         // dummy
     }
     $opts['fillStyleCount'] = 1;
     $opts['lineStyleCount'] = 0;
     foreach ($this->GlyphShapeTable as $idx => $glyphShape) {
         list($startOfGlyphShape, $dummy) = $writer->getOffset();
         if ($this->FontFlagsWideOffsets) {
             $writer->setUI32LE($startOfGlyphShape - $startOfOffsetTable, $startOfOffsetTables[$idx]);
         } else {
             $writer->setUI16LE($startOfGlyphShape - $startOfOffsetTable, $startOfOffsetTables[$idx]);
         }
         IO_SWF_Type_SHAPE::build($writer, $glyphShape, $opts);
         $writer->byteAlign();
     }
     //
     list($startOfCodeTable, $dummy) = $writer->getOffset();
     $codeTableOffset = $startOfCodeTable - $startOfOffsetTable;
     if ($this->FontFlagsWideOffsets) {
         $writer->setUI32LE($codeTableOffset, $startOfcodeTableOffset);
     } else {
         $writer->setUI16LE($codeTableOffset, $startOfcodeTableOffset);
     }
     if ($this->FontFlagsWideCodes) {
         foreach ($this->CodeTable as $c) {
             $writer->putUI16LE($c);
         }
     } else {
         foreach ($this->CodeTable as $c) {
             $writer->putUI8($c);
         }
     }
     if ($fontFlagsHasLayout) {
         $writer->putSI16LE($this->FontAscent);
         $writer->putSI16LE($this->FontDescent);
         $writer->putSI16LE($this->FontLeading);
         foreach ($this->FontAdvanceTable as $fontAdvance) {
             $writer->putSI16LE($fontAdvance);
         }
         foreach ($this->FontBoundsTable as $fontBounds) {
             IO_SWF_TYPE_RECT::build($writer, $fontBounds);
         }
         if (is_null($this->FontKerningTable)) {
             $writer->putUI16LE(0);
         } else {
             $kerningCount = count($this->FontKerningTable);
             $writer->putUI16LE($kerningCount);
             $opts['FontFlagsWideCodes'] = $this->FontFlagsWideCodes;
             foreach ($this->FontKerningTable as $fontKerning) {
                 IO_SWF_TYPE_KERNINGRECORD::build($writer, $fontKerning, $opts);
             }
         }
     }
     return $writer->output();
 }