⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsshapestyle.java

📁 利用opensource的开源jar实现生成flash文件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        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 + -