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

Function reverse_frames

src/app/document_range_ops.cpp:345–406  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

343}
344
345void reverse_frames(Document* doc, const DocumentRange& range)
346{
347 const app::Context* context = static_cast<app::Context*>(doc->context());
348 const ContextReader reader(context);
349 ContextWriter writer(reader, 500);
350 Transaction transaction(writer.context(), "Reverse Frames");
351 DocumentApi api = doc->getApi(transaction);
352 Sprite* sprite = doc->sprite();
353 frame_t frameBegin, frameEnd;
354 int layerBegin, layerEnd;
355 bool moveFrames = false;
356 bool swapCels = false;
357
358 switch (range.type()) {
359 case DocumentRange::kCels:
360 frameBegin = range.frameBegin();
361 frameEnd = range.frameEnd();
362 layerBegin = range.layerBegin();
363 layerEnd = range.layerEnd() + 1;
364 swapCels = true;
365 break;
366 case DocumentRange::kFrames:
367 frameBegin = range.frameBegin();
368 frameEnd = range.frameEnd();
369 moveFrames = true;
370 break;
371 case DocumentRange::kLayers:
372 frameBegin = frame_t(0);
373 frameEnd = sprite->totalFrames()-1;
374 layerBegin = range.layerBegin();
375 layerEnd = range.layerEnd() + 1;
376 swapCels = true;
377 break;
378 }
379
380 if (moveFrames) {
381 for (frame_t frameRev = frameEnd+1;
382 frameRev > frameBegin;
383 --frameRev) {
384 api.moveFrame(sprite, frameBegin, frameRev);
385 }
386 }
387 else if (swapCels) {
388 std::vector<Layer*> layers;
389 sprite->getLayersList(layers);
390
391 for (int layerIdx = layerBegin; layerIdx != layerEnd; ++layerIdx) {
392 for (frame_t frame = frameBegin,
393 frameRev = frameEnd;
394 frame != (frameBegin+frameEnd)/2+1;
395 ++frame, --frameRev) {
396 if (frame == frameRev)
397 continue;
398
399 LayerImage* layer = static_cast<LayerImage*>(layers[layerIdx]);
400 api.swapCel(layer, frame, frameRev);
401 }
402 }

Callers 2

TEST_FFunction · 0.85
onExecuteMethod · 0.85

Calls 13

getApiMethod · 0.80
frameBeginMethod · 0.80
frameEndMethod · 0.80
layerBeginMethod · 0.80
layerEndMethod · 0.80
totalFramesMethod · 0.80
moveFrameMethod · 0.80
getLayersListMethod · 0.80
swapCelMethod · 0.80
contextMethod · 0.45
spriteMethod · 0.45
typeMethod · 0.45

Tested by 1

TEST_FFunction · 0.68