blob: 2c3a8cdb56d73968e07b04b7c8ec550692b1cefd [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 flash.swf.tags;
import flash.swf.Tag;
import flash.swf.TagHandler;
import flash.swf.TagValues;
import flash.swf.types.CXForm;
import flash.swf.types.ClipActions;
import flash.swf.types.Filter;
import flash.swf.types.Matrix;
import java.util.List;
/**
* This is the place command. The encoded form can be PlaceObject or
* PlaceObject2.
*/
public class PlaceObject extends Tag
{
public int flags;
private static final int HAS_CLIP_ACTION = 1 << 7;
private static final int HAS_CLIP_DEPTH = 1 << 6;
private static final int HAS_NAME = 1 << 5;
private static final int HAS_RATIO = 1 << 4;
private static final int HAS_CXFORM = 1 << 3;
private static final int HAS_MATRIX = 1 << 2;
private static final int HAS_CHARACTER = 1 << 1;
private static final int HAS_MOVE = 1 << 0;
public int flags2;
private static final int HAS_IMAGE = 1 << 4;
private static final int HAS_CLASS_NAME = 1 << 3;
private static final int HAS_CACHE_AS_BITMAP = 1 << 2;
private static final int HAS_BLEND_MODE = 1 << 1;
private static final int HAS_FILTER_LIST = 1 << 0;
public int ratio;
public String name;
public int clipDepth;
public ClipActions clipActions;
public int depth;
public Matrix matrix;
public CXForm colorTransform;
public DefineTag ref;
public List<Filter> filters;
public int blendMode;
public String className;
public PlaceObject(int code)
{
super(code);
}
public PlaceObject(Matrix m, DefineTag ref, int depth, String name)
{
super(TagValues.stagPlaceObject2);
this.depth = depth;
setMatrix(m);
setRef(ref);
setName(name);
}
public PlaceObject(DefineTag ref, int depth)
{
super(TagValues.stagPlaceObject2);
this.depth = depth;
setRef(ref);
}
public boolean equals(Object object)
{
boolean isEqual = false;
if (super.equals(object) && (object instanceof PlaceObject))
{
PlaceObject placeObject = (PlaceObject) object;
// not comparing filters list
if ( (placeObject.flags == this.flags) &&
(placeObject.flags2 == this.flags2) &&
(placeObject.ratio == this.ratio) &&
equals(placeObject.name, this.name) &&
(placeObject.clipDepth == this.clipDepth) &&
equals(placeObject.clipActions, this.clipActions) &&
(placeObject.depth == this.depth) &&
equals(placeObject.matrix, this.matrix) &&
equals(placeObject.colorTransform, this.colorTransform) &&
equals(placeObject.ref, this.ref) &&
(placeObject.blendMode == this.blendMode) &&
equals(placeObject.className, this.className) )
{
isEqual = true;
}
}
return isEqual;
}
public int hashCode() {
int hashCode = super.hashCode();
hashCode += DefineTag.PRIME * flags;
hashCode += DefineTag.PRIME * ratio;
if (name!=null) {
hashCode += name.hashCode();
}
hashCode += DefineTag.PRIME * depth;
return hashCode;
}
public void visit(TagHandler h)
{
if (code == stagPlaceObject)
h.placeObject(this);
else if (code == stagPlaceObject2)
h.placeObject2(this);
else // if (code == stagPlaceObject3)
h.placeObject3(this);
}
public Tag getSimpleReference()
{
return hasCharID()? ref : null;
}
public void setRef(DefineTag ref)
{
if (ref == null)
throw new NullPointerException();
this.ref = ref;
flags = ref != null ? flags|HAS_CHARACTER : flags&~HAS_CHARACTER;
}
public void setMatrix(Matrix m)
{
this.matrix = m;
flags = m != null ? flags|HAS_MATRIX : flags&~HAS_MATRIX;
}
public boolean hasClipAction()
{
return (flags & HAS_CLIP_ACTION) != 0;
}
public boolean hasClipDepth()
{
return (flags & HAS_CLIP_DEPTH) != 0;
}
public void setClipDepth(int clipDepth)
{
this.clipDepth = clipDepth;
flags |= HAS_CLIP_DEPTH;
}
public boolean hasName()
{
return (flags & HAS_NAME) != 0;
}
public boolean hasRatio()
{
return (flags & HAS_RATIO) != 0;
}
public void setRatio(int ratio)
{
this.ratio = ratio;
flags |= HAS_RATIO;
}
public boolean hasCharID()
{
return (flags & HAS_CHARACTER) != 0;
}
public boolean hasMove()
{
return (flags & HAS_MOVE) != 0;
}
public boolean hasMatrix()
{
return (flags & HAS_MATRIX) != 0;
}
public boolean hasCxform()
{
return (flags & HAS_CXFORM) != 0;
}
public boolean hasFilterList()
{
return (flags2 & HAS_FILTER_LIST) != 0;
}
public void setFilterList(List<Filter> value)
{
filters = value;
flags2 = value != null ? flags2|HAS_FILTER_LIST : flags2&~HAS_FILTER_LIST;
}
public boolean hasBlendMode()
{
return (flags2 & HAS_BLEND_MODE) != 0;
}
public void setBlendMode(int value)
{
blendMode = value;
flags2 = value != 0 ? flags2|HAS_BLEND_MODE : flags2&~HAS_BLEND_MODE;
}
public boolean hasCacheAsBitmap()
{
return (flags2 & HAS_CACHE_AS_BITMAP) != 0;
}
public void setCacheAsBitmap(boolean value)
{
flags2 = value ? flags2|HAS_CACHE_AS_BITMAP : flags2&~HAS_CACHE_AS_BITMAP;
}
public void setCxform(CXForm cxform)
{
this.colorTransform = cxform;
flags = cxform != null ? flags|HAS_CXFORM : flags&~HAS_CXFORM;
}
public void setName(String instanceName)
{
this.name = instanceName;
flags = instanceName != null ? flags|HAS_NAME : flags&~HAS_NAME;
}
public void setClipActions(ClipActions actions)
{
clipActions = actions;
flags = actions != null ? flags|HAS_CLIP_ACTION : flags&~HAS_CLIP_ACTION;
}
public void setClassName(String className)
{
this.className = className;
flags2 = className != null ? flags2|HAS_CLASS_NAME : flags2&~HAS_CLASS_NAME;
}
public boolean hasClassName()
{
return (flags2 & HAS_CLASS_NAME) != 0;
}
public void setHasImage(boolean value)
{
flags2 = value ? flags2|HAS_IMAGE : flags2&~HAS_IMAGE;
}
public boolean hasImage()
{
return (flags2 & HAS_IMAGE) != 0;
}
}