public ActionEncoder(SwfEncoder writer, DebugEncoder debug)
 {
     this.writer = writer;
     this.debug  = debug;
     //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
     labels  = new System.Collections.Hashtable();
     updates = new System.Collections.ArrayList();
 }
示例#2
0
		public ActionEncoder(SwfEncoder writer, DebugEncoder debug)
		{
			this.writer = writer;
			this.debug = debug;
			//UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
			labels = new System.Collections.Hashtable();
			updates = new System.Collections.ArrayList();
		}
        public virtual void  writeTo(System.IO.Stream out_Renamed)
        {
            SwfEncoder buffer = new SwfEncoder(version);

            fixNamesAndBitmaps();
            encodeSwdData(buffer);
            buffer.WriteTo(out_Renamed);
        }
 private void  encodeClipEventFlags(int flags, SwfEncoder w)
 {
     if (w.swfVersion >= 6)
     {
         w.write32(flags);
     }
     else
     {
         w.writeUI16(flags);
     }
 }
		private void  encodeStraightEdgeRecord(StraightEdgeRecord line, SwfEncoder w, int nbits)
		{
			if (line.deltaX == 0)
			{
				w.writeUBits(1, 2); // vertical line
				w.writeSBits(line.deltaY, nbits);
			}
			else if (line.deltaY == 0)
			{
				w.writeUBits(0, 2); // horizontal line
				w.writeSBits(line.deltaX, nbits);
			}
			else
			{
				w.writeBit(true); // general line
				w.writeSBits(line.deltaX, nbits);
				w.writeSBits(line.deltaY, nbits);
			}
		}
		private void  encodeSoundInfo(SoundInfo info, SwfEncoder w)
		{
			w.writeUBits(0, 2); // reserved
			w.writeBit(info.syncStop);
			w.writeBit(info.syncNoMultiple);
			w.writeBit(info.records != null);
			w.writeBit(info.loopCount != SoundInfo.UNINITIALIZED);
			w.writeBit(info.outPoint != SoundInfo.UNINITIALIZED);
			w.writeBit(info.inPoint != SoundInfo.UNINITIALIZED);
			
			if (info.inPoint != SoundInfo.UNINITIALIZED)
			{
				w.write32((int) info.inPoint);
			}
			if (info.outPoint != SoundInfo.UNINITIALIZED)
			{
				w.write32((int) info.outPoint);
			}
			if (info.loopCount != SoundInfo.UNINITIALIZED)
			{
				w.writeUI16(info.loopCount);
			}
			if (info.records != null)
			{
				w.writeUI8(info.records.Length);
				for (int k = 0; k < info.records.Length; k++)
				{
					w.write64(info.records[k]);
				}
			}
		}
		private void  encodeButtonCondAction(ButtonCondAction condAction, SwfEncoder w, bool last)
		{
			int pos = w.Pos;
			w.writeUI16(0);
			
			w.writeUBits(condAction.keyPress, 7);
			w.writeBit(condAction.overDownToIdle);
			
			w.writeBit(condAction.idleToOverDown);
			w.writeBit(condAction.outDownToIdle);
			w.writeBit(condAction.outDownToOverDown);
			w.writeBit(condAction.overDownToOutDown);
			w.writeBit(condAction.overDownToOverUp);
			w.writeBit(condAction.overUpToOverDown);
			w.writeBit(condAction.overUpToIdle);
			w.writeBit(condAction.idleToOverUp);
			
			new ActionEncoder(w, debug).encode(condAction.actionList);
			w.writeUI8(0); // end action byte
			
			if (!last)
			{
				w.writeUI16at(pos, w.Pos - pos);
			}
		}
		private void  encodeCxforma(CXFormWithAlpha cxforma, SwfEncoder w)
		{
			w.writeBit(cxforma.hasAdd);
			w.writeBit(cxforma.hasMult);
			
			int nbits = cxforma.nbits();
			w.writeUBits(nbits, 4);
			
			if (cxforma.hasMult)
			{
				w.writeSBits(cxforma.redMultTerm, nbits);
				w.writeSBits(cxforma.greenMultTerm, nbits);
				w.writeSBits(cxforma.blueMultTerm, nbits);
				w.writeSBits(cxforma.alphaMultTerm, nbits);
			}
			
			if (cxforma.hasAdd)
			{
				w.writeSBits(cxforma.redAddTerm, nbits);
				w.writeSBits(cxforma.greenAddTerm, nbits);
				w.writeSBits(cxforma.blueAddTerm, nbits);
				w.writeSBits(cxforma.alphaAddTerm, nbits);
			}
			
			w.flushBits();
		}
		/// <param name="rgba">as 0xAARRGGBB
		/// </param>
		/// <param name="w">
		/// </param>
		private void  encodeRGBA(int rgba, SwfEncoder w)
		{
			w.writeUI8((SupportClass.URShift(rgba, 16)) & 255); // red
			w.writeUI8((SupportClass.URShift(rgba, 8)) & 255); // green
			w.writeUI8(rgba & 255); // blue
			w.writeUI8(SupportClass.URShift(rgba, 24)); // alpha
		}
		/// <param name="rgb">as 0x00RRGGBB
		/// </param>
		/// <param name="w">
		/// </param>
		private void  encodeRGB(int rgb, SwfEncoder w)
		{
			w.writeUI8(SupportClass.URShift(rgb, 16)); // red. we don't mask this because if rgb has an Alpha value, something's wrong
			w.writeUI8((SupportClass.URShift(rgb, 8)) & 255);
			w.writeUI8(rgb & 255); // blue
		}
		public virtual void  encodeRect(Rect r, SwfEncoder w)
		{
			int nBits = r.nbits();
			w.writeUBits(nBits, 5);
			w.writeSBits(r.xMin, nBits);
			w.writeSBits(r.xMax, nBits);
			w.writeSBits(r.yMin, nBits);
			w.writeSBits(r.yMax, nBits);
			w.flushBits();
		}
		private void  encodeFilterList(System.Collections.IList filters, SwfEncoder w)
		{
			int count = filters.Count;
			w.writeUI8(count);
			//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
			for (System.Collections.IEnumerator it = filters.GetEnumerator(); it.MoveNext(); )
			{
				//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
				Filter f = (Filter) it.Current;
				w.writeUI8(f.getID());
				// I've never quite understood why the serialization code isn't in the tags themselves..
				switch (f.getID())
				{
					
					case DropShadowFilter.ID:  encodeDropShadowFilter(w, (DropShadowFilter) f); break;
					
					case BlurFilter.ID:  encodeBlurFilter(w, (BlurFilter) f); break;
					
					case ConvolutionFilter.ID:  encodeConvolutionFilter(w, (ConvolutionFilter) f); break;
					
					case GlowFilter.ID:  encodeGlowFilter(w, (GlowFilter) f); break;
					
					case BevelFilter.ID:  encodeBevelFilter(w, (BevelFilter) f); break;
					
					case ColorMatrixFilter.ID:  encodeColorMatrixFilter(w, (ColorMatrixFilter) f); break;
					
					case GradientGlowFilter.ID:  encodeGradientGlowFilter(w, (GradientGlowFilter) f); break;
					
					case GradientBevelFilter.ID:  encodeGradientBevelFilter(w, (GradientBevelFilter) f); break;
					}
			}
		}
		private void  encodeDefineText(DefineText tag, SwfEncoder w, int type)
		{
			int id = dict.add(tag);
			w.writeUI16(id);
			encodeRect(tag.bounds, w);
			encodeMatrix(tag.matrix, w);
			int length = tag.records.Count;
			
			// compute necessary bit width
			int glyphBits = 0;
			int advanceBits = 0;
			for (int i = 0; i < length; i++)
			{
				TextRecord tr = (TextRecord) tag.records[i];
				
				for (int j = 0; j < tr.entries.Length; j++)
				{
					GlyphEntry entry = tr.entries[j];
					
					while (entry.Index > (1 << glyphBits))
						glyphBits++;
					while (System.Math.Abs(entry.advance) > (1 << advanceBits))
						advanceBits++;
				}
			}
			
			// increment to get from bit index to bit count.
			++glyphBits;
			++advanceBits;
			
			w.writeUI8(glyphBits);
			w.writeUI8(++advanceBits); // add one extra bit because advances are signed
			
			for (int i = 0; i < length; i++)
			{
				TextRecord record = (TextRecord) tag.records[i];
				encodeTextRecord(record, w, type, glyphBits, advanceBits);
			}
			
			w.writeUI8(0);
		}
		public override void  defineSprite(DefineSprite tag)
		{
			int id = dict.add(tag);
			tagw.writeUI16(id);
			tagw.writeUI16(tag.framecount);
			
			if (Debug)
			{
				debug.adjust = writer.Pos + 6;
			}
			
			// save frame count
			int oldFrames = frames;
			frames = 0;
			
			// save the movie writer, and push a new writer
			SwfEncoder oldWriter = writer;
			writer = tagw;
			tagw = createEncoder(SwfVersion);
			
			// write sprite tags
			System.Collections.IList tags = tag.tagList.tags;
			int size = tags.Count;
			for (int i = 0; i < size; i++)
			{
				Tag t = (Tag) tags[i];
				if (!(t is DefineTag))
					t.visit(this);
			}
			
			// terminate with end marker
			writer.writeUI16(0);
			
			// update frame count
			writer.writeUI16at(2, frames);
			
			// restore writers
			tagw = writer;
			writer = oldWriter;
			frames = oldFrames;
			
			if (Debug)
			{
				debug.adjust = 0;
			}
			
			encodeTag(tag);
		}
		private void  encodeShapeWithStyle(ShapeWithStyle shapeWithStyle, SwfEncoder w, int shape)
		{
			encodeFillstyles(shapeWithStyle.fillstyles, w, shape);
			encodeLinestyles(shapeWithStyle.linestyles, w, shape);
			
			encodeShape(shapeWithStyle, w, shape, shapeWithStyle.fillstyles.Count, shapeWithStyle.linestyles.Count);
		}
