static void remove_cel(Sprite* sprite, UndoTransaction& undo, LayerImage *layer, Cel *cel) { Image *image; Cel *it; bool used; if (sprite != NULL && layer->isImage() && cel != NULL) { /* find if the image that use the cel to remove, is used by another cels */ used = false; for (FrameNumber frame(0); frame<sprite->getTotalFrames(); ++frame) { it = layer->getCel(frame); if (it != NULL && it != cel && it->getImage() == cel->getImage()) { used = true; break; } } if (!used) { // If the image is only used by this cel, we can remove the // image from the stock. image = sprite->getStock()->getImage(cel->getImage()); if (undo.isEnabled()) undo.pushUndoer(new undoers::RemoveImage(undo.getObjects(), sprite->getStock(), cel->getImage())); sprite->getStock()->removeImage(image); image_free(image); } if (undo.isEnabled()) { undo.pushUndoer(new undoers::RemoveCel(undo.getObjects(), layer, cel)); } // Remove the cel layer->removeCel(cel); delete cel; } }