public virtual AsDisplayObject removeChildAt(int index, bool dispose)
 {
     if (index >= 0 && index < getNumChildren())
     {
         AsDisplayObject child = mChildren[index];
         child.dispatchEventWith(AsEvent.REMOVED, true);
         if (getStage() != null)
         {
             AsDisplayObjectContainer container = child as AsDisplayObjectContainer;
             if (container != null)
             {
                 container.broadcastEventWith(AsEvent.REMOVED_FROM_STAGE);
             }
             else
             {
                 child.dispatchEventWith(AsEvent.REMOVED_FROM_STAGE);
             }
         }
         child.setParent(null);
         index = mChildren.indexOf(child);
         if (index >= 0)
         {
             mChildren.splice(index, (uint)(1));
         }
         if (dispose)
         {
             child.dispose();
         }
         return(child);
     }
     else
     {
         throw new AsRangeError("Invalid child index");
     }
 }
 public AsTextField(int width, int height, String text, String fontName, float fontSize, uint color, bool bold)
 {
     mText     = text != null ? text : "";
     mFontSize = fontSize;
     mColor    = color;
     mHAlign   = AsHAlign.CENTER;
     mVAlign   = AsVAlign.CENTER;
     mBorder   = null;
     mKerning  = true;
     mBold     = bold;
     this.setFontName(fontName);
     mHitArea = new AsQuad(width, height);
     mHitArea.setAlpha(0.0f);
     addChild(mHitArea);
     addEventListener(AsEvent.FLATTEN, onFlatten);
 }
 public AsTextField(int width, int height, String text, String fontName, float fontSize, uint color, bool bold)
 {
     mText = text != null ? text : "";
     mFontSize = fontSize;
     mColor = color;
     mHAlign = AsHAlign.CENTER;
     mVAlign = AsVAlign.CENTER;
     mBorder = null;
     mKerning = true;
     mBold = bold;
     this.setFontName(fontName);
     mHitArea = new AsQuad(width, height);
     mHitArea.setAlpha(0.0f);
     addChild(mHitArea);
     addEventListener(AsEvent.FLATTEN, onFlatten);
 }
        public virtual void setParent(AsDisplayObjectContainer _value)
        {
            AsDisplayObject ancestor = _value;

            while (ancestor != this && ancestor != null)
            {
                ancestor = ancestor.mParent;
            }
            if (ancestor == this)
            {
                throw new AsArgumentError("An object cannot be added as a child to itself or one " + "of its children (or children's children, etc.)");
            }
            else
            {
                mParent = _value;
            }
        }
        private void getChildEventListeners(AsDisplayObject _object, String eventType, AsVector <AsDisplayObject> listeners)
        {
            AsDisplayObjectContainer container = _object as AsDisplayObjectContainer;

            if (_object.hasEventListener(eventType))
            {
                listeners.push(_object);
            }
            if (container != null)
            {
                AsVector <AsDisplayObject> children = container.mChildren;
                int numChildren = (int)(children.getLength());
                int i           = 0;
                for (; i < numChildren; ++i)
                {
                    getChildEventListeners(children[i], eventType, listeners);
                }
            }
        }
 public virtual void setBorder(bool _value)
 {
     if (_value && mBorder == null)
     {
         mBorder = new AsSprite();
         addChild(mBorder);
         int i = 0;
         for (; i < 4; ++i)
         {
             mBorder.addChild(new AsQuad(1.0f, 1.0f));
         }
         updateBorder();
     }
     else
     {
         if (!_value && mBorder != null)
         {
             mBorder.removeFromParent(true);
             mBorder = null;
         }
     }
 }
        public virtual AsDisplayObject addChildAt(AsDisplayObject child, int index)
        {
            int numChildren = (int)(mChildren.getLength());

            if (index >= 0 && index <= numChildren)
            {
                child.removeFromParent();
                if (index == numChildren)
                {
                    mChildren.push(child);
                }
                else
                {
                    mChildren.splice(index, (uint)(0), child);
                }
                child.setParent(this);
                child.dispatchEventWith(AsEvent.ADDED, true);
                if (getStage() != null)
                {
                    AsDisplayObjectContainer container = child as AsDisplayObjectContainer;
                    if (container != null)
                    {
                        container.broadcastEventWith(AsEvent.ADDED_TO_STAGE);
                    }
                    else
                    {
                        child.dispatchEventWith(AsEvent.ADDED_TO_STAGE);
                    }
                }
                return(child);
            }
            else
            {
                throw new AsRangeError("Invalid child index");
            }
        }
        private static int compileObject(AsDisplayObject _object, AsVector <AsQuadBatch> quadBatches, int quadBatchID, AsMatrix transformationMatrix, float alpha, String blendMode, bool ignoreCurrentFilter)
        {
            int         i                      = 0;
            AsQuadBatch quadBatch              = null;
            bool        isRootObject           = false;
            float       objectAlpha            = _object.getAlpha();
            AsDisplayObjectContainer container = _object as AsDisplayObjectContainer;
            AsQuad           quad              = _object as AsQuad;
            AsQuadBatch      batch             = _object as AsQuadBatch;
            AsFragmentFilter filter            = _object.getFilter();

            if (quadBatchID == -1)
            {
                isRootObject = true;
                quadBatchID  = 0;
                objectAlpha  = 1.0f;
                blendMode    = _object.getBlendMode();
                if (quadBatches.getLength() == 0)
                {
                    quadBatches.push(new AsQuadBatch());
                }
                else
                {
                    quadBatches[0].reset();
                }
            }
            if (filter != null && !ignoreCurrentFilter)
            {
                if (filter.getMode() == AsFragmentFilterMode.ABOVE)
                {
                    quadBatchID = compileObject(_object, quadBatches, quadBatchID, transformationMatrix, alpha, blendMode, true);
                }
                quadBatchID = compileObject(filter.compile(_object), quadBatches, quadBatchID, transformationMatrix, alpha, blendMode);
                if (filter.getMode() == AsFragmentFilterMode.BELOW)
                {
                    quadBatchID = compileObject(_object, quadBatches, quadBatchID, transformationMatrix, alpha, blendMode, true);
                }
            }
            else
            {
                if (container != null)
                {
                    int      numChildren = container.getNumChildren();
                    AsMatrix childMatrix = new AsMatrix();
                    for (i = 0; i < numChildren; ++i)
                    {
                        AsDisplayObject child        = container.getChildAt(i);
                        bool            childVisible = child.getAlpha() != 0.0f && child.getVisible() && child.getScaleX() != 0.0f && child.getScaleY() != 0.0f;
                        if (childVisible)
                        {
                            String childBlendMode = child.getBlendMode() == AsBlendMode.AUTO ? blendMode : child.getBlendMode();
                            childMatrix.copyFrom(transformationMatrix);
                            AsRenderSupport.transformMatrixForObject(childMatrix, child);
                            quadBatchID = compileObject(child, quadBatches, quadBatchID, childMatrix, alpha * objectAlpha, childBlendMode);
                        }
                    }
                }
                else
                {
                    if (quad != null || batch != null)
                    {
                        AsTexture texture   = null;
                        String    smoothing = null;
                        bool      tinted    = false;
                        int       numQuads  = 0;
                        if (quad != null)
                        {
                            AsImage image = quad as AsImage;
                            texture = image != null?image.getTexture() : null;

                            smoothing = image != null?image.getSmoothing() : null;

                            tinted   = quad.getTinted();
                            numQuads = 1;
                        }
                        else
                        {
                            texture   = batch.mTexture;
                            smoothing = batch.mSmoothing;
                            tinted    = batch.mTinted;
                            numQuads  = batch.mNumQuads;
                        }
                        quadBatch = quadBatches[quadBatchID];
                        if (quadBatch.isStateChange(tinted, alpha * objectAlpha, texture, smoothing, blendMode, numQuads))
                        {
                            quadBatchID++;
                            if (quadBatches.getLength() <= quadBatchID)
                            {
                                quadBatches.push(new AsQuadBatch());
                            }
                            quadBatch = quadBatches[quadBatchID];
                            quadBatch.reset();
                        }
                        if (quad != null)
                        {
                            quadBatch.addQuad(quad, alpha, texture, smoothing, transformationMatrix, blendMode);
                        }
                        else
                        {
                            quadBatch.addQuadBatch(batch, alpha, transformationMatrix, blendMode);
                        }
                    }
                    else
                    {
                        throw new AsError("Unsupported display object: " + AsGlobal.getQualifiedClassName(_object));
                    }
                }
            }
            if (isRootObject)
            {
                for (i = (int)(quadBatches.getLength() - 1); i > quadBatchID; --i)
                {
                    quadBatches.pop().dispose();
                }
            }
            return(quadBatchID);
        }
 public virtual void setParent(AsDisplayObjectContainer _value)
 {
     AsDisplayObject ancestor = _value;
     while(ancestor != this && ancestor != null)
     {
         ancestor = ancestor.mParent;
     }
     if(ancestor == this)
     {
         throw new AsArgumentError("An object cannot be added as a child to itself or one " + "of its children (or children's children, etc.)");
     }
     else
     {
         mParent = _value;
     }
 }
 public virtual void setBorder(bool _value)
 {
     if(_value && mBorder == null)
     {
         mBorder = new AsSprite();
         addChild(mBorder);
         int i = 0;
         for (; i < 4; ++i)
         {
             mBorder.addChild(new AsQuad(1.0f, 1.0f));
         }
         updateBorder();
     }
     else
     {
         if(!_value && mBorder != null)
         {
             mBorder.removeFromParent(true);
             mBorder = null;
         }
     }
 }