📄 fsshapestyle.java
字号:
buffer.append(name());
if (depth > 0)
{
buffer.append(": { ");
Transform.append(buffer, "moveX", moveX);
Transform.append(buffer, "moveY", moveY);
Transform.append(buffer, "fillStyle", fillStyle);
Transform.append(buffer, "altFillStyle", altFillStyle);
Transform.append(buffer, "lineStyle", lineStyle);
Transform.append(buffer, "fillStyles", fillStyles, depth);
Transform.append(buffer, "lineStyles", lineStyles, depth);
buffer.append("}");
}
}
public int length(FSCoder coder)
{
boolean _containsStyles = containsStyles();
boolean _containsLineStyle = containsLineStyle();
boolean _containsAltFillStyle = containsAltFillStyle();
boolean _containsFillStyle = containsFillStyle();
boolean _containsMove = containsMove();
int numberOfBits = 0;
numberOfBits += 6;
if (_containsMove)
{
int _moveFieldSize = FSCoder.size(new int[] {moveX, moveY}, true);
numberOfBits += 5 + _moveFieldSize*2;
}
numberOfBits += (_containsFillStyle) ? coder.context[FSCoder.NumberOfFillBits] : 0;
numberOfBits += (_containsAltFillStyle) ? coder.context[FSCoder.NumberOfFillBits] : 0;
numberOfBits += (_containsLineStyle) ? coder.context[FSCoder.NumberOfLineBits] : 0;
coder.context[FSCoder.NumberOfShapeBits] += numberOfBits;
if (_containsStyles)
{
int numberOfFillBits = FSCoder.size(fillStyles.size(), false);
int numberOfLineBits = FSCoder.size(lineStyles.size(), false);
boolean countExtended = coder.context[FSCoder.ArrayCountExtended] != 0;
int numberOfStyleBits = 0;
int flushBits = coder.context[FSCoder.NumberOfShapeBits];
numberOfStyleBits += (flushBits % 8 > 0) ? 8 - (flushBits % 8) : 0;
numberOfStyleBits += (countExtended && fillStyles.size() >= 255) ? 24 : 8;
for (Iterator styleIterator = fillStyles.iterator(); styleIterator.hasNext();)
numberOfStyleBits += ((FSTransformObject)styleIterator.next()).length(coder)*8;
numberOfStyleBits += (countExtended && lineStyles.size() >= 255) ? 24 : 8;
for (Iterator styleIterator = lineStyles.iterator(); styleIterator.hasNext();)
numberOfStyleBits += ((FSTransformObject)styleIterator.next()).length(coder)*8;
numberOfStyleBits += 8;
coder.context[FSCoder.NumberOfFillBits] = numberOfFillBits;
coder.context[FSCoder.NumberOfLineBits] = numberOfLineBits;
coder.context[FSCoder.NumberOfShapeBits] += numberOfStyleBits;
numberOfBits += numberOfStyleBits;
}
return numberOfBits;
}
public void encode(FSCoder coder)
{
boolean _containsStyles = containsStyles();
boolean _containsLineStyle = containsLineStyle();
boolean _containsAltFillStyle = containsAltFillStyle();
boolean _containsFillStyle = containsFillStyle();
boolean _containsMove = containsMove();
int numberOfFillBits = coder.context[FSCoder.NumberOfFillBits];
int numberOfLineBits = coder.context[FSCoder.NumberOfLineBits];
coder.writeBits(0, 1);
coder.writeBits(_containsStyles ? 1 : 0, 1);
coder.writeBits(_containsLineStyle ? 1 : 0, 1);
coder.writeBits(_containsAltFillStyle ? 1 : 0, 1);
coder.writeBits(_containsFillStyle ? 1 : 0, 1);
coder.writeBits(_containsMove ? 1 : 0, 1);
if (_containsMove)
{
int _moveFieldSize = FSCoder.size(new int[] { moveX, moveY }, true);
coder.writeBits(_moveFieldSize, 5);
coder.writeBits(moveX, _moveFieldSize);
coder.writeBits(moveY, _moveFieldSize);
}
if (_containsFillStyle)
coder.writeBits(fillStyle, numberOfFillBits);
if (_containsAltFillStyle)
coder.writeBits(altFillStyle, numberOfFillBits);
if (_containsLineStyle)
coder.writeBits(lineStyle, numberOfLineBits);
if (_containsStyles)
{
boolean countExtended = coder.context[FSCoder.ArrayCountExtended] != 0;
coder.alignToByte();
if (countExtended && fillStyles.size() >= 255)
{
coder.writeBits(0xFF, 8);
coder.writeBits(fillStyles.size(), 16);
}
else
{
coder.writeBits(fillStyles.size(), 8);
}
for (Iterator styleIterator = fillStyles.iterator(); styleIterator.hasNext();)
((FSTransformObject)styleIterator.next()).encode(coder);
if (countExtended && lineStyles.size() >= 255)
{
coder.writeBits(0xFF, 8);
coder.writeBits(lineStyles.size(), 16);
}
else
{
coder.writeBits(lineStyles.size(), 8);
}
for (Iterator styleIterator = lineStyles.iterator(); styleIterator.hasNext();)
((FSTransformObject)styleIterator.next()).encode(coder);
numberOfFillBits = FSCoder.size(fillStyles.size(), false);
numberOfLineBits = FSCoder.size(lineStyles.size(), false);
coder.writeBits(numberOfFillBits, 4);
coder.writeBits(numberOfLineBits, 4);
// Update the stream with the new numbers of line and fill bits
coder.context[FSCoder.NumberOfFillBits] = numberOfFillBits;
coder.context[FSCoder.NumberOfLineBits] = numberOfLineBits;
}
}
public void decode(FSCoder coder)
{
boolean containsStyles = false;
boolean containsLineStyle = false;
boolean containsAltFillStyle = false;
boolean containsFillStyle = false;
boolean containsMove = false;
int numberOfFillBits = coder.context[FSCoder.NumberOfFillBits];
int numberOfLineBits = coder.context[FSCoder.NumberOfLineBits];
/* shapeType */ coder.readBits(1, false);
containsStyles = coder.readBits(1, false) != 0 ? true : false;
containsLineStyle = coder.readBits(1, false) != 0 ? true : false;
containsAltFillStyle = coder.readBits(1, false) != 0 ? true : false;
containsFillStyle = coder.readBits(1, false) != 0 ? true : false;
containsMove = coder.readBits(1, false) != 0 ? true : false;
if (containsMove)
{
int moveFieldSize = coder.readBits(5, false);
moveX = coder.readBits(moveFieldSize, true);
moveY = coder.readBits(moveFieldSize, true);
}
if (containsFillStyle)
fillStyle = coder.readBits(numberOfFillBits, false);
if (containsAltFillStyle)
altFillStyle = coder.readBits(numberOfFillBits, false);
if (containsLineStyle)
lineStyle = coder.readBits(numberOfLineBits, false);
if (containsStyles)
{
coder.alignToByte();
fillStyles = new ArrayList();
lineStyles = new ArrayList();
int fillStyleCount = coder.readWord(1, false);
if (coder.context[FSCoder.ArrayCountExtended] != 0 && fillStyleCount == 0xFF)
fillStyleCount = coder.readWord(2, false);
fillStyles = new ArrayList();
for (int i=0; i<fillStyleCount; i++)
{
switch (coder.scanWord(1, false))
{
case FSFillStyle.Solid:
fillStyles.add(new FSSolidFill(coder));
break;
case FSFillStyle.Linear:
fillStyles.add(new FSGradientFill(coder));
break;
case FSFillStyle.Radial:
fillStyles.add(new FSGradientFill(coder));
break;
case FSFillStyle.Tiled:
fillStyles.add(new FSBitmapFill(coder));
break;
case FSFillStyle.Clipped:
fillStyles.add(new FSBitmapFill(coder));
break;
case FSFillStyle.Unsmoothed_Tiled:
fillStyles.add(new FSBitmapFill(coder));
break;
case FSFillStyle.Unsmoothed_Clipped:
fillStyles.add(new FSBitmapFill(coder));
break;
default:
break;
}
}
int lineStyleCount = coder.readWord(1, false);
if (coder.context[FSCoder.ArrayCountExtended] != 0 && lineStyleCount == 0xFF)
lineStyleCount = coder.readWord(2, false);
for (int i=0; i<lineStyleCount; i++)
lineStyles.add(new FSSolidLine(coder));
numberOfFillBits = coder.readBits(4, false);
numberOfLineBits = coder.readBits(4, false);
coder.context[FSCoder.NumberOfFillBits] = numberOfFillBits;
coder.context[FSCoder.NumberOfLineBits] = numberOfLineBits;
}
}
private boolean containsStyles()
{
return (lineStyles != null && lineStyles.size() > 0) || (fillStyles != null && fillStyles.size() > 0);
}
private boolean containsLineStyle()
{
return lineStyle != Transform.VALUE_NOT_SET;
}
private boolean containsAltFillStyle()
{
return altFillStyle != Transform.VALUE_NOT_SET;
}
private boolean containsFillStyle()
{
return fillStyle != Transform.VALUE_NOT_SET;
}
private boolean containsMove()
{
return moveX != Transform.VALUE_NOT_SET && moveY != Transform.VALUE_NOT_SET;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -