R8: finish app/ pure C ABI migration (P3-P9) and make OTIO required

- app/ no longer includes engine C++ headers nor holds engine C++ types:
  engine access goes through the oakengine C ABI plus C++ wrappers
  (oakutil/oaknode.h, oakutil/oakvideo.h) and app-local mirror types
  (tooltypes, trackreferencehandle, timelinecommonapp, keyframetypes,
  subtitleapp, serializedlayoutinfoapp, nodevaluehandle, sliderdisplaytypeapp)
- engine: new C ABI functions for block/track/clip/transition navigation
  and predicates, links, caches, waveform/playback, disk folder,
  sequence_track_list, node_free, footage_is_valid, block_get_track,
  get_brush; loadotio/saveotio ported to the current engine API
- OTIO is now a required dependency: CI and CD build it on every
  platform, FindOpenTimelineIO fixed for OTIO 0.16/0.19 (the old deps
  include requirement silently disabled OTIO everywhere), runtime
  libraries are bundled into packages and copied next to macOS binaries
  (oak_copy_otio_runtime)
- fix ProjectViewModel drag&drop mime read/write size mismatch (segfault)
- unify color label naming (k_olive -> "Oak") in the app-side mirror
- docs: OTIO required, FFmpeg minimum corrected to 6.0 (en/zh)
- gtest suite: 1925 passed, 0 failed
This commit is contained in:
2026-07-31 22:46:52 +08:00
parent 18aed979a2
commit 66d761b4b7
285 changed files with 13261 additions and 5895 deletions
+42
View File
@@ -156,6 +156,48 @@ OAKENGINE_API int oakengine_gizmo_drag_move(void *gizmo,
*/
OAKENGINE_API int oakengine_gizmo_drag_end(void *gizmo, void *command);
/**
* @brief 1 if the gizmo is visible (NodeGizmo::is_visible()).
*/
OAKENGINE_API int oakengine_gizmo_is_visible(void *gizmo);
/**
* @brief Draw the gizmo using the given QPainter (passed as void*).
* The painter must be a valid QPainter*. Returns OAKENGINE_OK or
* OAKENGINE_E_INVALID.
*/
OAKENGINE_API int oakengine_gizmo_draw(void *gizmo, void *painter);
/**
* @brief Set the globals on a gizmo (NodeGizmo::set_globals()).
* `video_width`/`video_height` describe the resolution; `time_num`/
* `time_den` are rational seconds.
*/
OAKENGINE_API int oakengine_gizmo_set_globals(void *gizmo,
int video_width, int video_height,
int64_t time_num, int64_t time_den);
/**
* @brief Unified gizmo hit-test used by the viewer to pick a gizmo under
* the cursor (replaces the app-side dynamic_cast chain over PointGizmo /
* PolygonGizmo / PathGizmo / ScreenGizmo).
*
* Returns 1 when the gizmo is visible AND the point (`px`,`py`, in gizmo
* scene space) hits it, 0 otherwise. `transform6` is the affine QTransform
* used for drawing, passed as six doubles in the order
* {m11, m12, m21, m22, dx, dy} (it is only needed by point gizmos, whose
* clicking rect depends on the draw transform; other types may ignore it).
*
* Per-type semantics mirror the original viewer logic:
* - PointGizmo: get_clicking_rect(transform).contains(p)
* - PolygonGizmo: get_polygon().containsPoint(p, Qt::OddEvenFill)
* - PathGizmo: get_path().contains(p)
* - ScreenGizmo: always hittable (returns 1 when visible)
* - TextGizmo / other: never hittable via this call (returns 0)
*/
OAKENGINE_API int oakengine_gizmo_hit_test(void *gizmo,
const double *transform6, double px, double py);
#ifdef __cplusplus
}
#endif