mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-07 05:25:12 +00:00
Camera and editor improvements
This commit is contained in:
@@ -197,19 +197,10 @@ private class MediaEditorComposerStickerEntity: MediaEditorComposerEntity {
|
||||
tintColor = .white
|
||||
}
|
||||
|
||||
self.disposables.add((self.frameSource.get()
|
||||
|> take(1)
|
||||
|> deliverOn(self.queue)).start(next: { [weak self] frameSource in
|
||||
let processFrame: (Double, Int, (Int) -> AnimatedStickerFrame?) -> Void = { [weak self] duration, frameCount, takeFrame in
|
||||
guard let strongSelf = self else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
guard let frameSource, let duration = strongSelf.totalDuration, let frameCount = strongSelf.frameCount else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
let relativeTime = currentTime - floor(currentTime / duration) * duration
|
||||
var t = relativeTime / duration
|
||||
t = max(0.0, t)
|
||||
@@ -233,12 +224,8 @@ private class MediaEditorComposerStickerEntity: MediaEditorComposerEntity {
|
||||
delta = max(1, frameIndex - previousFrameIndex)
|
||||
}
|
||||
|
||||
var frame: AnimatedStickerFrame?
|
||||
frameSource.syncWith { frameSource in
|
||||
for i in 0 ..< delta {
|
||||
frame = frameSource.takeFrame(draw: i == delta - 1)
|
||||
}
|
||||
}
|
||||
let frame = takeFrame(delta)
|
||||
|
||||
if let frame {
|
||||
var imagePixelBuffer: CVPixelBuffer?
|
||||
if let pixelBuffer = strongSelf.imagePixelBuffer {
|
||||
@@ -273,7 +260,57 @@ private class MediaEditorComposerStickerEntity: MediaEditorComposerEntity {
|
||||
} else {
|
||||
completion(strongSelf.image)
|
||||
}
|
||||
}))
|
||||
}
|
||||
|
||||
if self.isVideo {
|
||||
self.disposables.add((self.videoFrameSource.get()
|
||||
|> take(1)
|
||||
|> deliverOn(self.queue)).start(next: { [weak self] frameSource in
|
||||
guard let strongSelf = self else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
guard let frameSource, let duration = strongSelf.totalDuration, let frameCount = strongSelf.frameCount else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
processFrame(duration, frameCount, { delta in
|
||||
var frame: AnimatedStickerFrame?
|
||||
frameSource.syncWith { frameSource in
|
||||
for i in 0 ..< delta {
|
||||
frame = frameSource.takeFrame(draw: i == delta - 1)
|
||||
}
|
||||
}
|
||||
return frame
|
||||
})
|
||||
}))
|
||||
} else {
|
||||
self.disposables.add((self.frameSource.get()
|
||||
|> take(1)
|
||||
|> deliverOn(self.queue)).start(next: { [weak self] frameSource in
|
||||
guard let strongSelf = self else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
guard let frameSource, let duration = strongSelf.totalDuration, let frameCount = strongSelf.frameCount else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
|
||||
processFrame(duration, frameCount, { delta in
|
||||
var frame: AnimatedStickerFrame?
|
||||
frameSource.syncWith { frameSource in
|
||||
for i in 0 ..< delta {
|
||||
frame = frameSource.takeFrame(draw: i == delta - 1)
|
||||
}
|
||||
}
|
||||
return frame
|
||||
})
|
||||
}))
|
||||
}
|
||||
} else {
|
||||
var image: CIImage?
|
||||
if let cachedImage = self.image {
|
||||
|
||||
@@ -2059,6 +2059,9 @@ public final class MediaEditorScreen: ViewController {
|
||||
if let self, let file {
|
||||
let stickerEntity = DrawingStickerEntity(content: .file(file))
|
||||
self.interaction?.insertEntity(stickerEntity)
|
||||
|
||||
self.controller?.isSavingAvailable = true
|
||||
self.controller?.requestLayout(transition: .immediate)
|
||||
}
|
||||
}
|
||||
self.controller?.present(controller, in: .current)
|
||||
@@ -2066,6 +2069,9 @@ public final class MediaEditorScreen: ViewController {
|
||||
case .text:
|
||||
let textEntity = DrawingTextEntity(text: NSAttributedString(), style: .regular, animation: .none, font: .sanFrancisco, alignment: .center, fontSize: 1.0, color: DrawingColor(color: .white))
|
||||
self.interaction?.insertEntity(textEntity)
|
||||
|
||||
self.controller?.isSavingAvailable = true
|
||||
self.controller?.requestLayout(transition: .immediate)
|
||||
return
|
||||
case .drawing:
|
||||
self.interaction?.deactivate()
|
||||
|
||||
Reference in New Issue
Block a user