Răsfoiți Sursa

UI: Allow centering/stretching for groups items

jp9000 7 ani în urmă
părinte
comite
90327563e8
1 a modificat fișierele cu 26 adăugiri și 24 ștergeri
  1. 26 24
      UI/window-basic-main.cpp

+ 26 - 24
UI/window-basic-main.cpp

@@ -5677,6 +5677,9 @@ static bool CenterAlignSelectedItems(obs_scene_t *scene, obs_sceneitem_t *item,
 {
 	obs_bounds_type boundsType = *reinterpret_cast<obs_bounds_type*>(param);
 
+	if (obs_sceneitem_is_group(item))
+		obs_sceneitem_group_enum_items(item, CenterAlignSelectedItems,
+				param);
 	if (!obs_sceneitem_selected(item))
 		return true;
 
@@ -5714,39 +5717,38 @@ void OBSBasic::on_actionStretchToScreen_triggered()
 			&boundsType);
 }
 
-void OBSBasic::on_actionCenterToScreen_triggered()
+static bool center_to_scene(obs_scene_t *, obs_sceneitem_t *item, void *)
 {
-	auto func = [] (obs_scene_t *scene, obs_sceneitem_t *item, void *param)
-	{
-		vec3 tl, br, itemCenter, screenCenter, offset;
-		obs_video_info ovi;
-
-		if (!obs_sceneitem_selected(item))
-			return true;
+	vec3 tl, br, itemCenter, screenCenter, offset;
+	obs_video_info ovi;
 
-		obs_get_video_info(&ovi);
+	if (obs_sceneitem_is_group(item))
+		obs_sceneitem_group_enum_items(item, center_to_scene, nullptr);
+	if (!obs_sceneitem_selected(item))
+		return true;
 
-		vec3_set(&screenCenter, float(ovi.base_width),
-				float(ovi.base_height), 0.0f);
-		vec3_mulf(&screenCenter, &screenCenter, 0.5f);
+	obs_get_video_info(&ovi);
 
-		GetItemBox(item, tl, br);
+	vec3_set(&screenCenter, float(ovi.base_width),
+			float(ovi.base_height), 0.0f);
+	vec3_mulf(&screenCenter, &screenCenter, 0.5f);
 
-		vec3_sub(&itemCenter, &br, &tl);
-		vec3_mulf(&itemCenter, &itemCenter, 0.5f);
-		vec3_add(&itemCenter, &itemCenter, &tl);
+	GetItemBox(item, tl, br);
 
-		vec3_sub(&offset, &screenCenter, &itemCenter);
-		vec3_add(&tl, &tl, &offset);
+	vec3_sub(&itemCenter, &br, &tl);
+	vec3_mulf(&itemCenter, &itemCenter, 0.5f);
+	vec3_add(&itemCenter, &itemCenter, &tl);
 
-		SetItemTL(item, tl);
+	vec3_sub(&offset, &screenCenter, &itemCenter);
+	vec3_add(&tl, &tl, &offset);
 
-		UNUSED_PARAMETER(scene);
-		UNUSED_PARAMETER(param);
-		return true;
-	};
+	SetItemTL(item, tl);
+	return true;
+};
 
-	obs_scene_enum_items(GetCurrentScene(), func, nullptr);
+void OBSBasic::on_actionCenterToScreen_triggered()
+{
+	obs_scene_enum_items(GetCurrentScene(), center_to_scene, nullptr);
 }
 
 void OBSBasic::EnablePreviewDisplay(bool enable)