mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge commit '80079dba5ac3c897ecbd4f62a9925802a04d9ab0'
This commit is contained in:
commit
75ef8d9d7d
@ -2342,10 +2342,10 @@ public class DrawingScreen: ViewController, TGPhotoDrawingInterfaceController, U
|
||||
return self._selectionContainerView!
|
||||
}
|
||||
|
||||
private var _contentWrapperView: PortalSourceView?
|
||||
var contentWrapperView: PortalSourceView {
|
||||
private var _contentWrapperView: UIView?
|
||||
var contentWrapperView: UIView {
|
||||
if self._contentWrapperView == nil {
|
||||
self._contentWrapperView = PortalSourceView()
|
||||
self._contentWrapperView = UIView()
|
||||
}
|
||||
return self._contentWrapperView!
|
||||
}
|
||||
@ -2423,6 +2423,7 @@ public class DrawingScreen: ViewController, TGPhotoDrawingInterfaceController, U
|
||||
context: self.context,
|
||||
drawingView: self.drawingView,
|
||||
entitiesView: self.entitiesView,
|
||||
contentWrapperView: self.contentWrapperView,
|
||||
selectionContainerView: self.selectionContainerView,
|
||||
isVideo: controller.isVideo,
|
||||
updateSelectedEntity: { [weak self] entity in
|
||||
@ -2786,7 +2787,7 @@ public class DrawingScreen: ViewController, TGPhotoDrawingInterfaceController, U
|
||||
return self.node.selectionContainerView
|
||||
}
|
||||
|
||||
public var contentWrapperView: PortalSourceView {
|
||||
public var contentWrapperView: UIView {
|
||||
return self.node.contentWrapperView
|
||||
}
|
||||
|
||||
@ -2954,6 +2955,7 @@ public final class DrawingToolsInteraction {
|
||||
private let context: AccountContext
|
||||
private let drawingView: DrawingView
|
||||
private let entitiesView: DrawingEntitiesView
|
||||
private weak var contentWrapperView: UIView?
|
||||
private let selectionContainerView: DrawingSelectionContainerView
|
||||
private let isVideo: Bool
|
||||
private let updateSelectedEntity: (DrawingEntity?) -> Void
|
||||
@ -2983,6 +2985,7 @@ public final class DrawingToolsInteraction {
|
||||
context: AccountContext,
|
||||
drawingView: DrawingView,
|
||||
entitiesView: DrawingEntitiesView,
|
||||
contentWrapperView: UIView,
|
||||
selectionContainerView: DrawingSelectionContainerView,
|
||||
isVideo: Bool,
|
||||
updateSelectedEntity: @escaping (DrawingEntity?) -> Void,
|
||||
@ -2998,6 +3001,7 @@ public final class DrawingToolsInteraction {
|
||||
self.context = context
|
||||
self.drawingView = drawingView
|
||||
self.entitiesView = entitiesView
|
||||
self.contentWrapperView = contentWrapperView
|
||||
self.selectionContainerView = selectionContainerView
|
||||
self.isVideo = isVideo
|
||||
self.updateSelectedEntity = updateSelectedEntity
|
||||
@ -3182,50 +3186,51 @@ public final class DrawingToolsInteraction {
|
||||
return
|
||||
}
|
||||
|
||||
guard let currentImage = self.getCurrentImage() else {
|
||||
self.entitiesView.play()
|
||||
self.updateVideoPlayback(true)
|
||||
return
|
||||
}
|
||||
|
||||
let currentImage = self.getCurrentImage()
|
||||
|
||||
let sourceImage = generateImage(self.drawingView.imageSize, contextGenerator: { size, context in
|
||||
let bounds = CGRect(origin: .zero, size: size)
|
||||
if let cgImage = currentImage.cgImage {
|
||||
if let cgImage = currentImage?.cgImage {
|
||||
context.draw(cgImage, in: bounds)
|
||||
}
|
||||
if let cgImage = self.drawingView.drawingImage?.cgImage {
|
||||
context.draw(cgImage, in: bounds)
|
||||
if self.drawingView.superview !== self.entitiesView {
|
||||
if let cgImage = self.drawingView.drawingImage?.cgImage {
|
||||
context.draw(cgImage, in: bounds)
|
||||
}
|
||||
}
|
||||
context.translateBy(x: size.width / 2.0, y: size.height / 2.0)
|
||||
context.scaleBy(x: 1.0, y: -1.0)
|
||||
context.translateBy(x: -size.width / 2.0, y: -size.height / 2.0)
|
||||
self.entitiesView.layer.render(in: context)
|
||||
}, opaque: true, scale: 1.0)
|
||||
guard let sourceImage = sourceImage else {
|
||||
|
||||
guard let sourceImage, var contentWrapperView = self.contentWrapperView, let controllerView = self.getControllerNode()?.view else {
|
||||
return
|
||||
}
|
||||
|
||||
let _ = sourceImage
|
||||
if contentWrapperView.frame.width.isZero {
|
||||
contentWrapperView = self.entitiesView.superview!
|
||||
}
|
||||
|
||||
let eyedropperView = EyedropperView(containerSize: contentWrapperView.frame.size, drawingView: self.drawingView, sourceImage: sourceImage)
|
||||
eyedropperView.completed = { [weak self] color in
|
||||
if let self {
|
||||
self.updateColor(color)
|
||||
self.entitiesView.play()
|
||||
self.updateVideoPlayback(true)
|
||||
|
||||
// let eyedropperView = EyedropperView(containerSize: controller.contentWrapperView.frame.size, drawingView: self.drawingView, sourceImage: sourceImage)
|
||||
// eyedropperView.completed = { [weak self] color in
|
||||
// if let self {
|
||||
// self.updateColor(color)
|
||||
// self.entitiesView.play()
|
||||
// self.updateVideoPlayback(true)
|
||||
//
|
||||
// dismissed()
|
||||
// }
|
||||
// }
|
||||
// eyedropperView.dismissed = { [weak self] in
|
||||
// if let self {
|
||||
// self.entitiesView.play()
|
||||
// self.updateVideoPlayback(true)
|
||||
// }
|
||||
// }
|
||||
// eyedropperView.frame = controller.contentWrapperView.convert(controller.contentWrapperView.bounds, to: controller.view)
|
||||
// self.addSubview(eyedropperView)
|
||||
// self.currentEyedropperView = eyedropperView
|
||||
dismissed()
|
||||
}
|
||||
}
|
||||
eyedropperView.dismissed = { [weak self] in
|
||||
if let self {
|
||||
self.entitiesView.play()
|
||||
self.updateVideoPlayback(true)
|
||||
}
|
||||
}
|
||||
eyedropperView.frame = contentWrapperView.convert(contentWrapperView.bounds, to: controllerView)
|
||||
self.addSubview(eyedropperView)
|
||||
self.currentEyedropperView = eyedropperView
|
||||
}
|
||||
|
||||
func dismissCurrentEyedropper() {
|
||||
|
@ -56,7 +56,7 @@ public final class EyedropperView: UIView {
|
||||
|
||||
var completed: (DrawingColor) -> Void = { _ in }
|
||||
var dismissed: () -> Void = { }
|
||||
|
||||
|
||||
init(containerSize: CGSize, drawingView: DrawingView, sourceImage: UIImage) {
|
||||
self.drawingView = drawingView
|
||||
|
||||
|
@ -2005,23 +2005,11 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
if let self {
|
||||
switch action {
|
||||
case .play:
|
||||
self.entitiesView.eachView({ view in
|
||||
if let sticker = view.entity as? DrawingStickerEntity, case .video = sticker.content {
|
||||
view.play()
|
||||
}
|
||||
})
|
||||
self.entitiesView.play()
|
||||
case .pause:
|
||||
self.entitiesView.eachView({ view in
|
||||
if let sticker = view.entity as? DrawingStickerEntity, case .video = sticker.content {
|
||||
view.pause()
|
||||
}
|
||||
})
|
||||
self.entitiesView.pause()
|
||||
case let .seek(timestamp):
|
||||
self.entitiesView.eachView({ view in
|
||||
if let sticker = view.entity as? DrawingStickerEntity, case .video = sticker.content {
|
||||
view.seek(to: timestamp)
|
||||
}
|
||||
})
|
||||
self.entitiesView.seek(to: timestamp)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2061,6 +2049,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
context: self.context,
|
||||
drawingView: self.drawingView,
|
||||
entitiesView: self.entitiesView,
|
||||
contentWrapperView: self.previewContainerView,
|
||||
selectionContainerView: self.selectionContainerView,
|
||||
isVideo: false,
|
||||
updateSelectedEntity: { [weak self] _ in
|
||||
@ -2904,7 +2893,60 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
self.previousDrawingEntities = self.entitiesView.entities
|
||||
|
||||
self.interaction?.deactivate()
|
||||
let controller = DrawingScreen(context: self.context, sourceHint: .storyEditor, size: self.previewContainerView.frame.size, originalSize: storyDimensions, isVideo: false, isAvatar: false, drawingView: self.drawingView, entitiesView: self.entitiesView, selectionContainerView: self.selectionContainerView, existingStickerPickerInputData: self.stickerPickerInputData)
|
||||
let controller = DrawingScreen(
|
||||
context: self.context,
|
||||
sourceHint: .storyEditor,
|
||||
size: self.previewContainerView.frame.size,
|
||||
originalSize: storyDimensions,
|
||||
isVideo: self.mediaEditor?.sourceIsVideo ?? false,
|
||||
isAvatar: false,
|
||||
drawingView: self.drawingView,
|
||||
entitiesView: self.entitiesView,
|
||||
selectionContainerView: self.selectionContainerView,
|
||||
existingStickerPickerInputData: self.stickerPickerInputData
|
||||
)
|
||||
controller.getCurrentImage = { [weak self] in
|
||||
guard let self else {
|
||||
return nil
|
||||
}
|
||||
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
||||
let imageSize = CGSize(width: 1080, height: 1920)
|
||||
let context = DrawingContext(size: imageSize, scale: 1.0, opaque: true, colorSpace: colorSpace)
|
||||
|
||||
context?.withFlippedContext { context in
|
||||
if let gradientImage = self.gradientView.image?.cgImage {
|
||||
context.draw(gradientImage, in: CGRect(origin: .zero, size: imageSize))
|
||||
}
|
||||
if let image = self.mediaEditor?.resultImage, let values = self.mediaEditor?.values {
|
||||
let initialScale: CGFloat
|
||||
if image.size.height > image.size.width {
|
||||
initialScale = max(imageSize.width / image.size.width, imageSize.height / image.size.height)
|
||||
} else {
|
||||
initialScale = imageSize.width / image.size.width
|
||||
}
|
||||
let scale = initialScale * values.cropScale
|
||||
context.translateBy(x: imageSize.width / 2.0 + values.cropOffset.x, y: imageSize.height / 2.0 - values.cropOffset.y)
|
||||
context.rotate(by: -values.cropRotation)
|
||||
context.scaleBy(x: scale, y: scale)
|
||||
|
||||
if let cgImage = image.cgImage {
|
||||
context.draw(cgImage, in: CGRect(x: -image.size.width / 2.0, y: -image.size.height / 2.0, width: image.size.width, height: image.size.height))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return context?.generateImage(colorSpace: colorSpace)
|
||||
}
|
||||
controller.updateVideoPlayback = { [weak self] play in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
if play {
|
||||
self.mediaEditor?.play()
|
||||
} else {
|
||||
self.mediaEditor?.stop()
|
||||
}
|
||||
}
|
||||
self.drawingScreen = controller
|
||||
self.drawingView.isUserInteractionEnabled = true
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user