summaryrefslogtreecommitdiffstats
path: root/krita/core/kis_paint_layer.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /krita/core/kis_paint_layer.h
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'krita/core/kis_paint_layer.h')
-rw-r--r--krita/core/kis_paint_layer.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/krita/core/kis_paint_layer.h b/krita/core/kis_paint_layer.h
new file mode 100644
index 000000000..2c4b562fc
--- /dev/null
+++ b/krita/core/kis_paint_layer.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2005 Casper Boemann <cbr@boemann.dk>
+ *
+ * this program 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 2 of the license, or
+ * (at your option) any later version.
+ *
+ * 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
+ * gnu general public license for more details.
+ *
+ * you should have received a copy of the gnu general public license
+ * along with this program; if not, write to the free software
+ * foundation, inc., 675 mass ave, cambridge, ma 02139, usa.
+ */
+#ifndef KIS_PAINT_LAYER_H_
+#define KIS_PAINT_LAYER_H_
+
+#include "kis_types.h"
+#include "kis_layer.h"
+#include "kis_paint_device.h"
+#include "kis_colorspace.h"
+/**
+ * This layer is of a type that can be painted on.
+ */
+class KisPaintLayer : public KisLayer, public KisLayerSupportsIndirectPainting {
+ typedef KisLayer super;
+
+ Q_OBJECT
+
+public:
+ KisPaintLayer(KisImage *img, const QString& name, Q_UINT8 opacity, KisPaintDeviceSP dev);
+ KisPaintLayer(KisImage *img, const QString& name, Q_UINT8 opacity);
+ KisPaintLayer(KisImage *img, const QString& name, Q_UINT8 opacity, KisColorSpace * colorSpace);
+ KisPaintLayer(const KisPaintLayer& rhs);
+ virtual ~KisPaintLayer();
+
+ virtual KisLayerSP clone() const;
+public:
+
+ // Called when the layer is made active
+ virtual void activate() {}
+
+ // Called when another layer is made active
+ virtual void deactivate() {}
+
+ virtual Q_INT32 x() const;
+ virtual void setX(Q_INT32 x);
+
+ virtual Q_INT32 y() const;
+ virtual void setY(Q_INT32 y);
+
+ virtual QRect extent() const;
+ virtual QRect exactBounds() const;
+
+ virtual void paintSelection(QImage &img, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h);
+ virtual void paintSelection(QImage &img, const QRect& scaledImageRect, const QSize& scaledImageSize, const QSize& imageSize);
+
+ virtual void paintMaskInactiveLayers(QImage &img, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h);
+
+ virtual QImage createThumbnail(Q_INT32 w, Q_INT32 h);
+
+ virtual bool accept(KisLayerVisitor &v)
+ {
+// kdDebug(41001) << "\tPAINT\t" << name()
+// << " dirty: " << dirty() << "\n";
+ return v.visit(this);
+ }
+
+
+ inline KisPaintDeviceSP paintDevice() const { return m_paintdev; }
+
+ /// Returns the paintDevice that accompanies this layer (or mask, see editMask)
+ inline KisPaintDeviceSP paintDeviceOrMask() const {
+ if (hasMask() && editMask())
+ return m_mask;
+ return m_paintdev;
+ }
+
+ // Mask Layer
+
+ /// Does this layer have a layer mask?
+ bool hasMask() const { return m_mask != 0; }
+ // XXX TODO: Make these undo-able!
+ /// Create a mask if it does not yet exist, and return it
+ KisPaintDeviceSP createMask();
+ /// Convert the from argument to the mask
+ void createMaskFromPaintDevice(KisPaintDeviceSP from);
+ /**
+ * Convert the from selection to a paint device (should convert the getMaskAsSelection
+ * result back to the mask). Overwrites the current mask, if any. Also removes the selection
+ */
+ void createMaskFromSelection(KisSelectionSP from);
+ /// Remove the layer mask
+ void removeMask();
+ /// Apply the layer mask to the paint device, this removes the mask afterwards
+ void applyMask();
+ /// Returns the layer mask's device. Creates one if there is currently none
+ KisPaintDeviceSP getMask();
+ /// Returns the layer mask's device, converted to a selection. Creates one if there is currently none
+ KisSelectionSP getMaskAsSelection();
+
+ /// Undoable version of createMask
+ KNamedCommand* createMaskCommand();
+ /// Undoable version of createMaskFromSelection
+ KNamedCommand* maskFromSelectionCommand();
+ /// Undoable, removes the current mask, but converts it to the current selection
+ KNamedCommand* maskToSelectionCommand();
+ /// Undoable version of removeMask
+ KNamedCommand* removeMaskCommand();
+ /// Undoable version of applyMask
+ KNamedCommand* applyMaskCommand();
+
+ /// Returns true if the masked part of the mask will be rendered instead of being transparent
+ bool renderMask() const { return m_renderMask; }
+ /// Set the renderMask property
+ void setRenderMask(bool b);
+
+ /**
+ * When this returns true, the KisPaintDevice returned in paintDevice will actually
+ * be the layer mask (if there is one). This is so that tools can draw on the mask
+ * without needing to know its existance.
+ */
+ bool editMask() const { return m_editMask; }
+ /// Sets the editMask property
+ void setEditMask(bool b);
+
+ /// Overridden to call the private convertMaskToSelection
+ virtual void setDirty(bool propagate = true);
+ /// Same as above
+ virtual void setDirty(const QRect & rect, bool propagate = true);
+
+ // KisLayerSupportsIndirectPainting
+ virtual KisLayer* layer() { return this; }
+signals:
+ /// When the mask is created/destroyed or the editmask or rendermask is changed
+ void sigMaskInfoChanged();
+
+private:
+ void convertMaskToSelection(const QRect& r);
+ void genericMaskCreationHelper();
+ KisPaintDeviceSP m_paintdev;
+ // Layer mask related:
+ // XXX It would be nice to merge the next 2 devices...
+ KisPaintDeviceSP m_mask; // The mask that we can edit and display easily
+ KisSelectionSP m_maskAsSelection; // The mask as selection, to apply and render easily
+ bool m_renderMask;
+ bool m_editMask;
+};
+
+typedef KSharedPtr<KisPaintLayer> KisPaintLayerSP;
+
+#endif // KIS_PAINT_LAYER_H_
+