/*
* Copyright (C) 2010-2016 JPEXS, All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package com.jpexs.decompiler.flash.timeline;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
import com.jpexs.decompiler.flash.tags.PlaceObject3Tag;
import com.jpexs.decompiler.flash.tags.PlaceObject4Tag;
import com.jpexs.decompiler.flash.tags.PlaceObjectTag;
import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag;
import com.jpexs.decompiler.flash.types.CLIPACTIONS;
import com.jpexs.decompiler.flash.types.CXFORM;
import com.jpexs.decompiler.flash.types.CXFORMWITHALPHA;
import com.jpexs.decompiler.flash.types.ColorTransform;
import com.jpexs.decompiler.flash.types.MATRIX;
import com.jpexs.decompiler.flash.types.RGBA;
import com.jpexs.decompiler.flash.types.filters.FILTER;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
/**
*
* @author JPEXS
*/
public class DepthState {
public int characterId = -1;
public MATRIX matrix;
public String instanceName;
public ColorTransform colorTransForm;
public boolean cacheAsBitmap = false;
public int blendMode = 0;
public List<FILTER> filters = new ArrayList<>();
public boolean isVisible = true;
public RGBA backGroundColor;
public CLIPACTIONS clipActions;
public byte[] amfData;
public int ratio = -1;
public boolean key = false;
public int clipDepth = -1;
public int time = 0;
private final SWF swf;
public Frame frame;
public PlaceObjectTypeTag placeObjectTag;
public int minPlaceObjectNum;
public long instanceId;
public boolean motionTween = false;
private static AtomicLong lastInstanceId = new AtomicLong(0);
public static long getNewInstanceId() {
return lastInstanceId.addAndGet(1);
}
public DepthState(SWF swf, Frame frame) {
this.swf = swf;
this.frame = frame;
this.instanceId = getNewInstanceId();
}
public DepthState(DepthState obj, Frame frame, boolean sameInstance) {
this.frame = frame;
swf = obj.swf;
characterId = obj.characterId;
matrix = obj.matrix;
instanceName = obj.instanceName;
colorTransForm = obj.colorTransForm;
cacheAsBitmap = obj.cacheAsBitmap;
blendMode = obj.blendMode;
filters = obj.filters;
isVisible = obj.isVisible;
backGroundColor = obj.backGroundColor;
clipActions = obj.clipActions;
ratio = obj.ratio;
clipDepth = obj.clipDepth;
time = obj.time;
placeObjectTag = obj.placeObjectTag;
minPlaceObjectNum = obj.minPlaceObjectNum;
if (sameInstance) {
time++;
instanceId = obj.instanceId;
} else {
instanceId = getNewInstanceId();
}
}
public boolean cacheAsBitmap() {
return (placeObjectTag != null && placeObjectTag.cacheAsBitmap())
|| (filters != null && filters.size() > 0);
}
public PlaceObjectTypeTag toPlaceObjectTag(int depth) {
if (minPlaceObjectNum <= 1) {
CXFORM cxForm0 = colorTransForm == null ? null : new CXFORM(colorTransForm);
return new PlaceObjectTag(swf, characterId, depth, matrix, cxForm0);
} else if (minPlaceObjectNum == 2) {
CXFORMWITHALPHA cxForm = colorTransForm == null ? null : new CXFORMWITHALPHA(colorTransForm);
return new PlaceObject2Tag(swf, false, depth, characterId, matrix, cxForm, ratio, instanceName, clipDepth, clipActions);
} else if (minPlaceObjectNum == 3) {
CXFORMWITHALPHA cxForm = colorTransForm == null ? null : new CXFORMWITHALPHA(colorTransForm);
return new PlaceObject3Tag(swf, false, depth, null/*todo: className*/, characterId, matrix, cxForm, ratio, instanceName, clipDepth, filters, blendMode, cacheAsBitmap ? 1 : 0, isVisible ? 1 : 0, backGroundColor, clipActions);
}
CXFORMWITHALPHA cxForm = colorTransForm == null ? null : new CXFORMWITHALPHA(colorTransForm);
return new PlaceObject4Tag(swf, false, depth, null/*todo: className*/, characterId, matrix, cxForm, ratio, instanceName, clipDepth, filters, blendMode, cacheAsBitmap ? 1 : 0, isVisible ? 1 : 0, backGroundColor, clipActions, null);
}
}