blob: 0ebe3a1e901cd98e077389bfd61d3d21b2eb0be0 [file] [log] [blame]
/*
*
* 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 org.apache.flex.swf.tags;
import org.apache.flex.swf.TagType;
import org.apache.flex.swf.types.CXFormWithAlpha;
import org.apache.flex.swf.types.ClipActions;
/**
* Represents a <code>PlaceObject2</code> tag in a SWF file.
* <p>
* The {@code PlaceObject2} tag extends the functionality of the
* {@code PlaceObject} tag. The {@code PlaceObject2} tag can both add a
* character to the display list, and modify the attributes of a character that
* is already on the display list. {@code The PlaceObject2} tag changed slightly
* from SWF 4 to SWF 5. In SWF 5, clip actions were added.
* <p>
* The tag begins with a group of flags that indicate which fields are present
* in the tag. The optional fields are <code>CharacterId, Matrix,
* ColorTransform, Ratio, ClipDepth, Name, ClipActions</code>. The Depth field
* is the only field that is always required.
* <p>
* The depth value determines the stacking order of the character. Characters
* with lower depth values are displayed underneath characters with higher depth
* values. A depth value of 1 means the character is displayed at the bottom of
* the stack. Any given depth can have only one character. This means a
* character that is already on the display list can be identified by its depth
* alone (that is, a CharacterId is not required).
* <p>
* The PlaceFlagMove and PlaceFlagHasCharacter tags indicate whether a new
* character is being added to the display list, or a character already on the
* display list is being modified.
*/
public class PlaceObject2Tag extends PlaceObjectTag
{
/**
* Constructor.
*/
public PlaceObject2Tag()
{
super(TagType.PlaceObject2);
}
/**
* Protected constructor for use by subclasses with other tag types.
*/
protected PlaceObject2Tag(TagType type)
{
super(type);
}
private boolean hasClipActions;
private boolean hasClipDepth;
private boolean hasName;
private boolean hasRatio;
private boolean hasColorTransform;
private boolean hasMatrix;
private boolean hasCharacter;
private boolean move;
private int ratio;
private int clipDepth;
private String name;
private ClipActions clipActions;
private CXFormWithAlpha colorTransform;
@Override
public String description()
{
final StringBuilder result = new StringBuilder();
result.append(String.format("ratio=%d, name=%s, id=%s, depth=%d (%s%s%s%s%s%s%s%s)",
ratio, name, hasCharacter ? character.getCharacterID() : "", depth,
hasClipActions ? "hasClipAction " : "",
hasClipDepth ? "hasClipDepth " : "",
hasName ? "hasName " : "",
hasRatio ? "hasRatio " : "",
hasColorTransform ? "hasColorTransform " : "",
hasMatrix ? "hasMatrix " : "",
move ? "move " : "",
hasCharacter ? "hasCharacter " : ""));
result.append("\n >> ").append(character);
return result.toString();
}
public boolean isHasClipActions()
{
return hasClipActions;
}
public void setHasClipActions(boolean hasClipActions)
{
this.hasClipActions = hasClipActions;
}
public boolean isHasClipDepth()
{
return hasClipDepth;
}
public void setHasClipDepth(boolean hasClipDepth)
{
this.hasClipDepth = hasClipDepth;
}
public boolean isHasName()
{
return hasName;
}
public void setHasName(boolean hasName)
{
this.hasName = hasName;
}
public boolean isHasRatio()
{
return hasRatio;
}
public void setHasRatio(boolean hasRatio)
{
this.hasRatio = hasRatio;
}
public boolean isHasColorTransform()
{
return hasColorTransform;
}
public void setHasColorTransform(boolean hasColorTransform)
{
this.hasColorTransform = hasColorTransform;
}
public boolean isHasMatrix()
{
return hasMatrix;
}
public void setHasMatrix(boolean hasMatrix)
{
this.hasMatrix = hasMatrix;
}
public boolean isHasCharacter()
{
return hasCharacter;
}
public void setHasCharacter(boolean hasCharacter)
{
this.hasCharacter = hasCharacter;
}
public boolean isMove()
{
return move;
}
public void setMove(boolean move)
{
this.move = move;
}
public int getRatio()
{
return ratio;
}
public void setRatio(int ratio)
{
this.ratio = ratio;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public ClipActions getClipActions()
{
return clipActions;
}
public void setClipActions(ClipActions clipActions)
{
this.clipActions = clipActions;
}
@Override
public CXFormWithAlpha getColorTransform()
{
return colorTransform;
}
public void setColorTransform(CXFormWithAlpha colorTransform)
{
this.colorTransform = colorTransform;
}
public int getClipDepth()
{
return clipDepth;
}
public void setClipDepth(int clipDepth)
{
this.clipDepth = clipDepth;
}
@Override
public Iterable<ICharacterTag> getReferences()
{
if (!isHasCharacter())
return CharacterIterableFactory.empty();
return super.getReferences();
}
}