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