/* * java-gnome, a UI library for writing GTK and GNOME programs from Java! * * Copyright © 2008-2010 Operational Dynamics Consulting, Pty Ltd and Others * * The code in this file, and the program it is a part of, is made available * to you by its authors as open source software: you can redistribute it * and/or modify it under the terms of the GNU General Public License version * 2 ("GPL") as published by the Free Software Foundation. * * This program 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 GPL for more details. * * You should have received a copy of the GPL along with this program. If not, * see http://www.gnu.org/licenses/. The authors of this program may be * contacted through http://java-gnome.sourceforge.net/. * * Linking this library statically or dynamically with other modules is making * a combined work based on this library. Thus, the terms and conditions of * the GPL cover the whole combination. As a special exception (the * "Claspath Exception"), the copyright holders of this library give you * permission to link this library with independent modules to produce an * executable, regardless of the license terms of these independent modules, * and to copy and distribute the resulting executable under terms of your * choice, provided that you also meet, for each linked independent module, * the terms and conditions of the license of that module. An independent * module is a module which is not derived from or based on this library. If * you modify this library, you may extend the Classpath Exception to your * version of the library, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ package org.freedesktop.cairo; import org.freedesktop.bindings.Constant; /** * Constants specifying the compositing operating mode in effect. These are * set for a drawing Context using {@link Context#setOperator(Operator) * setOperator()}, and take effect when commands like {@link Context#paint() * paint()} are invoked. * *
* The Context should be created using a cairo {@link Surface}. The * operators don't seem to work correctly when a * {@link org.gnome.gdk.Drawable Drawable} is used instead of a cairo * Surface. * *
* The example images shown below were generated with the following code: * *
* cr.rectangle(0, 0, 75, 75); * cr.setSource(0.7, 0, 0, 0.8); * cr.fill(); * * cr.setOperator(Operator.FOO); * * cr.rectangle(40, 40, 75, 75); * cr.setSource(0, 0, 0.9, 0.4); * cr.fill(); ** *
* The drawing operations in cairo are said to be bounded and * unbounded with reguards to the Surface to be drawn to. * *
* When an operator is said to be bounded any cairo mask present determines * where the operation is applied. * *
* When an operator is said to be unbounded the operation is applied ignoring
* any present mask. Note: Clipping can still limit an unbounded
* operator.
*
* @author Andrew Cowie
* @author Kenneth Prugh
* @author Zak Fenton
* @since 4.0.7
*/
public class Operator extends Constant
{
private Operator(int ordinal, String nickname) {
super(ordinal, nickname);
}
/**
* Clear a surface to all transparent.
*
*
* This operator is bounded.
*
* @since 4.0.7
*/
public static final Operator CLEAR = new Operator(CairoOperator.CLEAR, "CLEAR");
/**
* Draw over existing pixels as if they were not present.
*
*
* This operator is bounded. * *
* As an example, you could set up the object to be drawn over: * *
* cr.setSource(0.7, 0, 0, 0.8);
* cr.rectangle(15, 10, 50, 50);
* cr.fill();
*
*
* Now set up the source object that will draw over the area beneath it:
*
*
* cr.setSource(0, 0, 0.9, 0.4);
* cr.rectangle(35, 35, 50, 50);
* cr.setOperator(Operator.SOURCE);
* cr.fill();
*
*
* @since 4.0.16
*/
public static final Operator SOURCE = new Operator(CairoOperator.SOURCE, "SOURCE");
/**
* Draws the specified source object over the underlying object as if both
* objects were two overlapping panels of transparent glass. This only
* applies to objects that have an alpha channel; if the objects do not
* have an alpha channel, the source object simply paints over the
* underlying object.
*
* * This is the default operator. * *
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.10
*/
public static final Operator OVER = new Operator(CairoOperator.OVER, "OVER");
/**
* Draw only where existing pixels are, clearing the rest of the surface.
*
*
*
* This operator is unbounded.
*
* @since 4.0.16
*/
public static final Operator IN = new Operator(CairoOperator.IN, "IN");
/**
* Draw only where existing pixels are not present, leaving a shadow
* behind where the two overlapped due to transparency.
*
*
* This operator is unbounded.
*
* @since 4.0.16
*/
public static final Operator OUT = new Operator(CairoOperator.OUT, "OUT");
/**
* Draw only where existing pixels are, mixing the color of the
* overlapping region.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator ATOP = new Operator(CairoOperator.ATOP, "ATOP");
/**
* Any existing pixels are left untouched, while the current drawing is
* discarded.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator DEST = new Operator(CairoOperator.DEST, "DEST");
/**
* Draw below any existing pixels with similar results to the
* {@link #OVER OVER} operator.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator DEST_OVER = new Operator(CairoOperator.DEST_OVER, "DEST_OVER");
/**
* Draw below the overlapping region, clearing everything outside the
* region similar to the {@link #IN IN} Operator.
*
*
* This operator is unbounded.
*
* @since 4.0.16
*/
public static final Operator DEST_IN = new Operator(CairoOperator.DEST_IN, "DEST_IN");
/**
* Reduce the visibility of the overlapping region.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator DEST_OUT = new Operator(CairoOperator.DEST_OUT, "DEST_OUT");
/**
* Draw and clear any existing pixels outside the overlapping region, the
* color of the overlapping region is mixed similar to the {@link #ATOP
* ATOP} Operator.
*
*
* This operator is unbounded.
*
* @since 4.0.16
*/
public static final Operator DEST_ATOP = new Operator(CairoOperator.DEST_ATOP, "DEST_ATOP");
/**
* XOR the colors of the overlapping region.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator XOR = new Operator(CairoOperator.XOR, "XOR");
/**
* Add the colors of the overlapping region.
*
*
* This operator has the same effect for bounded and unbounded.
*
* @since 4.0.16
*/
public static final Operator ADD = new Operator(CairoOperator.ADD, "ADD");
/**
* Saturate the colors of the overlapping region.
*
*
* This operator has the same effect for bounded and unbounded. * * @since 4.0.16 */ public static final Operator SATURATE = new Operator(CairoOperator.SATURATE, "SATURATE"); }