mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-27 19:56:07 -05:00
Add "size" section to scene item transform info
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user