frontend: Add frontend API canvas methods
This commit is contained in:
parent
368185019e
commit
8441c04c73
@ -689,6 +689,26 @@ void OBSStudioAPI::obs_frontend_add_undo_redo_action(const char *name, const und
|
|||||||
[redo](const std::string &data) { redo(data.c_str()); }, undo_data, redo_data, repeatable);
|
[redo](const std::string &data) { redo(data.c_str()); }, undo_data, redo_data, repeatable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OBSStudioAPI::obs_frontend_get_canvases(obs_frontend_canvas_list *canvas_list)
|
||||||
|
{
|
||||||
|
for (const auto &canvas : main->canvases) {
|
||||||
|
obs_canvas_t *ref = obs_canvas_get_ref(canvas);
|
||||||
|
if (ref)
|
||||||
|
da_push_back(canvas_list->canvases, &ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_canvas_t *OBSStudioAPI::obs_frontend_add_canvas(const char *name, obs_video_info *ovi, int flags)
|
||||||
|
{
|
||||||
|
auto &canvas = main->AddCanvas(std::string(name), ovi, flags);
|
||||||
|
return obs_canvas_get_ref(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OBSStudioAPI::obs_frontend_remove_canvas(obs_canvas_t *canvas)
|
||||||
|
{
|
||||||
|
return main->RemoveCanvas(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
void OBSStudioAPI::on_load(obs_data_t *settings)
|
void OBSStudioAPI::on_load(obs_data_t *settings)
|
||||||
{
|
{
|
||||||
for (size_t i = saveCallbacks.size(); i > 0; i--) {
|
for (size_t i = saveCallbacks.size(); i > 0; i--) {
|
||||||
|
@ -224,6 +224,12 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
|||||||
void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo, const undo_redo_cb redo,
|
void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo, const undo_redo_cb redo,
|
||||||
const char *undo_data, const char *redo_data, bool repeatable) override;
|
const char *undo_data, const char *redo_data, bool repeatable) override;
|
||||||
|
|
||||||
|
void obs_frontend_get_canvases(obs_frontend_canvas_list *canvas_list) override;
|
||||||
|
|
||||||
|
obs_canvas_t *obs_frontend_add_canvas(const char *name, obs_video_info *ovi, int flags) override;
|
||||||
|
|
||||||
|
bool obs_frontend_remove_canvas(obs_canvas_t *canvas) override;
|
||||||
|
|
||||||
void on_load(obs_data_t *settings) override;
|
void on_load(obs_data_t *settings) override;
|
||||||
|
|
||||||
void on_preload(obs_data_t *settings) override;
|
void on_preload(obs_data_t *settings) override;
|
||||||
|
@ -597,3 +597,19 @@ void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo
|
|||||||
if (callbacks_valid())
|
if (callbacks_valid())
|
||||||
c->obs_frontend_add_undo_redo_action(name, undo, redo, undo_data, redo_data, repeatable);
|
c->obs_frontend_add_undo_redo_action(name, undo, redo, undo_data, redo_data, repeatable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obs_frontend_get_canvases(obs_frontend_canvas_list *canvas_list)
|
||||||
|
{
|
||||||
|
if (callbacks_valid())
|
||||||
|
c->obs_frontend_get_canvases(canvas_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_canvas_t *obs_frontend_add_canvas(const char *name, obs_video_info *ovi, int flags)
|
||||||
|
{
|
||||||
|
return !!callbacks_valid() ? c->obs_frontend_add_canvas(name, ovi, flags) : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool obs_frontend_remove_canvas(obs_canvas_t *canvas)
|
||||||
|
{
|
||||||
|
return !!callbacks_valid() ? c->obs_frontend_remove_canvas(canvas) : false;
|
||||||
|
}
|
||||||
|
@ -62,6 +62,9 @@ enum obs_frontend_event {
|
|||||||
OBS_FRONTEND_EVENT_SCENE_COLLECTION_RENAMED,
|
OBS_FRONTEND_EVENT_SCENE_COLLECTION_RENAMED,
|
||||||
OBS_FRONTEND_EVENT_THEME_CHANGED,
|
OBS_FRONTEND_EVENT_THEME_CHANGED,
|
||||||
OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN,
|
OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN,
|
||||||
|
|
||||||
|
OBS_FRONTEND_EVENT_CANVAS_ADDED,
|
||||||
|
OBS_FRONTEND_EVENT_CANVAS_REMOVED,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
@ -80,6 +83,19 @@ static inline void obs_frontend_source_list_free(struct obs_frontend_source_list
|
|||||||
da_free(source_list->sources);
|
da_free(source_list->sources);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct obs_frontend_canvas_list {
|
||||||
|
DARRAY(obs_canvas_t *) canvases;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void obs_frontend_canvas_list_free(struct obs_frontend_canvas_list *canvas_list)
|
||||||
|
{
|
||||||
|
size_t num = canvas_list->canvases.num;
|
||||||
|
for (size_t i = 0; i < num; i++)
|
||||||
|
obs_canvas_release(canvas_list->canvases.array[i]);
|
||||||
|
|
||||||
|
da_free(canvas_list->canvases);
|
||||||
|
}
|
||||||
|
|
||||||
#endif //!SWIG
|
#endif //!SWIG
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
@ -238,6 +254,10 @@ typedef void (*undo_redo_cb)(const char *data);
|
|||||||
EXPORT void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo, const undo_redo_cb redo,
|
EXPORT void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo, const undo_redo_cb redo,
|
||||||
const char *undo_data, const char *redo_data, bool repeatable);
|
const char *undo_data, const char *redo_data, bool repeatable);
|
||||||
|
|
||||||
|
EXPORT void obs_frontend_get_canvases(struct obs_frontend_canvas_list *canvas_list);
|
||||||
|
EXPORT obs_canvas_t *obs_frontend_add_canvas(const char *name, struct obs_video_info *ovi, int flags);
|
||||||
|
EXPORT bool obs_frontend_remove_canvas(obs_canvas_t *canvas);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -137,6 +137,10 @@ struct obs_frontend_callbacks {
|
|||||||
virtual void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo,
|
virtual void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo,
|
||||||
const undo_redo_cb redo, const char *undo_data,
|
const undo_redo_cb redo, const char *undo_data,
|
||||||
const char *redo_data, bool repeatable) = 0;
|
const char *redo_data, bool repeatable) = 0;
|
||||||
|
|
||||||
|
virtual obs_canvas_t *obs_frontend_add_canvas(const char *name, obs_video_info *ovi, int flags) = 0;
|
||||||
|
virtual bool obs_frontend_remove_canvas(obs_canvas_t *canvas) = 0;
|
||||||
|
virtual void obs_frontend_get_canvases(obs_frontend_canvas_list *canvas_list) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPORT void obs_frontend_set_callbacks_internal(obs_frontend_callbacks *callbacks);
|
EXPORT void obs_frontend_set_callbacks_internal(obs_frontend_callbacks *callbacks);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user