summaryrefslogtreecommitdiffstats
path: root/krita/core/kis_layer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'krita/core/kis_layer.cc')
-rw-r--r--krita/core/kis_layer.cc611
1 files changed, 0 insertions, 611 deletions
diff --git a/krita/core/kis_layer.cc b/krita/core/kis_layer.cc
deleted file mode 100644
index cac178e5..00000000
--- a/krita/core/kis_layer.cc
+++ /dev/null
@@ -1,611 +0,0 @@
-/*
- * Copyright (c) 2002 Patrick Julien <[email protected]>
- * Copyright (c) 2005 Casper Boemann <[email protected]>
- *
- * 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.
- */
-
-#include <kdebug.h>
-#include <tqimage.h>
-
-#include "kis_debug_areas.h"
-#include "kis_group_layer.h"
-#include "kis_image.h"
-#include "kis_layer.h"
-#include "kis_painter.h"
-#include "kis_undo_adapter.h"
-
-namespace {
-
- class KisLayerCommand : public KNamedCommand {
- typedef KNamedCommand super;
-
- public:
- KisLayerCommand(const TQString& name, KisLayerSP layer);
- virtual ~KisLayerCommand() {}
-
- virtual void execute() = 0;
- virtual void unexecute() = 0;
-
- protected:
- void setUndo(bool undo);
-
- KisLayerSP m_layer;
- };
-
- KisLayerCommand::KisLayerCommand(const TQString& name, KisLayerSP layer) :
- super(name), m_layer(layer)
- {
- }
-
- void KisLayerCommand::setUndo(bool undo)
- {
- if (m_layer->undoAdapter()) {
- m_layer->undoAdapter()->setUndo(undo);
- }
- }
-
- class KisLayerLockedCommand : public KisLayerCommand {
- typedef KisLayerCommand super;
-
- public:
- KisLayerLockedCommand(KisLayerSP layer, bool newLocked);
-
- virtual void execute();
- virtual void unexecute();
-
- private:
- bool m_newLocked;
- };
-
- KisLayerLockedCommand::KisLayerLockedCommand(KisLayerSP layer, bool newLocked) :
- super(i18n("Lock Layer"), layer)
- {
- m_newLocked = newLocked;
- }
-
- void KisLayerLockedCommand::execute()
- {
- setUndo(false);
- m_layer->setLocked(m_newLocked);
- setUndo(true);
- }
-
- void KisLayerLockedCommand::unexecute()
- {
- setUndo(false);
- m_layer->setLocked(!m_newLocked);
- setUndo(true);
- }
-
- class KisLayerOpacityCommand : public KisLayerCommand {
- typedef KisLayerCommand super;
-
- public:
- KisLayerOpacityCommand(KisLayerSP layer, TQ_UINT8 oldOpacity, TQ_UINT8 newOpacity);
-
- virtual void execute();
- virtual void unexecute();
-
- private:
- TQ_UINT8 m_oldOpacity;
- TQ_UINT8 m_newOpacity;
- };
-
- KisLayerOpacityCommand::KisLayerOpacityCommand(KisLayerSP layer, TQ_UINT8 oldOpacity, TQ_UINT8 newOpacity) :
- super(i18n("Layer Opacity"), layer)
- {
- m_oldOpacity = oldOpacity;
- m_newOpacity = newOpacity;
- }
-
- void KisLayerOpacityCommand::execute()
- {
- setUndo(false);
- m_layer->setOpacity(m_newOpacity);
- setUndo(true);
- }
-
- void KisLayerOpacityCommand::unexecute()
- {
- setUndo(false);
- m_layer->setOpacity(m_oldOpacity);
- setUndo(true);
- }
-
- class KisLayerVisibilityCommand : public KisLayerCommand {
- typedef KisLayerCommand super;
-
- public:
- KisLayerVisibilityCommand(KisLayerSP layer, bool newVisibility);
-
- virtual void execute();
- virtual void unexecute();
-
- private:
- bool m_newVisibility;
- };
-
- KisLayerVisibilityCommand::KisLayerVisibilityCommand(KisLayerSP layer, bool newVisibility) :
- super(i18n("Layer Visibility"), layer)
- {
- m_newVisibility = newVisibility;
- }
-
- void KisLayerVisibilityCommand::execute()
- {
- setUndo(false);
- m_layer->setVisible(m_newVisibility);
- setUndo(true);
- }
-
- void KisLayerVisibilityCommand::unexecute()
- {
- setUndo(false);
- m_layer->setVisible(!m_newVisibility);
- setUndo(true);
- }
-
- class KisLayerCompositeOpCommand : public KisLayerCommand {
- typedef KisLayerCommand super;
-
- public:
- KisLayerCompositeOpCommand(KisLayerSP layer, const KisCompositeOp& oldCompositeOp, const KisCompositeOp& newCompositeOp);
-
- virtual void execute();
- virtual void unexecute();
-
- private:
- KisCompositeOp m_oldCompositeOp;
- KisCompositeOp m_newCompositeOp;
- };
-
- KisLayerCompositeOpCommand::KisLayerCompositeOpCommand(KisLayerSP layer, const KisCompositeOp& oldCompositeOp,
- const KisCompositeOp& newCompositeOp) :
- super(i18n("Layer Composite Mode"), layer)
- {
- m_oldCompositeOp = oldCompositeOp;
- m_newCompositeOp = newCompositeOp;
- }
-
- void KisLayerCompositeOpCommand::execute()
- {
- setUndo(false);
- m_layer->setCompositeOp(m_newCompositeOp);
- setUndo(true);
- }
-
- void KisLayerCompositeOpCommand::unexecute()
- {
- setUndo(false);
- m_layer->setCompositeOp(m_oldCompositeOp);
- setUndo(true);
- }
-
- class KisLayerOffsetCommand : public KNamedCommand {
- typedef KNamedCommand super;
-
- public:
- KisLayerOffsetCommand(KisLayerSP layer, const TQPoint& oldpos, const TQPoint& newpos);
- virtual ~KisLayerOffsetCommand();
-
- virtual void execute();
- virtual void unexecute();
-
- private:
- void moveTo(const TQPoint& pos);
-
- private:
- KisLayerSP m_layer;
- TQRect m_updateRect;
- TQPoint m_oldPos;
- TQPoint m_newPos;
- };
-
- KisLayerOffsetCommand::KisLayerOffsetCommand(KisLayerSP layer, const TQPoint& oldpos, const TQPoint& newpos) :
- super(i18n("Move Layer"))
- {
- m_layer = layer;
- m_oldPos = oldpos;
- m_newPos = newpos;
-
- TQRect currentBounds = m_layer->exactBounds();
- TQRect oldBounds = currentBounds;
- oldBounds.moveBy(oldpos.x() - newpos.x(), oldpos.y() - newpos.y());
-
- m_updateRect = currentBounds | oldBounds;
- }
-
- KisLayerOffsetCommand::~KisLayerOffsetCommand()
- {
- }
-
- void KisLayerOffsetCommand::execute()
- {
- moveTo(m_newPos);
- }
-
- void KisLayerOffsetCommand::unexecute()
- {
- moveTo(m_oldPos);
- }
-
- void KisLayerOffsetCommand::moveTo(const TQPoint& pos)
- {
- if (m_layer->undoAdapter()) {
- m_layer->undoAdapter()->setUndo(false);
- }
-
- m_layer->setX(pos.x());
- m_layer->setY(pos.y());
-
- m_layer->setDirty(m_updateRect);
-
- if (m_layer->undoAdapter()) {
- m_layer->undoAdapter()->setUndo(true);
- }
- }
-}
-
-static int getID()
-{
- static int id = 1;
- return id++;
-}
-
-
-KisLayer::KisLayer(KisImage *img, const TQString &name, TQ_UINT8 opacity) :
- TQObject(0, name.latin1()),
- KShared(),
- m_id(getID()),
- m_index(-1),
- m_opacity(opacity),
- m_locked(false),
- m_visible(true),
- m_temporary(false),
- m_name(name),
- m_parent(0),
- m_image(img),
- m_compositeOp(COMPOSITE_OVER)
-{
-}
-
-KisLayer::KisLayer(const KisLayer& rhs) :
- TQObject(),
- KShared(rhs)
-{
- if (this != &rhs) {
- m_id = getID();
- m_index = -1;
- m_opacity = rhs.m_opacity;
- m_locked = rhs.m_locked;
- m_visible = rhs.m_visible;
- m_temporary = rhs.m_temporary;
- m_dirtyRect = rhs.m_dirtyRect;
- m_name = rhs.m_name;
- m_image = rhs.m_image;
- m_parent = 0;
- m_compositeOp = rhs.m_compositeOp;
- }
-}
-
-KisLayer::~KisLayer()
-{
-}
-
-void KisLayer::setClean(const TQRect & rect)
-{
- if (m_dirtyRect.isValid() && rect.isValid()) {
-
- // XXX: We should only set the parts clean that were actually cleaned. However, extent and exactBounds conspire
- // to make that very hard atm.
- //if (rect.tqcontains(m_dirtyRect)) m_dirtyRect = TQRect();
- m_dirtyRect = TQRect();
- }
-
-}
-
-bool KisLayer::dirty()
-{
- return m_dirtyRect.isValid();
-}
-
-
-bool KisLayer::dirty(const TQRect & rc)
-{
- if (!m_dirtyRect.isValid() || !rc.isValid()) return false;
-
- return rc.intersects(m_dirtyRect);
-}
-
-TQRect KisLayer::dirtyRect() const
-{
- return m_dirtyRect;
-}
-
-void KisLayer::setDirty(bool propagate)
-{
- TQRect rc = extent();
-
- if (rc.isValid()) m_dirtyRect = rc;
-
- // If we're dirty, our tqparent is dirty, if we've got a tqparent
- if (propagate && m_parent && rc.isValid()) m_parent->setDirty(m_dirtyRect);
-
- if (m_image && rc.isValid()) {
- m_image->notifyLayerUpdated(this, rc);
- }
-}
-
-void KisLayer::setDirty(const TQRect & rc, bool propagate)
-{
- // If we're dirty, our tqparent is dirty, if we've got a tqparent
-
- if (rc.isValid())
- m_dirtyRect |= rc;
-
- if (propagate && m_parent && m_dirtyRect.isValid())
- m_parent->setDirty(m_dirtyRect);
-
- if (m_image && rc.isValid()) {
- m_image->notifyLayerUpdated(this, rc);
- }
-}
-
-KisGroupLayerSP KisLayer::tqparent() const
-{
- return m_parent;
-}
-
-KisLayerSP KisLayer::prevSibling() const
-{
- if (!tqparent())
- return 0;
- return tqparent()->at(index() - 1);
-}
-
-KisLayerSP KisLayer::nextSibling() const
-{
- if (!tqparent())
- return 0;
- return tqparent()->at(index() + 1);
-}
-
-int KisLayer::index() const
-{
- return m_index;
-}
-
-void KisLayer::setIndex(int i)
-{
- if (!tqparent())
- return;
- tqparent()->setIndex(this, i);
-}
-
-KisLayerSP KisLayer::findLayer(const TQString& n) const
-{
- if (name() == n)
- return const_cast<KisLayer*>(this); //HACK any less ugly way? findLayer() is conceptually const...
- for (KisLayerSP layer = firstChild(); layer; layer = layer->nextSibling())
- if (KisLayerSP found = layer->findLayer(n))
- return found;
- return 0;
-}
-
-KisLayerSP KisLayer::findLayer(int i) const
-{
- if (id() == i)
- return const_cast<KisLayer*>(this); //HACK
- for (KisLayerSP layer = firstChild(); layer; layer = layer->nextSibling())
- if (KisLayerSP found = layer->findLayer(i))
- return found;
- return 0;
-}
-
-int KisLayer::numLayers(int flags) const
-{
- int num = 0;
- if (matchesFlags(flags)) num++;
- for (KisLayerSP layer = firstChild(); layer; layer = layer->nextSibling())
- num += layer->numLayers(flags);
- return num;
-}
-
-bool KisLayer::matchesFlags(int flags) const
-{
- if ((flags & Visible) && !visible())
- return false;
- if ((flags & Hidden) && visible())
- return false;
- if ((flags & Locked) && !locked())
- return false;
- if ((flags & Unlocked) && locked())
- return false;
- return true;
-}
-
-TQ_UINT8 KisLayer::opacity() const
-{
- return m_opacity;
-}
-
-void KisLayer::setOpacity(TQ_UINT8 val)
-{
- if (m_opacity != val)
- {
- m_opacity = val;
- setDirty();
- notifyPropertyChanged();
- }
-}
-
-KNamedCommand *KisLayer::setOpacityCommand(TQ_UINT8 newOpacity)
-{
- return new KisLayerOpacityCommand(this, opacity(), newOpacity);
-}
-
-KNamedCommand *KisLayer::setOpacityCommand(TQ_UINT8 prevOpacity, TQ_UINT8 newOpacity)
-{
- return new KisLayerOpacityCommand(this, prevOpacity, newOpacity);
-}
-
-const bool KisLayer::visible() const
-{
- return m_visible;
-}
-
-void KisLayer::setVisible(bool v)
-{
- if (m_visible != v) {
-
- m_visible = v;
- notifyPropertyChanged();
- setDirty();
-
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(setVisibleCommand(v));
- }
- }
-}
-
-KNamedCommand *KisLayer::setVisibleCommand(bool newVisibility)
-{
- return new KisLayerVisibilityCommand(this, newVisibility);
-}
-
-bool KisLayer::locked() const
-{
- return m_locked;
-}
-
-void KisLayer::setLocked(bool l)
-{
- if (m_locked != l) {
- m_locked = l;
- notifyPropertyChanged();
-
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(setLockedCommand(l));
- }
- }
-}
-
-bool KisLayer::temporary() const
-{
- return m_temporary;
-}
-
-void KisLayer::setTemporary(bool t)
-{
- m_temporary = t;
-}
-
-KNamedCommand *KisLayer::setLockedCommand(bool newLocked)
-{
- return new KisLayerLockedCommand(this, newLocked);
-}
-
-TQString KisLayer::name() const
-{
- return m_name;
-}
-
-void KisLayer::setName(const TQString& name)
-{
- if (!name.isEmpty() && m_name != name)
- {
- m_name = name;
- notifyPropertyChanged();
- }
-}
-
-void KisLayer::setCompositeOp(const KisCompositeOp& compositeOp)
-{
- if (m_compositeOp != compositeOp)
- {
- m_compositeOp = compositeOp;
- notifyPropertyChanged();
- setDirty();
-
- }
-}
-
-KNamedCommand *KisLayer::setCompositeOpCommand(const KisCompositeOp& newCompositeOp)
-{
- return new KisLayerCompositeOpCommand(this, compositeOp(), newCompositeOp);
-}
-
-KNamedCommand *KisLayer::moveCommand(TQPoint oldPosition, TQPoint newPosition)
-{
- return new KisLayerOffsetCommand(this, oldPosition, newPosition);
-}
-
-KisUndoAdapter *KisLayer::undoAdapter() const
-{
- if (m_image) {
- return m_image->undoAdapter();
- }
- return 0;
-}
-
-void KisLayer::paintMaskInactiveLayers(TQImage &, TQ_INT32, TQ_INT32, TQ_INT32, TQ_INT32)
-{
-}
-
-void KisLayer::paintSelection(TQImage &, TQ_INT32, TQ_INT32, TQ_INT32, TQ_INT32)
-{
-}
-
-void KisLayer::paintSelection(TQImage &, const TQRect&, const TQSize&, const TQSize&)
-{
-}
-
-TQImage KisLayer::createThumbnail(TQ_INT32, TQ_INT32)
-{
- return 0;
-}
-
-void KisLayer::notifyPropertyChanged()
-{
- if(image() && !signalsBlocked())
- image()->notifyPropertyChanged(this);
-}
-
-void KisLayerSupportsIndirectPainting::setTemporaryTarget(KisPaintDeviceSP t) {
- m_temporaryTarget = t;
-}
-
-void KisLayerSupportsIndirectPainting::setTemporaryCompositeOp(const KisCompositeOp& c) {
- m_compositeOp = c;
-}
-
-void KisLayerSupportsIndirectPainting::setTemporaryOpacity(TQ_UINT8 o) {
- m_compositeOpacity = o;
-}
-
-KisPaintDeviceSP KisLayerSupportsIndirectPainting::temporaryTarget() {
- return m_temporaryTarget;
-}
-
-KisCompositeOp KisLayerSupportsIndirectPainting::temporaryCompositeOp() const {
- return m_compositeOp;
-}
-
-TQ_UINT8 KisLayerSupportsIndirectPainting::temporaryOpacity() const {
- return m_compositeOpacity;
-}
-
-#include "kis_layer.moc"