From aa10440bc91befbb8a51e6858e722d240278dd00 Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Fri, 8 Nov 2024 11:33:02 +0100 Subject: [PATCH] Make preview video draggable in simple calls --- Linphone/UI/Call/CallView.swift | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/Linphone/UI/Call/CallView.swift b/Linphone/UI/Call/CallView.swift index f8fdbab45..bc90b7ace 100644 --- a/Linphone/UI/Call/CallView.swift +++ b/Linphone/UI/Call/CallView.swift @@ -59,7 +59,8 @@ struct CallView: View { @State private var pointingUp: CGFloat = 0.0 @State private var currentOffset: CGFloat = 0.0 @State var displayVideo = false - @State private var previewVideoLocation = CGPoint(x: 0, y: 0) + @State private var previewVideoOffset = CGSize.zero + @State private var previewVideoOffsetPreviousDrag = CGSize.zero @Binding var fullscreenVideo: Bool @State var isShowCallsListFragment: Bool = false @@ -566,8 +567,20 @@ struct CallView: View { maxHeight: callViewModel.callStatsModel.sentVideoWindow.heightFactor * 256) .clipped() } - .frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2) + .frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2) // 144*192 .cornerRadius(20) + .gesture( + DragGesture(coordinateSpace: .global) + .onChanged { value in + previewVideoOffset = CGSize(width: previewVideoOffsetPreviousDrag.width + value.translation.width, + height: previewVideoOffsetPreviousDrag.height + value.translation.height) + } + .onEnded { _ in + previewVideoOffsetPreviousDrag = previewVideoOffset + } + ) + + .offset(x: previewVideoOffset.width, y: previewVideoOffset.height) } .padding(10) .padding(.trailing, abs(angleDegree/2)) @@ -679,8 +692,20 @@ struct CallView: View { maxHeight: callViewModel.callStatsModel.sentVideoWindow.heightFactor * 256) .clipped() } - .frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2) + .frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2) // 144*192 .cornerRadius(20) + .gesture( + DragGesture(coordinateSpace: .global) + .onChanged { value in + previewVideoOffset = CGSize(width: previewVideoOffsetPreviousDrag.width + value.translation.width, + height: previewVideoOffsetPreviousDrag.height + value.translation.height) + } + .onEnded { _ in + previewVideoOffsetPreviousDrag = previewVideoOffset + } + ) + + .offset(x: previewVideoOffset.width, y: previewVideoOffset.height) } .padding(10) .padding(.trailing, abs(angleDegree/2))