📄 fsdefinetext2.java
字号:
public void setTransform(FSCoordTransform aTransform)
{
transform = aTransform;
}
/** Sets the array of text records that define the text to be displayed.
@param anArray an array of FSText objects that define the text to be displayed.
*/
public void setObjects(ArrayList anArray)
{
objects = anArray;
}
public Object clone()
{
FSDefineText2 anObject = (FSDefineText2)super.clone();
anObject.bounds = (bounds != null) ? (FSBounds)bounds.clone() : null;
anObject.transform = (transform != null) ? (FSCoordTransform)transform.clone() : null;
anObject.objects = new ArrayList(objects.size());
for (Iterator i = objects.iterator(); i.hasNext();)
anObject.objects.add(((FSText)i.next()).clone());
return anObject;
}
public boolean equals(Object anObject)
{
boolean result = false;
if (super.equals(anObject))
{
FSDefineText2 typedObject = (FSDefineText2)anObject;
if (bounds != null)
result = bounds.equals(typedObject.bounds);
else
result = bounds == typedObject.bounds;
if (transform != null)
result = result && transform.equals(typedObject.transform);
else
result = result && transform == typedObject.transform;
if (objects != null)
result = result && objects.equals(typedObject.objects);
else
result = result && objects == typedObject.objects;
}
return result;
}
public void appendDescription(StringBuffer buffer, int depth)
{
buffer.append(name());
if (depth > 0)
{
buffer.append(": { ");
Transform.append(buffer, "identifier", identifier);
Transform.append(buffer, "bounds", bounds, depth);
Transform.append(buffer, "transform", transform, depth);
Transform.append(buffer, "objects", objects, depth);
buffer.append("}");
}
}
public int length(FSCoder coder)
{
super.length(coder);
coder.context[FSCoder.TransparentColors] = 1;
coder.context[FSCoder.NumberOfGlyphBits] = glyphBits();
coder.context[FSCoder.NumberOfAdvanceBits] = advanceBits();
length += bounds.length(coder);
length += transform.length(coder);
length += 2;
for (Iterator recordIterator = objects.iterator(); recordIterator.hasNext();)
length += ((FSTransformObject)recordIterator.next()).length(coder);
length += 1;
coder.context[FSCoder.TransparentColors] = 0;
coder.context[FSCoder.NumberOfGlyphBits] = 0;
coder.context[FSCoder.NumberOfAdvanceBits] = 0;
return length;
}
public void encode(FSCoder coder)
{
super.encode(coder);
coder.context[FSCoder.TransparentColors] = 1;
coder.context[FSCoder.NumberOfGlyphBits] = glyphBits();
coder.context[FSCoder.NumberOfAdvanceBits] = advanceBits();
bounds.encode(coder);
transform.encode(coder);
coder.writeWord(coder.context[FSCoder.NumberOfGlyphBits], 1);
coder.writeWord(coder.context[FSCoder.NumberOfAdvanceBits], 1);
for (Iterator recordIterator = objects.iterator(); recordIterator.hasNext();)
((FSTransformObject)recordIterator.next()).encode(coder);
coder.writeWord(0, 1);
coder.context[FSCoder.TransparentColors] = 0;
coder.context[FSCoder.NumberOfGlyphBits] = 0;
coder.context[FSCoder.NumberOfAdvanceBits] = 0;
coder.endObject(name());
}
public void decode(FSCoder coder)
{
int glyphBits = 0;
int advanceBits = 0;
super.decode(coder);
// Mark the start of the tag body
/* location */ coder.getPointer();
bounds = new FSBounds(coder);
// This code is used to get round a bug in Flash - sometimes 16,
// 8-bit zeroes are written out before the transform. The root
// cause in Flash is unknown but seems to be related to the
// bounds not being set - all values are zero.
boolean bytesAreZero = true;
int start = coder.getPointer();
for (int i=0; i<16; i++)
{
if (coder.scanWord(1, false) != 0)
bytesAreZero = false;
coder.adjustPointer(8);
}
coder.setPointer(start);
if (bytesAreZero)
{
for (int i=0; i<16; i++)
{
coder.scanWord(1, false);
coder.adjustPointer(8);
}
}
// Back to reading the rest of the tag
transform = new FSCoordTransform(coder);
glyphBits = coder.readWord(1, false);
advanceBits = coder.readWord(1, false);
coder.context[FSCoder.TransparentColors] = 1;
coder.context[FSCoder.NumberOfGlyphBits] = glyphBits;
coder.context[FSCoder.NumberOfAdvanceBits] = advanceBits;
/*
* Set the instance variable directly since Flash files can contain
* FSDefineText objects with no text records - this appears to be a
* bug in the Flash file.
*/
objects = new ArrayList();
while (coder.scanBits(8, false) != 0)
objects.add(new FSText(coder));
coder.readBits(8, false);
coder.context[FSCoder.TransparentColors] = 0;
coder.context[FSCoder.NumberOfGlyphBits] = 0;
coder.context[FSCoder.NumberOfAdvanceBits] = 0;
coder.endObject(name());
}
private int glyphBits()
{
int numberOfBits = 0;
for (Iterator recordIterator = objects.iterator(); recordIterator.hasNext();)
numberOfBits = Math.max(numberOfBits, ((FSText)recordIterator.next()).glyphBits());
return numberOfBits;
}
private int advanceBits()
{
int numberOfBits = 0;
for (Iterator recordIterator = objects.iterator(); recordIterator.hasNext();)
numberOfBits = Math.max(numberOfBits, ((FSText)recordIterator.next()).advanceBits());
return numberOfBits;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -