/*******************************************************************************
* Copyright 2012-present Pixate, Inc.
*
* Licensed 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.
******************************************************************************/
/**
* Copyright (c) 2012-2013 Pixate, Inc. All rights reserved.
*/
package com.pixate.freestyle.cg.paints;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Xfermode;
import com.pixate.freestyle.util.ObjectUtil;
/**
* A {@link PXPaint} group.
*/
public class PXPaintGroup extends BasePXPaint {
private List<PXPaint> paints;
public PXPaintGroup() {
}
public PXPaintGroup(PXPaint... paints) {
for (PXPaint paint : paints) {
addPaint(paint);
}
}
public PXPaintGroup(List<PXPaint> paints) {
for (PXPaint paint : paints) {
addPaint(paint);
}
}
/**
* Adds a paint to the group.
*
* @param paint A {@link PXPaint}
*/
public void addPaint(PXPaint paint) {
if (paint != null) {
if (paints == null) {
paints = new ArrayList<PXPaint>(3);
}
paint.setBleningMode(blendingMode);
paints.add(paint);
}
}
/**
* Removes a paint from the group.
*
* @param paint A {@link PXPaint}
*/
public void removePaint(PXPaint paint) {
if (paints != null) {
paints.remove(paint);
}
}
/**
* Returns the {@link PXPaint} list reference.
*
* @return A {@link PXPaint} list.
*/
public List<PXPaint> getPaints() {
return paints;
}
/*
* (non-Javadoc)
* @see
* com.pixate.freestyle.pxengine.cg.PXPaint#applyFillToPath(android.graphics
* . Path, android.graphics.Paint, android.graphics.Canvas)
*/
public void applyFillToPath(Path path, Paint paint, Canvas context) {
if (paints != null) {
for (PXPaint p : paints) {
p.applyFillToPath(path, paint, context);
}
}
}
/*
* (non-Javadoc)
* @see
* com.pixate.freestyle.pxengine.cg.BasePXPaint#setBleningMode(android.graphics
* .Xfermode)
*/
@Override
public void setBleningMode(Xfermode mode) {
super.setBleningMode(mode);
if (paints != null) {
for (PXPaint p : paints) {
p.setBleningMode(mode);
}
}
}
/*
* (non-Javadoc)
* @see com.pixate.freestyle.cg.paints.PXPaint#darkenByPercent(float)
*/
public PXPaint darkenByPercent(float percent) {
PXPaintGroup group = new PXPaintGroup();
if (paints != null) {
for (PXPaint paint : paints) {
group.addPaint(paint.darkenByPercent(percent));
}
}
return group;
}
/*
* (non-Javadoc)
* @see com.pixate.freestyle.cg.paints.PXPaint#lightenByPercent(float)
*/
public PXPaint lightenByPercent(float percent) {
PXPaintGroup group = new PXPaintGroup();
if (paints != null) {
for (PXPaint paint : paints) {
group.addPaint(paint.lightenByPercent(percent));
}
}
return group;
}
/*
* (non-Javadoc)
* @see com.pixate.freestyle.cg.paints.PXPaint#isOpaque()
*/
public boolean isOpaque() {
if (paints != null) {
for (PXPaint paint : paints) {
if (!paint.isOpaque()) {
return false;
}
}
}
return true;
}
/*
* (non-Javadoc)
* @see com.pixate.freestyle.cg.paints.PXPaint#isAsynchronous()
*/
@Override
public boolean isAsynchronous() {
if (paints != null) {
for (PXPaint paint : paints) {
if (paint.isAsynchronous()) {
return true;
}
}
}
return false;
}
/*
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other instanceof PXPaintGroup) {
return ObjectUtil.areEqual(paints, ((PXPaintGroup) other).paints);
}
return false;
}
}