/*
* 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.types;
import com.jpexs.decompiler.flash.tags.DefineShape3Tag;
import com.jpexs.decompiler.flash.tags.base.NeedsCharacters;
import com.jpexs.decompiler.flash.types.annotations.Conditional;
import com.jpexs.decompiler.flash.types.annotations.ConditionalType;
import com.jpexs.decompiler.flash.types.annotations.EnumValue;
import com.jpexs.decompiler.flash.types.annotations.Internal;
import com.jpexs.decompiler.flash.types.annotations.SWFType;
import com.jpexs.decompiler.flash.types.annotations.SWFVersion;
import java.io.Serializable;
import java.util.Set;
/**
*
* @author JPEXS
*/
public class FILLSTYLE implements NeedsCharacters, Serializable {
@SWFType(BasicType.UI8)
@EnumValue(value = SOLID, text = "Solid")
@EnumValue(value = LINEAR_GRADIENT, text = "Linear gradient")
@EnumValue(value = RADIAL_GRADIENT, text = "Radial gradient")
@EnumValue(value = FOCAL_RADIAL_GRADIENT, text = "Focal radial gradient", minSwfVersion = 8)
@EnumValue(value = REPEATING_BITMAP, text = "Repeating bitmap")
@EnumValue(value = CLIPPED_BITMAP, text = "Clipped bitmap")
@EnumValue(value = NON_SMOOTHED_REPEATING_BITMAP, text = "Non smoothed repeating bitmap")
@EnumValue(value = NON_SMOOTHED_CLIPPED_BITMAP, text = "Non smoothed clipped bitmap")
public int fillStyleType;
public static final int SOLID = 0x0;
public static final int LINEAR_GRADIENT = 0x10;
public static final int RADIAL_GRADIENT = 0x12;
@SWFVersion(from = 8)
public static final int FOCAL_RADIAL_GRADIENT = 0x13;
public static final int REPEATING_BITMAP = 0x40;
public static final int CLIPPED_BITMAP = 0x41;
@SWFVersion(from = 7)
public static final int NON_SMOOTHED_REPEATING_BITMAP = 0x42;
@SWFVersion(from = 7)
public static final int NON_SMOOTHED_CLIPPED_BITMAP = 0x43;
@Internal
public boolean inShape3;
@ConditionalType(type = RGBA.class, tags = DefineShape3Tag.ID)
public RGB color;
@Conditional(value = "fillStyleType", options = {LINEAR_GRADIENT, RADIAL_GRADIENT, FOCAL_RADIAL_GRADIENT})
public MATRIX gradientMatrix;
@Conditional(value = "fillStyleType", options = {LINEAR_GRADIENT, RADIAL_GRADIENT, FOCAL_RADIAL_GRADIENT})
@ConditionalType(value = "fillStyleType", type = FOCALGRADIENT.class, options = {FOCAL_RADIAL_GRADIENT})
public GRADIENT gradient;
@Conditional(value = "fillStyleType", options = {REPEATING_BITMAP, CLIPPED_BITMAP, NON_SMOOTHED_REPEATING_BITMAP, NON_SMOOTHED_CLIPPED_BITMAP})
public int bitmapId;
@Conditional(value = "fillStyleType", options = {REPEATING_BITMAP, CLIPPED_BITMAP, NON_SMOOTHED_REPEATING_BITMAP, NON_SMOOTHED_CLIPPED_BITMAP})
public MATRIX bitmapMatrix;
@Override
public void getNeededCharacters(Set<Integer> needed) {
if ((fillStyleType == REPEATING_BITMAP)
|| (fillStyleType == CLIPPED_BITMAP)
|| (fillStyleType == NON_SMOOTHED_REPEATING_BITMAP)
|| (fillStyleType == NON_SMOOTHED_CLIPPED_BITMAP)) {
needed.add(bitmapId);
}
}
@Override
public boolean replaceCharacter(int oldCharacterId, int newCharacterId) {
if (bitmapId == oldCharacterId) {
bitmapId = newCharacterId;
return true;
}
return false;
}
@Override
public boolean removeCharacter(int characterId) {
if (bitmapId == characterId) {
if ((fillStyleType == REPEATING_BITMAP)
|| (fillStyleType == CLIPPED_BITMAP)
|| (fillStyleType == NON_SMOOTHED_REPEATING_BITMAP)
|| (fillStyleType == NON_SMOOTHED_CLIPPED_BITMAP)) {
fillStyleType = SOLID;
if (color == null) {
color = inShape3 ? new RGBA(0, 0, 0, 0) : new RGB(0, 0, 0);
}
}
bitmapId = 0;
return true;
}
return false;
}
}