MCPcopy Create free account
hub / github.com/LibreSprite/LibreSprite / duplicate

Method duplicate

src/app/document.cpp:361–429  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

359}
360
361Document* Document::duplicate(DuplicateType type) const
362{
363 const Sprite* sourceSprite = sprite();
364 std::unique_ptr<Sprite> spriteCopyPtr(new Sprite(
365 sourceSprite->pixelFormat(),
366 sourceSprite->width(),
367 sourceSprite->height(),
368 sourceSprite->palette(frame_t(0))->size()));
369
370 std::unique_ptr<Document> documentCopy(new Document(spriteCopyPtr.get()));
371 Sprite* spriteCopy = spriteCopyPtr.release();
372
373 spriteCopy->setTotalFrames(sourceSprite->totalFrames());
374
375 // Copy frames duration
376 for (frame_t i(0); i < sourceSprite->totalFrames(); ++i)
377 spriteCopy->setFrameDuration(i, sourceSprite->frameDuration(i));
378
379 // Copy frame tags
380 for (const FrameTag* tag : sourceSprite->frameTags())
381 spriteCopy->frameTags().add(new FrameTag(*tag));
382
383 // Copy color palettes
384 {
385 PalettesList::const_iterator it = sourceSprite->getPalettes().begin();
386 PalettesList::const_iterator end = sourceSprite->getPalettes().end();
387 for (; it != end; ++it) {
388 spriteCopy->setPalette(**it, true);
389 }
390 }
391
392 switch (type) {
393
394 case DuplicateExactCopy:
395 // Copy the layer folder
396 copyLayerContent(sourceSprite->folder(), documentCopy.get(), spriteCopy->folder());
397
398 ASSERT((spriteCopy->backgroundLayer() && sourceSprite->backgroundLayer()) ||
399 (!spriteCopy->backgroundLayer() && !sourceSprite->backgroundLayer()));
400 break;
401
402 case DuplicateWithFlattenLayers:
403 {
404 // Flatten layers
405 ASSERT(sourceSprite->folder() != NULL);
406
407 LayerImage* flatLayer = create_flatten_layer_copy
408 (spriteCopy,
409 sourceSprite->folder(),
410 gfx::Rect(0, 0, sourceSprite->width(), sourceSprite->height()),
411 frame_t(0), sourceSprite->lastFrame());
412
413 // Add and select the new flat layer
414 spriteCopy->folder()->addLayer(flatLayer);
415
416 // Configure the layer as background only if the original
417 // sprite has a background layer.
418 if (sourceSprite->backgroundLayer() != NULL)

Callers 1

onExecuteMethod · 0.80

Calls 15

totalFramesMethod · 0.80
frameDurationMethod · 0.80
folderMethod · 0.80
backgroundLayerMethod · 0.80
configureAsBackgroundMethod · 0.80
pixelFormatMethod · 0.45
widthMethod · 0.45
heightMethod · 0.45
sizeMethod · 0.45
paletteMethod · 0.45

Tested by

no test coverage detected