/* * * 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(); } }