mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
73 lines
2.2 KiB
Swift
73 lines
2.2 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import Display
|
|
|
|
final class ContentOverlayLayer: SimpleLayer {
|
|
private struct Params: Equatable {
|
|
var size: CGSize
|
|
var contentInsets: UIEdgeInsets
|
|
|
|
init(size: CGSize, contentInsets: UIEdgeInsets) {
|
|
self.size = size
|
|
self.contentInsets = contentInsets
|
|
}
|
|
}
|
|
|
|
var contentsLayer: CALayer? {
|
|
didSet {
|
|
if self.contentsLayer !== oldValue {
|
|
oldValue?.mask = nil
|
|
oldValue?.removeFromSuperlayer()
|
|
|
|
if let contentsLayer = self.contentsLayer {
|
|
contentsLayer.mask = self.maskContentLayer
|
|
self.addSublayer(contentsLayer)
|
|
|
|
if let params = self.params {
|
|
let size = params.size
|
|
let contentInsets = params.contentInsets
|
|
self.params = nil
|
|
self.update(size: size, contentInsets: contentInsets)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let maskContentLayer: SimpleLayer
|
|
|
|
private var params: Params?
|
|
|
|
override init() {
|
|
self.maskContentLayer = SimpleLayer()
|
|
|
|
super.init()
|
|
}
|
|
|
|
override init(layer: Any) {
|
|
self.maskContentLayer = SimpleLayer()
|
|
|
|
super.init(layer: layer)
|
|
}
|
|
|
|
required public init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
func update(size: CGSize, contentInsets: UIEdgeInsets) {
|
|
let params = Params(size: size, contentInsets: contentInsets)
|
|
if self.params == params {
|
|
return
|
|
}
|
|
self.params = params
|
|
|
|
let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
|
|
|
|
self.maskContentLayer.frame = CGRect(origin: CGPoint(x: contentInsets.left, y: contentInsets.top), size: size)
|
|
|
|
if let contentsLayer = self.contentsLayer {
|
|
contentsLayer.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: size.width - (contentInsets.left + contentInsets.right), height: size.height - (contentInsets.top + contentInsets.bottom)))
|
|
}
|
|
}
|
|
}
|