📄 fsdefinemorphshape.java
字号:
{
fillStyles = anArray;
}
/** Sets the array of morph line styles.
@param anArray an array of FSMorphLineStyle objects.
*/
public void setLineStyles(ArrayList anArray)
{
lineStyles = anArray;
}
/** Sets the starting shape.
@param aShape the shape at the start of the morphing process.
*/
public void setStartShape(FSShape aShape)
{
startShape = aShape;
}
/** Sets the ending shape.
@param aShape the shape at the end of the morphing process.
*/
public void setEndShape(FSShape aShape)
{
endShape = aShape;
}
public Object clone()
{
FSDefineMorphShape anObject = (FSDefineMorphShape)super.clone();
anObject.startBounds = (startBounds != null) ? (FSBounds)startBounds.clone() : null;
anObject.endBounds = (endBounds != null) ? (FSBounds)endBounds.clone() : null;
anObject.fillStyles = new ArrayList();
for (Iterator i = fillStyles.iterator(); i.hasNext();)
anObject.fillStyles.add(((FSFillStyle)i.next()).clone());
anObject.lineStyles = new ArrayList();
for (Iterator i = lineStyles.iterator(); i.hasNext();)
anObject.lineStyles.add(((FSLineStyle)i.next()).clone());
anObject.startShape = (startShape != null) ? (FSShape)startShape.clone() : null;
anObject.endShape = (endShape != null) ? (FSShape)endShape.clone() : null;
return anObject;
}
public boolean equals(Object anObject)
{
boolean result = false;
if (super.equals(anObject))
{
FSDefineMorphShape typedObject = (FSDefineMorphShape)anObject;
if (startBounds != null)
result = startBounds.equals(typedObject.startBounds);
else
result = startBounds == typedObject.startBounds;
if (endBounds != null)
result = result && endBounds.equals(typedObject.endBounds);
else
result = result && endBounds == typedObject.endBounds;
if (fillStyles != null)
result = result && fillStyles.equals(typedObject.fillStyles);
else
result = result && fillStyles == typedObject.fillStyles;
if (lineStyles != null)
result = result && lineStyles.equals(typedObject.lineStyles);
else
result = result && lineStyles == typedObject.lineStyles;
if (startShape != null)
result = result && startShape.equals(typedObject.startShape);
else
result = result && startShape == typedObject.startShape;
if (endShape != null)
result = result && endShape.equals(typedObject.endShape);
else
result = result && endShape == typedObject.endShape;
}
return result;
}
public void appendDescription(StringBuffer buffer, int depth)
{
buffer.append(name());
if (depth > 0)
{
buffer.append(": { ");
Transform.append(buffer, "startBounds", startBounds, depth);
Transform.append(buffer, "endBounds", endBounds, depth);
Transform.append(buffer, "fillStyles", fillStyles, depth);
Transform.append(buffer, "lineStyles", lineStyles, depth);
Transform.append(buffer, "startShape", startShape, depth);
Transform.append(buffer, "endShape", endShape, depth);
buffer.append("}");
}
}
public int length(FSCoder coder)
{
int numberOfFillBits = FSCoder.size(fillStyles.size(), false);
int numberOfLineBits = FSCoder.size(lineStyles.size(), false);
super.length(coder);
coder.context[FSCoder.TransparentColors] = 1;
length += startBounds.length(coder);
length += endBounds.length(coder);
length += 4;
length += (fillStyles.size() >= 255) ? 3 : 1;
for (Iterator styleIterator = fillStyles.iterator(); styleIterator.hasNext();)
length += ((FSTransformObject)styleIterator.next()).length(coder);
length += (lineStyles.size() >= 255) ? 3 : 1;
for (Iterator styleIterator = lineStyles.iterator(); styleIterator.hasNext();)
length += ((FSTransformObject)styleIterator.next()).length(coder);
coder.context[FSCoder.ArrayCountExtended] = 1;
coder.context[FSCoder.NumberOfFillBits] = numberOfFillBits;
coder.context[FSCoder.NumberOfLineBits] = numberOfLineBits;
length += startShape.length(coder);
// Number of Fill and Line bits is zero for end shape.
coder.context[FSCoder.NumberOfFillBits] = 0;
coder.context[FSCoder.NumberOfLineBits] = 0;
length += endShape.length(coder);
coder.context[FSCoder.ArrayCountExtended] = 0;
coder.context[FSCoder.TransparentColors] = 0;
return length;
}
public void encode(FSCoder coder)
{
int numberOfFillBits = FSCoder.size(fillStyles.size(), false);
int numberOfLineBits = FSCoder.size(lineStyles.size(), false);
super.encode(coder);
coder.context[FSCoder.TransparentColors] = 1;
startBounds.encode(coder);
endBounds.encode(coder);
int offsetStart = coder.getPointer();
coder.writeWord(0, 4);
if (fillStyles.size() >= 255)
{
coder.writeWord(0xFF, 1);
coder.writeWord(fillStyles.size(), 2);
}
else
{
coder.writeWord(fillStyles.size(), 1);
}
for (Iterator styleIterator = fillStyles.iterator(); styleIterator.hasNext();)
((FSTransformObject)styleIterator.next()).encode(coder);
if (lineStyles.size() >= 255)
{
coder.writeWord(0xFF, 1);
coder.writeWord(lineStyles.size(), 2);
}
else
{
coder.writeWord(lineStyles.size(), 1);
}
for (Iterator styleIterator = lineStyles.iterator(); styleIterator.hasNext();)
((FSTransformObject)styleIterator.next()).encode(coder);
coder.context[FSCoder.ArrayCountExtended] = 1;
coder.context[FSCoder.NumberOfFillBits] = numberOfFillBits;
coder.context[FSCoder.NumberOfLineBits] = numberOfLineBits;
startShape.encode(coder);
int offsetEnd = (coder.getPointer() - offsetStart) >> 3;
int currentCursor = coder.getPointer();
coder.setPointer(offsetStart);
coder.writeWord(offsetEnd-4, 4);
coder.setPointer(currentCursor);
// Number of Fill and Line bits is zero for end shape.
coder.context[FSCoder.NumberOfFillBits] = 0;
coder.context[FSCoder.NumberOfLineBits] = 0;
endShape.encode(coder);
coder.context[FSCoder.ArrayCountExtended] = 0;
coder.context[FSCoder.TransparentColors] = 0;
coder.endObject(name());
}
public void decode(FSCoder coder)
{
int fillStyleCount = 0;
int lineStyleCount = 0;
super.decode(coder);
coder.context[FSCoder.TransparentColors] = 1;
coder.context[FSCoder.ArrayCountExtended] = 1;
int start = coder.getPointer()-16;
startBounds = new FSBounds(coder);
endBounds = new FSBounds(coder);
int offset = coder.readWord(4, false);
int first = coder.getPointer();
fillStyleCount = coder.readWord(1, false);
if (coder.context[FSCoder.ArrayCountExtended] != 0 && fillStyleCount == 0xFF)
fillStyleCount = coder.readWord(2, false);
fillStyles = new ArrayList(fillStyleCount);
for (int i=0; i<fillStyleCount; i++)
{
switch (coder.scanWord(1, false))
{
case FSFillStyle.Solid:
fillStyles.add(new FSMorphSolidFill(coder));
break;
case FSFillStyle.Linear:
fillStyles.add(new FSMorphGradientFill(coder));
break;
case FSFillStyle.Radial:
fillStyles.add(new FSMorphGradientFill(coder));
break;
case FSFillStyle.Tiled:
fillStyles.add(new FSMorphBitmapFill(coder));
break;
case FSFillStyle.Clipped:
fillStyles.add(new FSMorphBitmapFill(coder));
break;
case FSFillStyle.Unsmoothed_Tiled:
fillStyles.add(new FSBitmapFill(coder));
break;
case FSFillStyle.Unsmoothed_Clipped:
fillStyles.add(new FSBitmapFill(coder));
break;
default:
break;
}
}
lineStyleCount = coder.readWord(1, false);
if (coder.context[FSCoder.ArrayCountExtended] != 0 && lineStyleCount == 0xFF)
lineStyleCount = coder.readWord(2, false);
lineStyles = new ArrayList(lineStyleCount);
for (int i=0; i<lineStyleCount; i++)
lineStyles.add(new FSMorphSolidLine(coder));
int bytesDecoded = (coder.getPointer()-first) >> 3;
startShape = new FSShape(coder, offset-bytesDecoded);
bytesDecoded = (coder.getPointer()-start) >> 3;
endShape = new FSShape(coder, length-bytesDecoded);
coder.context[FSCoder.TransparentColors] = 0;
coder.context[FSCoder.ArrayCountExtended] = 0;
coder.endObject(name());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -