Package flash.swf.tags

Source Code of flash.swf.tags.DefineSprite

/*
*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*/

package flash.swf.tags;

import flash.swf.Tag;
import flash.swf.TagHandler;
import flash.swf.Header;
import flash.swf.types.TagList;

import java.util.ArrayList;
import java.util.Iterator;

/**
* Represents a DefineSprite SWF tag.
*
* @author Clement Wong
*/
public class DefineSprite extends DefineTag
{
    public DefineSprite()
  {
    super(stagDefineSprite);
        this.tagList = new TagList();
  }

    public DefineSprite(String name)
    {
        this();
        this.name = name;
    }

    public DefineSprite(DefineSprite source) // semi-shallow copy
    {
        this();
        this.name = source.name;
        this.tagList.tags.addAll( source.tagList.tags );
        this.initAction = source.initAction;
        this.framecount = source.framecount;
        this.header = source.header;
        if (source.scalingGrid != null)
        {
            scalingGrid = new DefineScalingGrid();
            scalingGrid.scalingTarget = this;
            scalingGrid.rect.xMin = source.scalingGrid.rect.xMin;
            scalingGrid.rect.xMax = source.scalingGrid.rect.xMax;
            scalingGrid.rect.yMin = source.scalingGrid.rect.yMin;
            scalingGrid.rect.yMax = source.scalingGrid.rect.yMax;
        }
    }

    public void visit(TagHandler h)
  {
    h.defineSprite(this);
  }

  public Iterator<Tag> getReferences()
    {
    ArrayList<Tag> list = new ArrayList<Tag>();
    for (Iterator i = tagList.tags.iterator(); i.hasNext();)
    {
      Tag tag = (Tag) i.next();
      for (Iterator<Tag> j = tag.getReferences(); j.hasNext();)
      {
        list.add(j.next());
      }
    }
    return list.iterator();
    }

  public int framecount;
  public TagList tagList;
    public DoInitAction initAction;
    public DefineScalingGrid scalingGrid;

    // the header of the SWF this sprite originally came from.  Tells us its framerate and SWF version.
    public Header header;

    // This is a utility field that helps creating a display list but is not
    // involved in SWF encoding/decoding of DefineSprite
    public int depthCounter;

    public boolean equals(Object object)
    {
        boolean isEqual = false;

        if (super.equals(object) && (object instanceof DefineSprite))
        {
            DefineSprite defineSprite = (DefineSprite) object;

            if ( (defineSprite.framecount == this.framecount) &&
                    equals(defineSprite.tagList, this.tagList) &&
                    equals(defineSprite.scalingGrid, this.scalingGrid) &&
                    equals(defineSprite.initAction, this.initAction))
            {
                isEqual = true;
            }
        }

        return isEqual;
    }

    public int hashCode()
    {
        int hashCode = super.hashCode();

        if (name != null)
        {
            hashCode += name.hashCode();
        }

        hashCode += DefineTag.PRIME * framecount;
        if (tagList.tags!=null) {
          hashCode += DefineTag.PRIME * tagList.tags.size();
        }
        if (initAction !=null) {
          if (initAction.actionList!=null) {
            hashCode += DefineTag.PRIME * initAction.actionList.size();
          }
        }
        return hashCode;
    }

    public String toString()
    {
        StringBuilder stringBuffer = new StringBuilder();

        stringBuffer.append("DefineSprite: name = " + name +
                            ", framecount = " + framecount +
                            ", tagList = " + tagList +
                            ", initAction = " + initAction);

        return stringBuffer.toString();
    }

/*
    private void fitRect(Rect inner, Rect outer)
    {
        if (outer.xMin == 0 && outer.xMax == 0 && outer.yMin==0 && outer.yMax==0)
        {
            outer.xMin = inner.xMin;
            outer.xMax = inner.xMax;
            outer.yMin = inner.yMin;
            outer.yMax = inner.yMax;
        }
        else
        {
            outer.xMin = inner.xMin < outer.xMin ? inner.xMin : outer.xMin;
            outer.yMin = inner.yMin < outer.yMin ? inner.yMin : outer.yMin;
            outer.xMax = inner.xMax > outer.xMax ? inner.xMax : outer.xMax;
            outer.yMax = inner.yMax > outer.yMax ? inner.yMax : outer.yMax;
        }
    }

    public Rect getBounds()
    {
        Iterator it = timeline.tags.iterator();
        Rect bounds = new Rect();
        loop: while (it.hasNext())
        {
            Tag t = (Tag) it.next();
            switch (t.code)
            {
            case stagShowFrame:
                // stop at end of first frame
                break loop;
            case stagPlaceObject:
            case stagPlaceObject2:
                PlaceObject po = (PlaceObject) t;
                switch (po.ref.code)
                {
                case stagDefineEditText:
                    // how to calculate bounds?
                    break;
                case stagDefineSprite:
                    DefineSprite defineSprite = (DefineSprite) po.ref;
                    Rect spriteBounds = defineSprite.getBounds();
                    Rect newBounds = po.hasMatrix() ? po.matrix.xformRect(spriteBounds) : spriteBounds;
                    fitRect(newBounds, bounds);
                    break;
                case stagDefineShape:
                case stagDefineShape2:
                case stagDefineShape3:
                    DefineShape defineShape = (DefineShape) po.ref;
                    fitRect(defineShape.bounds, bounds);
                    break;
                }
                break;
            }
        }
        return bounds;
    } */
}
 
TOP

Related Classes of flash.swf.tags.DefineSprite

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.