/* * Copyright 2016 Laszlo Balazs-Csiki * * This file is part of Pixelitor. Pixelitor is free software: you * can redistribute it and/or modify it under the terms of the GNU * General Public License, version 3 as published by the Free * Software Foundation. * * Pixelitor 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 Pixelitor. If not, see <http://www.gnu.org/licenses/>. */ package pixelitor.layers; import pixelitor.Composition; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.image.BufferedImage; /** * A temporary drawing layer used by the brush and gradient tools. * It allows these tools to use blending modes. */ public class TmpDrawingLayer { private BufferedImage image; private final Graphics2D g; private final Composite composite; public TmpDrawingLayer(ImageLayer imageLayer, Composite composite) { this.composite = composite; Composition comp = imageLayer.getComp(); // the image is never translated, the coordinates are relative to the canvas image = imageLayer.createCompositionSizedTmpImage(); g = image.createGraphics(); } public Graphics2D getGraphics() { return g; } public int getWidth() { return image.getWidth(); } public int getHeight() { return image.getHeight(); } public void dispose() { g.dispose(); image.flush(); image = null; } public void paintLayer(Graphics2D g, int tx, int ty) { if (composite == null) { throw new IllegalStateException("tmpDrawingComposite == null"); } g.setComposite(composite); g.drawImage(image, tx, ty, null); } }