TM-SGNL-iOS/SignalUI/ImageEditor/ImageEditorStickerItem.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

94 lines
2.9 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import UIKit
final class ImageEditorStickerItem: ImageEditorItem, ImageEditorTransformable {
let sticker: EditorSticker
/// The timestamp for when the sticker item was created. Used for displaying clock stickers.
///
/// This timestamp is stored so that the time displayed on a clock sticker
/// does not change from when it's placed on the image to when it's
/// rendered in the final image.
let date: Date
let referenceImageWidth: CGFloat
let unitCenter: ImageEditorSample
let rotationRadians: CGFloat
let scaling: CGFloat
init(
sticker: EditorSticker,
referenceImageWidth: CGFloat,
unitCenter: ImageEditorSample = .unitMidpoint,
rotationRadians: CGFloat,
scaling: CGFloat
) {
self.sticker = sticker
self.date = Date()
self.referenceImageWidth = referenceImageWidth
self.unitCenter = unitCenter
self.rotationRadians = rotationRadians
self.scaling = scaling
super.init(itemType: .sticker)
}
private init(
itemId: String,
sticker: EditorSticker,
date: Date,
referenceImageWidth: CGFloat,
unitCenter: ImageEditorSample,
rotationRadians: CGFloat,
scaling: CGFloat
) {
self.sticker = sticker
self.date = date
self.referenceImageWidth = referenceImageWidth
self.unitCenter = unitCenter
self.rotationRadians = rotationRadians
self.scaling = scaling
super.init(itemId: itemId, itemType: .sticker)
}
func copy(unitCenter: ImageEditorSample) -> ImageEditorStickerItem {
ImageEditorStickerItem(
itemId: self.itemId,
sticker: self.sticker,
date: self.date,
referenceImageWidth: self.referenceImageWidth,
unitCenter: unitCenter,
rotationRadians: self.rotationRadians,
scaling: self.scaling
)
}
func copy(scaling: CGFloat, rotationRadians: CGFloat) -> ImageEditorStickerItem {
ImageEditorStickerItem(
itemId: self.itemId,
sticker: self.sticker,
date: self.date,
referenceImageWidth: self.referenceImageWidth,
unitCenter: self.unitCenter,
rotationRadians: rotationRadians,
scaling: scaling
)
}
func copy(sticker: EditorSticker) -> ImageEditorStickerItem {
ImageEditorStickerItem(
itemId: self.itemId,
sticker: sticker,
date: self.date,
referenceImageWidth: self.referenceImageWidth,
unitCenter: self.unitCenter,
rotationRadians: self.rotationRadians,
scaling: self.scaling
)
}
override func outputScale() -> CGFloat {
return scaling
}
}