示例#16
0
		private void  encodeSwdData(SwfEncoder buffer)
		{
			// Encode the header.
			buffer.write32(('F') | ('W' << 8) | ('D' << 16) | (version << 24));
			
			// Encode one kDebugID tag.
			buffer.write32(flash.swf.DebugTags_Fields.kDebugID);
			buffer.write(debugID);
			
			// Encode the kDebugScript and kDebugOffset tags.
			// The kDebugScript tags are in module number order (1,2,3,...).
			// After each one of these are the associated kDebugOffset tags
			// for that module number, in ascending order
			// by line number and byte offset.
			
			SupportClass.CollectionsSupport.Sort(debugScripts, null);
			int id = 0;
			System.Collections.IEnumerator debugScriptIter = debugScripts.GetEnumerator();
			//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
			while (debugScriptIter.MoveNext())
			{
				//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
				DebugScript debugScript = (DebugScript) debugScriptIter.Current;
				id++;
				
				buffer.write32(flash.swf.DebugTags_Fields.kDebugScript);
				buffer.write32(id);
				buffer.write32(debugScript.bitmap);
				buffer.writeString(debugScript.name);
				buffer.writeString(debugScript.text);
				
				SupportClass.CollectionsSupport.Sort(debugScript.debugOffsets, null);
				System.Collections.IEnumerator debugOffsetIter = debugScript.debugOffsets.GetEnumerator();
				//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
				while (debugOffsetIter.MoveNext())
				{
					//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
					DebugOffset debugOffset = (DebugOffset) debugOffsetIter.Current;
					
					buffer.write32(flash.swf.DebugTags_Fields.kDebugOffset);
					buffer.write32(id);
					buffer.write32(debugOffset.lineNumber);
					buffer.write32(debugOffset.byteOffset);
				}
			}
			
			// Encode the kDebugRegister tags
			SupportClass.CollectionsSupport.Sort(debugRegisters, null);
			System.Collections.IEnumerator itr = debugRegisters.GetEnumerator();
			//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
			while (itr.MoveNext())
			{
				//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
				DebugRegisters debug = (DebugRegisters) itr.Current;
				int size = debug.registerNumbers.Length;
				
				buffer.write32(flash.swf.DebugTags_Fields.kDebugRegisters);
				buffer.write32(debug.offset);
				buffer.writeUI8(size);
				for (int i = 0; i < debug.registerNumbers.Length; i++)
				{
					buffer.writeUI8(debug.registerNumbers[i]);
					buffer.writeString(debug.variableNames[i]);
				}
			}
			
			// Encode the kDebugBreakpoint tags
			SupportClass.CollectionsSupport.Sort(debugBreakpoints, null);
			System.Collections.IEnumerator debugBreakpointIterator = debugBreakpoints.GetEnumerator();
			//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
			while (debugBreakpointIterator.MoveNext())
			{
				//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
				DebugBreakpoint debugBreakpoint = (DebugBreakpoint) debugBreakpointIterator.Current;
				
				buffer.write32(flash.swf.DebugTags_Fields.kDebugBreakpoint);
				buffer.write32(debugBreakpoint.offset);
			}
		}
		private void  encodeDropShadowFilter(SwfEncoder w, DropShadowFilter f)
		{
			encodeRGBA(f.color, w);
			w.write32(f.blurX);
			w.write32(f.blurY);
			w.write32(f.angle);
			w.write32(f.distance);
			w.writeUI16(f.strength);
			w.writeUI8(f.flags);
		}
		private void  encodeBlurFilter(SwfEncoder w, BlurFilter f)
		{
			w.write32(f.blurX);
			w.write32(f.blurY);
			w.writeUI8(f.passes);
		}
		private void  encodeBitmapData(sbyte[] data, SwfEncoder w)
		{
			w.write(data);
		}
		private void  encodeColorMatrixFilter(SwfEncoder w, ColorMatrixFilter f)
		{
			for (int i = 0; i < 20; ++i)
			{
				w.writeFloat(f.values[i]);
			}
		}
		private void  encodeAlphaColorMapData(int[] colorData, sbyte[] pixelData, SwfEncoder w)
		{
			for (int i = 0; i < colorData.Length; i++)
			{
				encodeRGBA(colorData[i], w);
			}
			w.write(pixelData);
		}
		private void  encodeConvolutionFilter(SwfEncoder w, ConvolutionFilter f)
		{
			w.writeUI8(f.matrixX);
			w.writeUI8(f.matrixY);
			w.writeFloat(f.divisor);
			w.writeFloat(f.bias);
			for (int i = 0; i < f.matrix.Length; ++i)
				w.writeFloat(f.matrix[i]);
			w.writeUI8(f.flags);
		}
		private void  encodeButtonRecord(ButtonRecord record, SwfEncoder w, int defineButton)
		{
			if (defineButton == flash.swf.TagValues_Fields.stagDefineButton2)
			{
				w.writeUBits(0, 2);
				w.writeBit(record.blendMode != - 1);
				w.writeBit(record.filters != null);
			}
			else
			{
				w.writeUBits(0, 4);
			}
			w.writeBit(record.hitTest);
			w.writeBit(record.down);
			w.writeBit(record.over);
			w.writeBit(record.up);
			
			w.writeUI16(dict.getId(record.characterRef));
			w.writeUI16(record.placeDepth);
			encodeMatrix(record.placeMatrix, w);
			
			if (defineButton == flash.swf.TagValues_Fields.stagDefineButton2)
			{
				encodeCxforma(record.colorTransform, w);
				if (record.filters != null)
				{
					this.encodeFilterList(record.filters, w);
				}
				if (record.blendMode != - 1)
				{
					w.writeUI8(record.blendMode);
				}
			}
		}
		private void  encodeGlowFilter(SwfEncoder w, GlowFilter f)
		{
			encodeRGBA(f.color, w);
			w.write32(f.blurX);
			w.write32(f.blurY);
			w.writeUI16(f.strength);
			w.writeUI8(f.flags);
		}
		private void  encodeMatrix(Matrix matrix, SwfEncoder w)
		{
			w.writeBit(matrix.hasScale);
			if (matrix.hasScale)
			{
				int nScaleBits = matrix.nScaleBits();
				w.writeUBits(nScaleBits, 5);
				w.writeSBits(matrix.scaleX, nScaleBits);
				w.writeSBits(matrix.scaleY, nScaleBits);
			}
			
			w.writeBit(matrix.hasRotate);
			if (matrix.hasRotate)
			{
				int nRotateBits = matrix.nRotateBits();
				w.writeUBits(nRotateBits, 5);
				w.writeSBits(matrix.rotateSkew0, nRotateBits);
				w.writeSBits(matrix.rotateSkew1, nRotateBits);
			}
			
			int nTranslateBits = matrix.nTranslateBits();
			w.writeUBits(nTranslateBits, 5);
			w.writeSBits(matrix.translateX, nTranslateBits);
			w.writeSBits(matrix.translateY, nTranslateBits);
			
			w.flushBits();
		}
		private void  encodeBevelFilter(SwfEncoder w, BevelFilter f)
		{
			encodeRGBA(f.shadowColor, w);
			encodeRGBA(f.highlightColor, w);
			w.write32(f.blurX);
			w.write32(f.blurY);
			w.write32(f.angle);
			w.write32(f.distance);
			w.writeUI16(f.strength);
			w.writeUI8(f.flags);
		}
		private void  encodeCxform(CXForm cxform, SwfEncoder w)
		{
			
			w.writeBit(cxform.hasAdd);
			w.writeBit(cxform.hasMult);
			
			int nbits = cxform.nbits();
			w.writeUBits(nbits, 4);
			
			if (cxform.hasMult)
			{
				w.writeSBits(cxform.redMultTerm, nbits);
				w.writeSBits(cxform.greenMultTerm, nbits);
				w.writeSBits(cxform.blueMultTerm, nbits);
			}
			
			if (cxform.hasAdd)
			{
				w.writeSBits(cxform.redAddTerm, nbits);
				w.writeSBits(cxform.greenAddTerm, nbits);
				w.writeSBits(cxform.blueAddTerm, nbits);
			}
			
			w.flushBits();
		}
		private void  encodeGradientBevelFilter(SwfEncoder w, GradientBevelFilter f)
		{
			w.writeUI8(f.numcolors);
			for (int i = 0; i < f.numcolors; ++i)
				encodeRGBA(f.gradientColors[i], w);
			for (int i = 0; i < f.numcolors; ++i)
				w.writeUI8(f.gradientRatio[i]);
			
			//        w.write32( f.shadowColor );
			//        w.write32( f.highlightColor );
			w.write32(f.blurX);
			w.write32(f.blurY);
			w.write32(f.angle);
			w.write32(f.distance);
			w.writeUI16(f.strength);
			w.writeUI8(f.flags);
		}
		public virtual void  encodeShape(Shape s, SwfEncoder w, int shape, int nFillStyles, int nLineStyles)
		{
			int[] numFillBits = new int[]{SwfEncoder.minBits(nFillStyles, 0)};
			int[] numLineBits = new int[]{SwfEncoder.minBits(nLineStyles, 0)};
			
			w.writeUBits(numFillBits[0], 4);
			w.writeUBits(numLineBits[0], 4);
			
			System.Collections.IEnumerator it = s.shapeRecords.GetEnumerator();
			//UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
			while (it.MoveNext())
			{
				//UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
				ShapeRecord record = (ShapeRecord) it.Current;
				if (record is StyleChangeRecord)
				{
					// style change
					w.writeBit(false);
					StyleChangeRecord change = (StyleChangeRecord) record;
					encodeStyleChangeRecord(w, change, numFillBits, numLineBits, shape);
				}
				else
				{
					// edge
					w.writeBit(true);
					EdgeRecord e = (EdgeRecord) record;
					bool straight = e is StraightEdgeRecord;
					w.writeBit(straight);
					int nbits = straight?calcBits((StraightEdgeRecord) e):calcBits((CurvedEdgeRecord) e);
					if (nbits < 2)
						nbits = 2;
					w.writeUBits(nbits - 2, 4);
					if (straight)
					{
						// line
						StraightEdgeRecord line = (StraightEdgeRecord) e;
						encodeStraightEdgeRecord(line, w, nbits);
					}
					else
					{
						// curve
						CurvedEdgeRecord curve = (CurvedEdgeRecord) e;
						w.writeSBits(curve.controlDeltaX, nbits);
						w.writeSBits(curve.controlDeltaY, nbits);
						w.writeSBits(curve.anchorDeltaX, nbits);
						w.writeSBits(curve.anchorDeltaY, nbits);
					}
				}
			}
			
			// endshaperecord
			w.writeUBits(0, 6);
			
			w.flushBits();
		}
		private void  encodeTextRecord(TextRecord record, SwfEncoder w, int type, int glyphBits, int advanceBits)
		{
			w.writeUI8(record.flags);
			
			if (record.hasFont())
			{
				w.writeUI16(dict.getId(record.font));
			}
			
			if (record.hasColor())
			{
				if (type == flash.swf.TagValues_Fields.stagDefineText2)
					encodeRGBA(record.color, w);
				else
					encodeRGB(record.color, w);
			}
			
			if (record.hasX())
			{
				w.writeSI16(record.xOffset);
			}
			
			if (record.hasY())
			{
				w.writeSI16(record.yOffset);
			}
			
			if (record.hasHeight())
			{
				w.writeUI16(record.height);
			}
			
			w.writeUI8(record.entries.Length);
			
			for (int i = 0; i < record.entries.Length; i++)
			{
				w.writeUBits(record.entries[i].Index, glyphBits);
				w.writeSBits(record.entries[i].advance, advanceBits);
			}
			w.flushBits();
		}
		private void  encodeStyleChangeRecord(SwfEncoder w, StyleChangeRecord s, int[] numFillBits, int[] numLineBits, int shape)
		{
			w.writeBit(s.stateNewStyles);
			w.writeBit(s.stateLineStyle);
			w.writeBit(s.stateFillStyle1);
			w.writeBit(s.stateFillStyle0);
			w.writeBit(s.stateMoveTo);
			
			if (s.stateMoveTo)
			{
				int moveBits = s.nMoveBits();
				w.writeUBits(moveBits, 5);
				w.writeSBits(s.moveDeltaX, moveBits);
				w.writeSBits(s.moveDeltaY, moveBits);
			}
			
			if (s.stateFillStyle0)
			{
				w.writeUBits(s.fillstyle0, numFillBits[0]);
			}
			
			if (s.stateFillStyle1)
			{
				w.writeUBits(s.fillstyle1, numFillBits[0]);
			}
			
			if (s.stateLineStyle)
			{
				w.writeUBits(s.linestyle, numLineBits[0]);
			}
			
			if (s.stateNewStyles)
			{
				w.flushBits();
				
				encodeFillstyles(s.fillstyles, w, shape);
				encodeLinestyles(s.linestyles, w, shape);
				
				numFillBits[0] = SwfEncoder.minBits(s.fillstyles.Count, 0);
				numLineBits[0] = SwfEncoder.minBits(s.linestyles.Count, 0);
				w.writeUBits(numFillBits[0], 4);
				w.writeUBits(numLineBits[0], 4);
			}
		}
		public override void  header(Header header)
		{
			// get some header properties we need to know
			int swfVersion = header.version;
			this.header_Renamed_Field = header;
			this.writer = createEncoder(swfVersion);
			this.tagw = createEncoder(swfVersion);
			width = header.size.Width;
			height = header.size.Height;
			frames = 0;
			
			// write the header
			writer.writeUI8(header.compressed?'C':'F');
			writer.writeUI8('W');
			writer.writeUI8('S');
			writer.writeUI8(header.version);
			writer.write32((int) header.length);
			if (header.compressed)
			{
				writer.markComp();
			}
			encodeRect(header.size, writer);
			writer.writeUI8(header.rate >> 8);
			writer.writeUI8(header.rate & 255);
			framecountPos = writer.Pos;
			writer.writeUI16(header.framecount);
		}
