Preserve per-layer document timelines
This commit is contained in:
@@ -444,32 +444,29 @@ pp::foundation::Result<pp::document::CanvasDocument> document_from_ppi_index(
|
||||
frames.push_back(pp::document::AnimationFrame { .duration_ms = frame.duration_ms });
|
||||
}
|
||||
|
||||
std::vector<std::vector<pp::document::AnimationFrame>> layer_frames;
|
||||
layer_frames.reserve(project.body.layers.size());
|
||||
std::vector<pp::document::DocumentLayerConfig> layers;
|
||||
layers.reserve(project.body.layers.size());
|
||||
for (const auto& layer : project.body.layers) {
|
||||
if (layer.frames.size() != reference_frames.size()) {
|
||||
return pp::foundation::Result<pp::document::CanvasDocument>::failure(
|
||||
pp::foundation::Status::invalid_argument("PPI per-layer frame counts are not representable yet"));
|
||||
}
|
||||
|
||||
for (std::size_t frame_index = 0; frame_index < layer.frames.size(); ++frame_index) {
|
||||
if (layer.frames[frame_index].duration_ms != reference_frames[frame_index].duration_ms) {
|
||||
return pp::foundation::Result<pp::document::CanvasDocument>::failure(
|
||||
pp::foundation::Status::invalid_argument("PPI per-layer frame durations are not representable yet"));
|
||||
}
|
||||
}
|
||||
|
||||
const auto blend_mode = ppi_layer_blend_mode(layer.blend_mode);
|
||||
if (!blend_mode) {
|
||||
return pp::foundation::Result<pp::document::CanvasDocument>::failure(blend_mode.status());
|
||||
}
|
||||
|
||||
auto& frame_list = layer_frames.emplace_back();
|
||||
frame_list.reserve(layer.frames.size());
|
||||
for (const auto& frame : layer.frames) {
|
||||
frame_list.push_back(pp::document::AnimationFrame { .duration_ms = frame.duration_ms });
|
||||
}
|
||||
|
||||
layers.push_back(pp::document::DocumentLayerConfig {
|
||||
.name = layer.name,
|
||||
.visible = layer.visible,
|
||||
.alpha_locked = layer.alpha_locked,
|
||||
.opacity = layer.opacity,
|
||||
.blend_mode = blend_mode.value(),
|
||||
.frames = std::span<const pp::document::AnimationFrame>(frame_list.data(), frame_list.size()),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -529,6 +526,21 @@ int load_project(int argc, char** argv)
|
||||
}
|
||||
std::cout << "\"" << json_escape(document.layers()[layer_index].name) << "\"";
|
||||
}
|
||||
std::cout << "],\"layerFrameCounts\":[";
|
||||
for (std::size_t layer_index = 0; layer_index < document.layers().size(); ++layer_index) {
|
||||
if (layer_index != 0U) {
|
||||
std::cout << ",";
|
||||
}
|
||||
std::cout << document.layers()[layer_index].frames.size();
|
||||
}
|
||||
std::cout << "],\"layerDurationsMs\":[";
|
||||
for (std::size_t layer_index = 0; layer_index < document.layers().size(); ++layer_index) {
|
||||
if (layer_index != 0U) {
|
||||
std::cout << ",";
|
||||
}
|
||||
const auto duration = document.layer_animation_duration_ms(layer_index);
|
||||
std::cout << (duration ? duration.value() : 0U);
|
||||
}
|
||||
std::cout << "]}}\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user