Add "size" section to scene item transform info

This commit is contained in:
WarmUpTill
2021-08-23 20:43:54 +02:00
committed by WarmUpTill
parent 8fa3e8b038
commit c842595214
4 changed files with 50 additions and 57 deletions

View File

@@ -39,15 +39,7 @@ void loadTransformState(obs_data_t *obj, struct obs_transform_info &info,
struct obs_sceneitem_crop &crop);
bool saveTransformState(obs_data_t *obj, struct obs_transform_info &info,
struct obs_sceneitem_crop &crop);
/**
* Populate layout with labels and widgets based on provided text
*
* @param text Text based on which labels are generated and widgets are placed.
* @param layout Layout in which the widgets and labels will be placed.
* @param placeholders Map containing a mapping of placeholder strings to widgets.
* @param addStretch Add addStretch() to layout.
*/
std::string getSceneItemTransform(obs_scene_item *item);
void placeWidgets(std::string text, QBoxLayout *layout,
std::unordered_map<std::string, QWidget *> placeholders,
bool addStretch = true);

View File

@@ -18,24 +18,10 @@ bool MacroActionSceneTransform::PerformAction()
auto items = getSceneItemsWithName(scene, name);
for (auto &item : items) {
// Merge new settings with current settings
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_crop(item, &crop);
auto temp = obs_data_create();
saveTransformState(temp, info, crop);
auto temp2 = obs_data_create();
saveTransformState(temp, _info, _crop);
obs_data_apply(temp, temp2);
loadTransformState(temp, info, crop);
obs_data_release(temp);
obs_data_release(temp2);
// Apply settings
obs_sceneitem_defer_update_begin(item);
obs_sceneitem_set_info(item, &info);
obs_sceneitem_set_crop(item, &crop);
obs_sceneitem_set_info(item, &_info);
obs_sceneitem_set_crop(item, &_crop);
obs_sceneitem_defer_update_end(item);
obs_sceneitem_release(item);
@@ -95,6 +81,21 @@ void MacroActionSceneTransform::SetSettings(std::string &settings)
return;
}
loadTransformState(data, _info, _crop);
if (obs_data_has_user_value(data, "size")) {
auto obj = obs_data_get_obj(data, "size");
auto source = obs_weak_source_get_source(_source);
if (double h = obs_data_get_double(obj, "height")) {
_info.scale.y =
h / double(obs_source_get_height(source));
}
if (double w = obs_data_get_double(obj, "width")) {
_info.scale.x =
w / double(obs_source_get_width(source));
}
obs_data_release(obj);
obs_source_release(source);
}
obs_data_release(data);
}
@@ -202,16 +203,7 @@ void MacroActionSceneTransformEdit::GetSettingsClicked()
return;
}
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_crop(item, &crop);
auto data = obs_data_create();
saveTransformState(data, info, crop);
auto json = obs_data_get_json(data);
_settings->setPlainText(formatJsonString(json));
obs_data_release(data);
_settings->setPlainText(formatJsonString(getSceneItemTransform(item)));
}
void MacroActionSceneTransformEdit::SettingsChanged()

View File

@@ -21,20 +21,10 @@ bool MacroConditionSceneTransform::CheckCondition()
auto items = getSceneItemsWithName(scene, name);
for (auto &item : items) {
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_crop(item, &crop);
auto data = obs_data_create();
saveTransformState(data, info, crop);
auto json = obs_data_get_json(data);
auto json = getSceneItemTransform(item);
if (matchJson(json, _settings, _regex)) {
ret = true;
}
obs_data_release(data);
obs_sceneitem_release(item);
}
@@ -187,21 +177,11 @@ void MacroConditionSceneTransformEdit::GetSettingsClicked()
return;
}
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_crop(item, &crop);
auto data = obs_data_create();
saveTransformState(data, info, crop);
QString json = formatJsonString(obs_data_get_json(data));
QString json = formatJsonString(getSceneItemTransform(item));
if (_entryData->_regex) {
json = escapeForRegex(json);
}
_settings->setPlainText(json);
obs_data_release(data);
}
void MacroConditionSceneTransformEdit::SettingsChanged()

View File

@@ -140,6 +140,35 @@ getNextDelim(const std::string &text,
return res;
}
std::pair<double, double> getSceneItemSize(obs_scene_item *item)
{
std::pair<double, double> size;
obs_source_t *source = obs_sceneitem_get_source(item);
size.first = double(obs_source_get_width(source));
size.second = double(obs_source_get_height(source));
return size;
}
std::string getSceneItemTransform(obs_scene_item *item)
{
struct obs_transform_info info;
struct obs_sceneitem_crop crop;
obs_sceneitem_get_info(item, &info);
obs_sceneitem_get_crop(item, &crop);
auto size = getSceneItemSize(item);
auto data = obs_data_create();
saveTransformState(data, info, crop);
obs_data_t *obj = obs_data_create();
obs_data_set_double(obj, "width", size.first * info.scale.x);
obs_data_set_double(obj, "height", size.second * info.scale.y);
obs_data_set_obj(data, "size", obj);
obs_data_release(obj);
auto json = std::string(obs_data_get_json(data));
obs_data_release(data);
return json;
}
void placeWidgets(std::string text, QBoxLayout *layout,
std::unordered_map<std::string, QWidget *> placeholders,
bool addStretch)