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:
parent
66d210cf1b
commit
f275080abb
@ -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 ¢erType)
|
||||
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, ©Info.transform);
|
||||
obs_sceneitem_get_info2(item, ©Info.transform);
|
||||
obs_sceneitem_get_crop(item, ©Info.crop);
|
||||
copyInfo.blend_method = obs_sceneitem_get_blending_method(item);
|
||||
copyInfo.blend_mode = obs_sceneitem_get_blending_mode(item);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user