示例#33
0
		public virtual void  writeTo(System.IO.Stream out_Renamed)
		{
			SwfEncoder buffer = new SwfEncoder(version);
			fixNamesAndBitmaps();
			encodeSwdData(buffer);
			buffer.WriteTo(out_Renamed);
		}
        private void  encodeSwdData(SwfEncoder buffer)
        {
            // Encode the header.
            buffer.write32(('F') | ('W' << 8) | ('D' << 16) | (version << 24));

            // Encode one kDebugID tag.
            buffer.write32(flash.swf.DebugTags_Fields.kDebugID);
            buffer.write(debugID);

            // Encode the kDebugScript and kDebugOffset tags.
            // The kDebugScript tags are in module number order (1,2,3,...).
            // After each one of these are the associated kDebugOffset tags
            // for that module number, in ascending order
            // by line number and byte offset.

            SupportClass.CollectionsSupport.Sort(debugScripts, null);
            int id = 0;

            System.Collections.IEnumerator debugScriptIter = debugScripts.GetEnumerator();
            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            while (debugScriptIter.MoveNext())
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                DebugScript debugScript = (DebugScript)debugScriptIter.Current;
                id++;

                buffer.write32(flash.swf.DebugTags_Fields.kDebugScript);
                buffer.write32(id);
                buffer.write32(debugScript.bitmap);
                buffer.writeString(debugScript.name);
                buffer.writeString(debugScript.text);

                SupportClass.CollectionsSupport.Sort(debugScript.debugOffsets, null);
                System.Collections.IEnumerator debugOffsetIter = debugScript.debugOffsets.GetEnumerator();
                //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
                while (debugOffsetIter.MoveNext())
                {
                    //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                    DebugOffset debugOffset = (DebugOffset)debugOffsetIter.Current;

                    buffer.write32(flash.swf.DebugTags_Fields.kDebugOffset);
                    buffer.write32(id);
                    buffer.write32(debugOffset.lineNumber);
                    buffer.write32(debugOffset.byteOffset);
                }
            }

            // Encode the kDebugRegister tags
            SupportClass.CollectionsSupport.Sort(debugRegisters, null);
            System.Collections.IEnumerator itr = debugRegisters.GetEnumerator();
            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            while (itr.MoveNext())
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                DebugRegisters debug = (DebugRegisters)itr.Current;
                int            size  = debug.registerNumbers.Length;

                buffer.write32(flash.swf.DebugTags_Fields.kDebugRegisters);
                buffer.write32(debug.offset);
                buffer.writeUI8(size);
                for (int i = 0; i < debug.registerNumbers.Length; i++)
                {
                    buffer.writeUI8(debug.registerNumbers[i]);
                    buffer.writeString(debug.variableNames[i]);
                }
            }

            // Encode the kDebugBreakpoint tags
            SupportClass.CollectionsSupport.Sort(debugBreakpoints, null);
            System.Collections.IEnumerator debugBreakpointIterator = debugBreakpoints.GetEnumerator();
            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            while (debugBreakpointIterator.MoveNext())
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                DebugBreakpoint debugBreakpoint = (DebugBreakpoint)debugBreakpointIterator.Current;

                buffer.write32(flash.swf.DebugTags_Fields.kDebugBreakpoint);
                buffer.write32(debugBreakpoint.offset);
            }
        }