diff --git a/docs/modernization/build-inventory.md b/docs/modernization/build-inventory.md index 7ab0ccb..55139f5 100644 --- a/docs/modernization/build-inventory.md +++ b/docs/modernization/build-inventory.md @@ -416,8 +416,8 @@ Known local toolchain state: - `pano_cli plan-export-start` exposes `pp_app_core` export availability planning for license-gated, demo-blocked, and missing-canvas states as JSON; the live image, layer, animation-frame, depth, and cube-face export dialogs - consume the same start contract before reaching legacy canvas export - execution. + plus MP4 animation and timelapse export dialogs consume the same start + contract before reaching legacy canvas/recording export execution. - `pano_cli simulate-app-session` exposes `pp_app_core` project-open, app-close, save, save-as, save-version, and save-before-workflow decisions as JSON and is covered for clean, dirty, already-prompting, missing-canvas, diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index d4509db..7fbbce6 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -442,7 +442,8 @@ equirectangular image files, layer/frame collection stems, picked-directory stems, and MP4 suggested names used by the live export dialogs. `pano_cli plan-export-start` exposes the app-core export availability decision used by live image, layer, animation-frame, depth, and cube-face export dialogs -before they call legacy canvas export execution. +plus MP4 animation and timelapse export dialogs before they call legacy +canvas/recording export execution. `pano_cli parse-layout` exercises the XML layout path. Continue expanding document behavior toward legacy Canvas parity and then port OpenGL classes behind the renderer boundary. diff --git a/src/app_dialogs.cpp b/src/app_dialogs.cpp index e182ff4..cf985f7 100644 --- a/src/app_dialogs.cpp +++ b/src/app_dialogs.cpp @@ -680,6 +680,9 @@ void App::dialog_ppbr_export() void App::dialog_timelapse_export() { + if (!can_start_document_export(*this, false)) + return; + #if __IOS__ || __WEB__ const auto target = pp::app::make_document_export_suggested_name(doc_name, "-timelapse"); if (!target) { @@ -708,6 +711,9 @@ void App::dialog_timelapse_export() void App::dialog_export_mp4() { + if (!can_start_document_export(*this, false)) + return; + #if __IOS__ || __WEB__ const auto target = pp::app::make_document_export_suggested_name(doc_name, "-animation"); if (!target) {