From 3b7521a47ae731f0bf0a922822e4417493489539 Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Wed, 09 Jul 2025 10:42:02 +0000
Subject: [PATCH] 小窗布局,小窗移动

---
 LiveProject/activity/stream/LiveActivity.swift |   22 +++++++++++++++++++---
 1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/LiveProject/activity/stream/LiveActivity.swift b/LiveProject/activity/stream/LiveActivity.swift
index 57e7890..045e563 100644
--- a/LiveProject/activity/stream/LiveActivity.swift
+++ b/LiveProject/activity/stream/LiveActivity.swift
@@ -25,6 +25,7 @@
                                   DeviceInfo(name: "话筒", type: .MICROPHONE,deviceId: UUID().uuidString,icon: Icons.MIC),
                                   DeviceInfo(name: "系统", type: .SYSTEM,deviceId : UUID().uuidString,icon: Icons.PORTRAIT)]
 
+    @State private var miniWindows:Array<MiniWindowData> = []
     
     @StateObject private var mViewModel = LiveViewModel()
     
@@ -32,10 +33,14 @@
         ZStack{
             Color.clear
                 .ignoresSafeArea() // 填满全屏
-            VStack{
+            ZStack{
                 VideoRendererView(pixelBuffer: $mViewModel.pixelBuffer).background(Color.black).frame(width: mainSize.width,height:mainSize.height)
-                Spacer()
+                    .frame(maxWidth: .infinity,maxHeight: .infinity,alignment: .topTrailing)
+                ForEach(miniWindows, id: \.id) { miniWindow in
+                    NewMiniWindow(miniWindow: miniWindow)
+                }
             }.border(Color.blue)
+            
             VStack{
                 Spacer()
                 BottomBtns().frame(alignment: .bottom).border(Color.green)
@@ -156,8 +161,9 @@
                                 withAnimation{
                                     showDeviceDialog = false;
                                 }
+                                miniWindows.append(MiniWindowData(streamType: device.type))
                             }
-                            print("\(device.name) click")
+                            print("\(device.name) click \(self.miniWindows.count)")
                         }
                     }
                 }
@@ -221,6 +227,16 @@
             }
         }
     }
+    
+    func NewMiniWindow(miniWindow:MiniWindowData) -> some View{
+        MiniWindow(miniData: miniWindow)
+            .frame(maxWidth: .infinity,maxHeight: .infinity,alignment: .topLeading)
+            .onCloseClick {
+                guard let index = miniWindows.firstIndex(where: { $0.id == miniWindow.id }) else { return }
+                miniWindows.remove(at: index)
+            }
+    }
+    
 }
 
 

--
Gitblit v1.9.1