void UndoTransaction::removeCel(LayerImage* layer, Cel* cel) { ASSERT(layer); ASSERT(cel); // find if the image that use the cel to remove, is used by // another cels bool used = false; for (int frame=0; frame<m_sprite->getTotalFrames(); ++frame) { Cel* it = layer->getCel(frame); if (it && it != cel && it->getImage() == cel->getImage()) { used = true; break; } } // if the image is only used by this cel, // we can remove the image from the stock if (!used) removeImageFromStock(cel->getImage()); if (isEnabled()) m_undoHistory->pushUndoer(new undoers::RemoveCel(m_undoHistory->getObjects(), layer, cel)); // remove the cel from the layer layer->removeCel(cel); // and here we destroy the cel delete cel; }
void DocumentApi::removeCel(LayerImage* layer, Cel* cel) { ASSERT(layer); ASSERT(cel); Sprite* sprite = layer->getSprite(); DocumentEvent ev(m_document); ev.sprite(sprite); ev.layer(layer); ev.cel(cel); m_document->notifyObservers<DocumentEvent&>(&DocumentObserver::onRemoveCel, ev); // find if the image that use the cel to remove, is used by // another cels bool used = false; for (FrameNumber frame(0); frame<sprite->getTotalFrames(); ++frame) { Cel* it = layer->getCel(frame); if (it && it != cel && it->getImage() == cel->getImage()) { used = true; break; } } // if the image is only used by this cel, // we can remove the image from the stock if (!used) removeImageFromStock(sprite, cel->getImage()); DocumentUndo* undo = m_document->getUndo(); if (undo->isEnabled()) m_undoers->pushUndoer(new undoers::RemoveCel(getObjects(), layer, cel)); // remove the cel from the layer layer->removeCel(cel); // and here we destroy the cel delete cel; }