mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-19 17:49:14 +00:00
UI: Reenable copy/paste transform
This commit is contained in:
parent
f295bd9968
commit
648b47a6f5
|
@ -7770,6 +7770,8 @@ config_t *OBSBasic::Config() const
|
|||
void OBSBasic::UpdateEditMenu()
|
||||
{
|
||||
int idx = GetTopSelectedSourceItem();
|
||||
QModelIndexList items = GetAllSelectedSourceItems();
|
||||
int count = items.count();
|
||||
size_t filter_count = 0;
|
||||
OBSSceneItem sceneItem;
|
||||
OBSSource source;
|
||||
|
@ -7798,7 +7800,8 @@ void OBSBasic::UpdateEditMenu()
|
|||
|
||||
ui->actionCopySource->setEnabled(idx != -1);
|
||||
ui->actionEditTransform->setEnabled(idx != -1);
|
||||
ui->actionCopyTransform->setEnabled(idx != -1);
|
||||
ui->actionCopyTransform->setEnabled(count == 1);
|
||||
ui->actionPasteTransform->setEnabled(hasCopiedTransform && count > 0);
|
||||
ui->actionCopyFilters->setEnabled(filter_count > 0);
|
||||
ui->actionPasteFilters->setEnabled(
|
||||
!obs_weak_source_expired(copyFiltersSource) && idx != -1);
|
||||
|
@ -7849,7 +7852,13 @@ void OBSBasic::on_actionEditTransform_triggered()
|
|||
|
||||
void OBSBasic::on_actionCopyTransform_triggered()
|
||||
{
|
||||
OBSSceneItem item = GetCurrentSceneItem();
|
||||
|
||||
obs_sceneitem_get_info(item, &copiedTransformInfo);
|
||||
obs_sceneitem_get_crop(item, &copiedCropInfo);
|
||||
|
||||
ui->actionPasteTransform->setEnabled(true);
|
||||
hasCopiedTransform = true;
|
||||
}
|
||||
|
||||
void undo_redo(const std::string &data)
|
||||
|
@ -7863,6 +7872,37 @@ void undo_redo(const std::string &data)
|
|||
obs_scene_load_transform_states(data.c_str());
|
||||
}
|
||||
|
||||
void OBSBasic::on_actionPasteTransform_triggered()
|
||||
{
|
||||
OBSDataAutoRelease wrapper =
|
||||
obs_scene_save_transform_states(GetCurrentScene(), false);
|
||||
auto func = [](obs_scene_t *, obs_sceneitem_t *item, void *data) {
|
||||
if (!obs_sceneitem_selected(item))
|
||||
return true;
|
||||
|
||||
OBSBasic *main = reinterpret_cast<OBSBasic *>(data);
|
||||
|
||||
obs_sceneitem_defer_update_begin(item);
|
||||
obs_sceneitem_set_info(item, &main->copiedTransformInfo);
|
||||
obs_sceneitem_set_crop(item, &main->copiedCropInfo);
|
||||
obs_sceneitem_defer_update_end(item);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
obs_scene_enum_items(GetCurrentScene(), func, this);
|
||||
|
||||
OBSDataAutoRelease rwrapper =
|
||||
obs_scene_save_transform_states(GetCurrentScene(), false);
|
||||
|
||||
std::string undo_data(obs_data_get_json(wrapper));
|
||||
std::string redo_data(obs_data_get_json(rwrapper));
|
||||
undo_s.add_action(
|
||||
QTStr("Undo.Transform.Paste")
|
||||
.arg(obs_source_get_name(GetCurrentSceneSource())),
|
||||
undo_redo, undo_redo, undo_data, redo_data);
|
||||
}
|
||||
|
||||
static bool reset_tr(obs_scene_t *scene, obs_sceneitem_t *item, void *param)
|
||||
{
|
||||
if (obs_sceneitem_is_group(item))
|
||||
|
@ -9066,8 +9106,6 @@ void OBSBasic::on_actionCopySource_triggered()
|
|||
if (!item)
|
||||
continue;
|
||||
|
||||
on_actionCopyTransform_triggered();
|
||||
|
||||
OBSSource source = obs_sceneitem_get_source(item);
|
||||
|
||||
SourceCopyInfo copyInfo;
|
||||
|
|
|
@ -222,6 +222,9 @@ private:
|
|||
std::deque<SourceCopyInfo> clipboard;
|
||||
OBSWeakSourceAutoRelease copyFiltersSource;
|
||||
bool copyVisible = true;
|
||||
obs_transform_info copiedTransformInfo;
|
||||
obs_sceneitem_crop copiedCropInfo;
|
||||
bool hasCopiedTransform = false;
|
||||
|
||||
bool closing = false;
|
||||
QScopedPointer<QThread> devicePropertiesThread;
|
||||
|
@ -965,6 +968,7 @@ private slots:
|
|||
|
||||
void on_actionEditTransform_triggered();
|
||||
void on_actionCopyTransform_triggered();
|
||||
void on_actionPasteTransform_triggered();
|
||||
void on_actionRotate90CW_triggered();
|
||||
void on_actionRotate90CCW_triggered();
|
||||
void on_actionRotate180_triggered();
|
||||
|
|
Loading…
Reference in a new issue