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

📄 fsdefinetext2.java

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