/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * AndroidWorld Library, Copyright 2011 Bryan Chadwick * * * * FILE: ./android/image/Overlay.java * * * * This file is part of AndroidWorld. * * * * AndroidWorld is free software: you can redistribute it and/or * * modify it under the terms of the GNU General Public License * * as published by the Free Software Foundation, either version * * 3 of the License, or (at your option) any later version. * * * * AndroidWorld 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with AndroidWorld. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package android.image; import android.graphics.Canvas; /** * * * Represents the Overlaying of two or more images. * *
 *    new Overlay(new Rectangle(30, 60, "solid", "orange"),
 *                new Ellipse(60, 30, "solid", "purple"))
* *
* * *
 *    new Overlay(new Ellipse(10, 10, "solid", "red"),
 *                new Ellipse(20, 20, "solid", "black"),
 *                new Ellipse(30, 30, "solid", "red"),
 *                new Ellipse(40, 40, "solid", "black"),
 *                new Ellipse(50, 50, "solid", "red"),
 *                new Ellipse(60, 60, "solid", "black"))
* *
* * *
 *    new Overlay(new RegularPolygon(20, 5, "solid", "#3232FF"),
 *                new RegularPolygon(26, 5, "solid", "#6464FF"),
 *                new RegularPolygon(32, 5, "solid", "#9696FF"),
 *                new RegularPolygon(38, 5, "solid", "#C8C8FF"),
 *                new RegularPolygon(44, 5, "solid", "#FAFAFF"))
* *
*
* * Image overlays are also available as a method on Images. * *
 *    new Ellipse(60, 30, "solid", "purple")
 *        .overlay(new Rectangle(30, 60, "solid", "orange"))
* *
* * *
 *    new Ellipse(60, 60, "solid", "black")
 *        .overlay(new Ellipse(10, 10, "solid", "red"),
 *                 new Ellipse(20, 20, "solid", "black"),
 *                 new Ellipse(30, 30, "solid", "red"),
 *                 new Ellipse(40, 40, "solid", "black"),
 *                 new Ellipse(50, 50, "solid", "red"))
* *
* * *
 *    new RegularPolygon(44, 5, "solid", "#FAFAFF")
 *        .overlay(new RegularPolygon(20, 5, "solid", "#3232FF"),
 *                 new RegularPolygon(26, 5, "solid", "#6464FF"),
 *                 new RegularPolygon(32, 5, "solid", "#9696FF"),
 *                 new RegularPolygon(38, 5, "solid", "#C8C8FF"))
* *
* */ public class Overlay extends Image{ protected Image top; protected Image bot; protected double width; protected double height; /** Construct an Overlay from the two or more Images */ public Overlay(Image top, Image next, Image ... imgs){ this(top, imgs.length==0?next:make(next, imgs, 0)); } /** Construct an Overlay from the two Images */ protected Overlay(Image top, Image bot){ this(top, bot, (Math.max(top.leftOfPin(),bot.leftOfPin())+ Math.max(top.rightOfPin(),bot.rightOfPin())), (Math.max(top.upOfPin(),bot.upOfPin())+ Math.max(top.downOfPin(),bot.downOfPin()))); } /** Construct an Overlay from the two Images with the given width and height */ protected Overlay(Image top, Image bot, double width, double height){ super(width/2, height/2); this.top = top; this.bot = bot; this.width = width; this.height = height; } /** Make a layered Image with top t and bottoms of imgs[i..] */ private static Image make(Image t, Image[] imgs, int i){ if(i == imgs.length) return t; return new Overlay(t, make(imgs[i], imgs, i+1)); } /** Draw this Overlay image into a Graphics */ public void paint(Canvas c, int xx, int yy){ bot.paint(c, xx, yy); top.paint(c, xx, yy); } /** Return the width of this Image */ public int width(){ return ceil(width); } /** Return the height of this Image */ public int height(){ return ceil(height); } }