blob: 85721e849a7093bd0309d7630860de1364c11647 [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.types;
import org.apache.flex.swf.tags.ICharacterTag;
import org.apache.flex.swf.tags.CharacterIterableFactory;
import org.apache.flex.swf.tags.IDefineBinaryImageTag;
/**
* The SWF file format supports three basic types of fills for a shape.
* <ul>
* <li><b>Solid fill</b> A simple RGB or RGBA color that fills a portion of a
* shape. An alpha value of 255 means a completely opaque fill. An alpha value
* of zero means a completely transparent fill. Any alpha between 0 and 255 will
* be partially transparent.</li>
* <li><b>Gradient Fill</b> A gradient fill can be either a linear or a radial
* gradient. For an in-depth description of how gradients are defined, see
* {@link Gradient}.</li>
* <li><b>Bitmap fill</b> Bitmap fills refer to a bitmap characterId. There are
* two styles: clipped and tiled. A clipped bitmap fill repeats the color on the
* edge of a bitmap if the fill extends beyond the edge of the bitmap. A tiled
* fill repeats the bitmap if the fill extends beyond the edge of the bitmap.</li>
* </ul>
*/
public class FillStyle implements IFillStyle
{
public static final int SOLID_FILL = 0x00;
public static final int LINEAR_GRADIENT_FILL = 0x10;
public static final int RADIAL_GRADIENT_FILL = 0x12;
public static final int FOCAL_RADIAL_GRADIENT_FILL = 0x13;
public static final int REPEATING_BITMAP_FILL = 0x40;
public static final int CLIPPED_BITMAP_FILL = 0x41;
public static final int NON_SMOOTHED_REPEATING_BITMAP = 0x42;
public static final int NON_SMOOTHED_CLIPPED_BITMAP = 0x43;
private int fillStyleType;
private RGB color;
private Matrix gradientMatrix;
private Gradient gradient;
private ICharacterTag bitmapCharacter;
private Matrix bitmapMatrix;
/**
* Constructor for a bitmap filled style
*
* @param fillStyleType The type of the fill tyle.
* @param matrix The bitmap matrix.
* @param tag The bitmap character tag.
*/
public FillStyle(int fillStyleType, Matrix matrix, IDefineBinaryImageTag tag)
{
setFillStyleType(fillStyleType);
setBitmapMatrix(matrix);
setBitmapCharacter(tag);
}
public FillStyle()
{
}
public int getFillStyleType()
{
return fillStyleType;
}
public void setFillStyleType(int fillStyleType)
{
this.fillStyleType = fillStyleType;
}
public RGB getColor()
{
return color;
}
public void setColor(RGB color)
{
this.color = color;
}
public Matrix getGradientMatrix()
{
return gradientMatrix;
}
public void setGradientMatrix(Matrix gradientMatrix)
{
this.gradientMatrix = gradientMatrix;
}
public Gradient getGradient()
{
return gradient;
}
public void setGradient(Gradient gradient)
{
this.gradient = gradient;
}
public ICharacterTag getBitmapCharacter()
{
return bitmapCharacter;
}
public void setBitmapCharacter(ICharacterTag bitmapCharacter)
{
this.bitmapCharacter = bitmapCharacter;
}
public Matrix getBitmapMatrix()
{
return bitmapMatrix;
}
public void setBitmapMatrix(Matrix bitmapMatrix)
{
this.bitmapMatrix = bitmapMatrix;
}
/**
* If this fill style uses a bitmap fill, get the referred bitmap character.
*/
@Override
public Iterable<ICharacterTag> getReferences()
{
int fillStyle = getFillStyleType();
if (fillStyle == FillStyle.CLIPPED_BITMAP_FILL ||
fillStyle == FillStyle.NON_SMOOTHED_CLIPPED_BITMAP ||
fillStyle == FillStyle.NON_SMOOTHED_REPEATING_BITMAP ||
fillStyle == FillStyle.REPEATING_BITMAP_FILL)
{
assert bitmapCharacter != null;
return CharacterIterableFactory.from(bitmapCharacter);
}
return CharacterIterableFactory.empty();
}
}