Export captured canvas snapshots through document writer

This commit is contained in:
2026-06-05 18:24:58 +02:00
parent 9a75782891
commit ba5c3069e1
8 changed files with 115 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "document/document.h"
#include "document/ppi_export.h"
#include "foundation/result.h"
#include <algorithm>
@@ -77,6 +78,11 @@ struct DocumentCanvasSaveSnapshotReport {
bool can_export_ppi = false;
};
struct DocumentCanvasPpiExportResult {
DocumentCanvasSaveSnapshotReport report;
std::vector<std::byte> bytes;
};
class DocumentCanvasClearServices {
public:
virtual ~DocumentCanvasClearServices() = default;
@@ -242,6 +248,27 @@ public:
};
}
[[nodiscard]] inline pp::foundation::Result<DocumentCanvasPpiExportResult>
export_document_canvas_save_snapshot_to_ppi(const DocumentCanvasSnapshotResult& snapshot)
{
const auto report = make_document_canvas_save_snapshot_report(snapshot);
if (!report.can_export_ppi) {
return pp::foundation::Result<DocumentCanvasPpiExportResult>::failure(
pp::foundation::Status::invalid_argument(
"canvas document snapshot still requires renderer payload readback"));
}
auto bytes = pp::document::export_ppi_project_document(snapshot.document);
if (!bytes) {
return pp::foundation::Result<DocumentCanvasPpiExportResult>::failure(bytes.status());
}
return pp::foundation::Result<DocumentCanvasPpiExportResult>::success(DocumentCanvasPpiExportResult {
.report = report,
.bytes = std::move(bytes.value()),
});
}
[[nodiscard]] inline pp::foundation::Result<DocumentCanvasClearPlan> plan_document_canvas_clear(
bool has_canvas,
float r = 0.0F,