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
+22 -22
View File
@@ -51,9 +51,9 @@ public:
virtual ~NodeView() override;
void set_contexts(const QVector<Node *> &nodes);
void set_contexts(const QVector<oak::Node> &nodes);
const QVector<Node *> &get_contexts() const
const QVector<oak::Node> &get_contexts() const
{
if (overlay_view_) {
return overlay_view_->get_contexts();
@@ -67,7 +67,7 @@ public:
return overlay_view_;
}
void close_contexts_belonging_to_project(Project *project);
void close_contexts_belonging_to_project(oak::Project project);
void clear_graph();
@@ -94,7 +94,7 @@ public:
void zoom_out();
const QVector<Node *> &get_current_contexts() const
const QVector<oak::Node> &get_current_contexts() const
{
return contexts_;
}
@@ -163,10 +163,10 @@ private:
void move_attached_nodes_to_cursor(const QPoint &p);
void process_moving_attached_nodes(const QPoint &pos);
QVector<Node *> process_dropping_attached_nodes(void *command,
Node *select_context,
QVector<oak::Node> process_dropping_attached_nodes(void *command,
oak::Node select_context,
const QPoint &pos);
Node *get_context_at_mouse_pos(const QPoint &p);
oak::Node get_context_at_mouse_pos(const QPoint &p);
void connect_selection_changed_signal();
void disconnect_selection_changed_signal();
@@ -176,18 +176,18 @@ private:
void clear_create_edge_input_if_necessary();
QPointF get_estimated_position_for_context(NodeViewItem *item,
Node *context) const;
oak::Node context) const;
NodeViewItem *get_assumed_item_for_selected_node(Node *node);
bool get_assumed_position_for_selected_node(Node *node, Node::Position *pos);
NodeViewItem *get_assumed_item_for_selected_node(oak::Node node);
bool get_assumed_position_for_selected_node(oak::Node node, NodeViewItemPosition *pos);
Menu *create_add_menu(Menu *parent);
void position_new_edge(const QPoint &pos);
void add_context(Node *n);
void add_context(oak::Node n);
void remove_context(Node *n);
void remove_context(oak::Node n);
bool is_item_attached_to_cursor(NodeViewItem *item) const;
@@ -197,8 +197,8 @@ private:
void end_edge_drag(bool cancel = false);
void post_paste(const QVector<Node *> &new_nodes,
const Node::PositionMap &map);
void post_paste(const QVector<oak::Node> &new_nodes,
const QHash<oak::Node, NodeViewItemPosition> &map);
void resize_overlay();
@@ -208,7 +208,7 @@ private:
struct AttachedItem {
NodeViewItem *item;
Node *node;
oak::Node node;
QPointF original_pos;
};
@@ -216,12 +216,12 @@ private:
QVector<AttachedItem> attached_items_;
NodeViewEdge *drop_edge_;
NodeInput drop_input_;
oak::Input drop_input_;
NodeViewEdge *create_edge_;
NodeViewItem *create_edge_output_item_;
NodeViewItem *create_edge_input_item_;
NodeInput create_edge_input_;
oak::Input create_edge_input_;
bool create_edge_already_exists_;
bool create_edge_from_output_;
@@ -229,11 +229,11 @@ private:
NodeViewScene scene_;
QVector<Node *> selected_nodes_;
QVector<oak::Node> selected_nodes_;
QVector<Node *> contexts_;
QVector<Node *> last_set_filter_nodes_;
QMap<Node *, QPointF> context_offsets_;
QVector<oak::Node> contexts_;
QVector<oak::Node> last_set_filter_nodes_;
QHash<oak::Node, QPointF> context_offsets_;
QMap<NodeViewItem *, QPointF> dragging_items_;
@@ -245,7 +245,7 @@ private:
EngineEventBridge *bridge_ = nullptr;
QHash<Node *, int64_t> removed_from_graph_subs_;
QHash<oak::Node, int64_t> removed_from_graph_subs_;
QAction *show_in_param_editor_action_;