0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00

libobs: Fix crop to bounds ABI break

This commit is contained in:
Exeldro 2024-02-19 22:19:33 +01:00 committed by Lain
parent 66d210cf1b
commit f275080abb
6 changed files with 54 additions and 18 deletions

View File

@ -8666,7 +8666,7 @@ void OBSBasic::on_actionCopyTransform_triggered()
{
OBSSceneItem item = GetCurrentSceneItem();
obs_sceneitem_get_info(item, &copiedTransformInfo);
obs_sceneitem_get_info2(item, &copiedTransformInfo);
obs_sceneitem_get_crop(item, &copiedCropInfo);
ui->actionPasteTransform->setEnabled(true);
@ -8697,7 +8697,7 @@ void OBSBasic::on_actionPasteTransform_triggered()
OBSBasic *main = reinterpret_cast<OBSBasic *>(data);
obs_sceneitem_defer_update_begin(item);
obs_sceneitem_set_info(item, &main->copiedTransformInfo);
obs_sceneitem_set_info2(item, &main->copiedTransformInfo);
obs_sceneitem_set_crop(item, &main->copiedCropInfo);
obs_sceneitem_defer_update_end(item);
@ -8735,8 +8735,9 @@ static bool reset_tr(obs_scene_t * /* scene */, obs_sceneitem_t *item, void *)
info.alignment = OBS_ALIGN_TOP | OBS_ALIGN_LEFT;
info.bounds_type = OBS_BOUNDS_NONE;
info.bounds_alignment = OBS_ALIGN_CENTER;
info.crop_to_bounds = false;
vec2_set(&info.bounds, 0.0f, 0.0f);
obs_sceneitem_set_info(item, &info);
obs_sceneitem_set_info2(item, &info);
obs_sceneitem_crop crop = {};
obs_sceneitem_set_crop(item, &crop);
@ -8979,8 +8980,9 @@ static bool CenterAlignSelectedItems(obs_scene_t * /* scene */,
float(ovi.base_height));
itemInfo.bounds_type = boundsType;
itemInfo.bounds_alignment = OBS_ALIGN_CENTER;
itemInfo.crop_to_bounds = obs_sceneitem_get_bounds_crop(item);
obs_sceneitem_set_info(item, &itemInfo);
obs_sceneitem_set_info2(item, &itemInfo);
return true;
}
@ -9034,7 +9036,7 @@ void OBSBasic::CenterSelectedSceneItems(const CenterType &centerType)
for (int x = 0; x < selectedItems.count(); x++) {
OBSSceneItem item = ui->sources->Get(selectedItems[x].row());
obs_transform_info oti;
obs_sceneitem_get_info(item, &oti);
obs_sceneitem_get_info2(item, &oti);
obs_source_t *source = obs_sceneitem_get_source(item);
float width = float(obs_source_get_width(source)) * oti.scale.x;
@ -10021,7 +10023,7 @@ void OBSBasic::on_actionCopySource_triggered()
SourceCopyInfo copyInfo;
copyInfo.weak_source = OBSGetWeakRef(source);
obs_sceneitem_get_info(item, &copyInfo.transform);
obs_sceneitem_get_info2(item, &copyInfo.transform);
obs_sceneitem_get_crop(item, &copyInfo.crop);
copyInfo.blend_method = obs_sceneitem_get_blending_method(item);
copyInfo.blend_mode = obs_sceneitem_get_blending_mode(item);

View File

@ -1969,7 +1969,7 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *, obs_sceneitem_t *item,
GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawSelectedOverflow");
obs_transform_info info;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_info2(item, &info);
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_REPEAT);
gs_eparam_t *image = gs_effect_get_param_by_name(solid, "image");
@ -2013,7 +2013,7 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *, obs_sceneitem_t *item,
matrix4 mat;
obs_transform_info groupInfo;
obs_sceneitem_get_draw_transform(item, &mat);
obs_sceneitem_get_info(item, &groupInfo);
obs_sceneitem_get_info2(item, &groupInfo);
prev->groupRot = groupInfo.rot;
@ -2095,7 +2095,7 @@ bool OBSBasicPreview::DrawSelectedItem(obs_scene_t *, obs_sceneitem_t *item,
boxScale.y *= curTransform.y.y;
obs_transform_info info;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_info2(item, &info);
gs_matrix_push();
gs_matrix_mul(&boxTransform);
@ -2523,7 +2523,7 @@ void OBSBasicPreview::DrawSpacingHelpers()
obs_sceneitem_get_box_transform(item, &boxTransform);
obs_transform_info oti;
obs_sceneitem_get_info(item, &oti);
obs_sceneitem_get_info2(item, &oti);
obs_video_info ovi;
obs_get_video_info(&ovi);
@ -2545,7 +2545,7 @@ void OBSBasicPreview::DrawSpacingHelpers()
if (parentGroup) {
obs_transform_info groupOti;
obs_sceneitem_get_info(parentGroup, &groupOti);
obs_sceneitem_get_info2(parentGroup, &groupOti);
//Correct the scene item rotation angle
rot = oti.rot + groupOti.rot;

View File

@ -122,7 +122,7 @@ static void AddSource(void *_data, obs_scene_t *scene)
sceneitem = obs_scene_add(scene, data->source);
if (data->transform != nullptr)
obs_sceneitem_set_info(sceneitem, data->transform);
obs_sceneitem_set_info2(sceneitem, data->transform);
if (data->crop != nullptr)
obs_sceneitem_set_crop(sceneitem, data->crop);
if (data->blend_method != nullptr)

View File

@ -267,7 +267,7 @@ void OBSBasicTransform::RefreshControls()
obs_transform_info osi;
obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &osi);
obs_sceneitem_get_info2(item, &osi);
obs_sceneitem_get_crop(item, &crop);
obs_source_t *source = obs_sceneitem_get_source(item);
@ -347,7 +347,7 @@ void OBSBasicTransform::OnControlChanged()
double height = double(source_cy);
obs_transform_info oti;
obs_sceneitem_get_info(item, &oti);
obs_sceneitem_get_info2(item, &oti);
/* do not scale a source if it has 0 width/height */
if (source_cx != 0 && source_cy != 0) {
@ -367,7 +367,7 @@ void OBSBasicTransform::OnControlChanged()
oti.crop_to_bounds = ui->cropToBounds->isChecked();
ignoreTransformSignal = true;
obs_sceneitem_set_info(item, &oti);
obs_sceneitem_set_info2(item, &oti);
ignoreTransformSignal = false;
}

View File

@ -2406,7 +2406,7 @@ bool save_transform_states(obs_scene_t *scene, obs_sceneitem_t *item,
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_info2(item, &info);
obs_sceneitem_get_crop(item, &crop);
struct vec2 pos = info.pos;
@ -2518,7 +2518,7 @@ void load_transform_states(obs_data_t *temp, void *vp_scene)
obs_sceneitem_defer_update_begin(item);
obs_sceneitem_set_info(item, &info);
obs_sceneitem_set_info2(item, &info);
obs_sceneitem_set_crop(item, &crop);
obs_sceneitem_defer_update_end(item);
@ -2827,6 +2827,20 @@ void obs_sceneitem_get_bounds(const obs_sceneitem_t *item, struct vec2 *bounds)
void obs_sceneitem_get_info(const obs_sceneitem_t *item,
struct obs_transform_info *info)
{
if (item && info) {
info->pos = item->pos;
info->rot = item->rot;
info->scale = item->scale;
info->alignment = item->align;
info->bounds_type = item->bounds_type;
info->bounds_alignment = item->bounds_align;
info->bounds = item->bounds;
}
}
void obs_sceneitem_get_info2(const obs_sceneitem_t *item,
struct obs_transform_info *info)
{
if (item && info) {
info->pos = item->pos;
@ -2842,6 +2856,23 @@ void obs_sceneitem_get_info(const obs_sceneitem_t *item,
void obs_sceneitem_set_info(obs_sceneitem_t *item,
const struct obs_transform_info *info)
{
if (item && info) {
item->pos = info->pos;
item->rot = info->rot;
if (isfinite(info->scale.x) && isfinite(info->scale.y)) {
item->scale = info->scale;
}
item->align = info->alignment;
item->bounds_type = info->bounds_type;
item->bounds_align = info->bounds_alignment;
item->bounds = info->bounds;
do_update_transform(item);
}
}
void obs_sceneitem_set_info2(obs_sceneitem_t *item,
const struct obs_transform_info *info)
{
if (item && info) {
item->pos = info->pos;

View File

@ -1885,11 +1885,14 @@ EXPORT uint32_t obs_sceneitem_get_bounds_alignment(const obs_sceneitem_t *item);
EXPORT bool obs_sceneitem_get_bounds_crop(const obs_sceneitem_t *item);
EXPORT void obs_sceneitem_get_bounds(const obs_sceneitem_t *item,
struct vec2 *bounds);
EXPORT void obs_sceneitem_get_info(const obs_sceneitem_t *item,
struct obs_transform_info *info);
EXPORT void obs_sceneitem_set_info(obs_sceneitem_t *item,
const struct obs_transform_info *info);
EXPORT void obs_sceneitem_get_info2(const obs_sceneitem_t *item,
struct obs_transform_info *info);
EXPORT void obs_sceneitem_set_info2(obs_sceneitem_t *item,
const struct obs_transform_info *info);
EXPORT void obs_sceneitem_get_draw_transform(const obs_sceneitem_t *item,
struct matrix4 *transform);