mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Shared media improvements
This commit is contained in:
@@ -159,17 +159,28 @@ public final class TooltipComponent: Component {
|
||||
}
|
||||
|
||||
public final class View: UIView {
|
||||
private let backgroundNode: NavigationBackgroundNode
|
||||
private let backgroundView: UIView
|
||||
private let backgroundViewMask: UIImageView
|
||||
private var icon: ComponentHostView<Empty>?
|
||||
private let content: ComponentHostView<Empty>
|
||||
|
||||
init() {
|
||||
self.backgroundNode = NavigationBackgroundNode(color: UIColor(white: 0.2, alpha: 0.7))
|
||||
self.backgroundView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
|
||||
self.backgroundViewMask = UIImageView()
|
||||
|
||||
self.backgroundViewMask.image = generateImage(CGSize(width: 42.0, height: 42.0), rotatedContext: { size, context in
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
|
||||
context.setFillColor(UIColor.black.cgColor)
|
||||
let _ = try? drawSvgPath(context, path: "M0,18.0252 C0,14.1279 0,12.1792 0.5358,10.609 C1.5362,7.6772 3.8388,5.3746 6.7706,4.3742 C8.3409,3.8384 10.2895,3.8384 14.1868,3.8384 L16.7927,3.8384 C18.2591,3.8384 18.9923,3.8384 19.7211,3.8207 C25.1911,3.6877 30.6172,2.8072 35.8485,1.2035 C36.5454,0.9899 37.241,0.758 38.6321,0.2943 C39.1202,0.1316 39.3643,0.0503 39.5299,0.0245 C40.8682,-0.184 42.0224,0.9702 41.8139,2.3085 C41.7881,2.4741 41.7067,2.7181 41.544,3.2062 C41.0803,4.5974 40.8485,5.293 40.6348,5.99 C39.0312,11.2213 38.1507,16.6473 38.0177,22.1173 C38,22.846 38,23.5793 38,25.0457 L38,27.6516 C38,31.5489 38,33.4975 37.4642,35.0677 C36.4638,37.9995 34.1612,40.3022 31.2294,41.3026 C29.6591,41.8384 27.7105,41.8384 23.8132,41.8384 L16,41.8384 C10.3995,41.8384 7.5992,41.8384 5.4601,40.7484 C3.5785,39.7897 2.0487,38.2599 1.0899,36.3783 C0,34.2392 0,31.4389 0,25.8384 L0,18.0252 Z ")
|
||||
})?.stretchableImage(withLeftCapWidth: 16, topCapHeight: 34)
|
||||
|
||||
self.content = ComponentHostView<Empty>()
|
||||
|
||||
super.init(frame: CGRect())
|
||||
|
||||
self.addSubnode(self.backgroundNode)
|
||||
self.addSubview(self.backgroundView)
|
||||
self.backgroundView.mask = self.backgroundViewMask
|
||||
self.addSubview(self.content)
|
||||
}
|
||||
|
||||
@@ -228,8 +239,10 @@ public final class TooltipComponent: Component {
|
||||
contentRect.origin.y = component.arrowLocation.minY - contentRect.height
|
||||
}
|
||||
|
||||
transition.setFrame(view: self.backgroundNode.view, frame: contentRect)
|
||||
self.backgroundNode.update(size: contentRect.size, cornerRadius: 8.0, transition: .immediate)
|
||||
let maskedBackgroundFrame = CGRect(origin: CGPoint(x: contentRect.minX, y: contentRect.minY - 4.0), size: CGSize(width: contentRect.width + 4.0, height: contentRect.height + 4.0))
|
||||
|
||||
self.backgroundView.frame = maskedBackgroundFrame
|
||||
self.backgroundViewMask.frame = CGRect(origin: CGPoint(), size: maskedBackgroundFrame.size)
|
||||
|
||||
if let iconSize = iconSize, let icon = self.icon {
|
||||
transition.setFrame(view: icon, frame: CGRect(origin: CGPoint(x: contentRect.minX + insets.left, y: contentRect.minY + insets.top + floor((contentRect.height - insets.top - insets.bottom - iconSize.height) / 2.0)), size: iconSize))
|
||||
@@ -378,7 +391,7 @@ private final class ShadowRoundedRectangle: Component {
|
||||
context.clear(CGRect(origin: CGPoint(), size: size))
|
||||
|
||||
context.setFillColor(component.color.cgColor)
|
||||
context.setShadow(offset: CGSize(width: 0.0, height: -2.0), blur: 5.0, color: UIColor(white: 0.0, alpha: 0.3).cgColor)
|
||||
context.setShadow(offset: CGSize(width: 0.0, height: -1.0), blur: 4.0, color: UIColor(white: 0.0, alpha: 0.2).cgColor)
|
||||
|
||||
context.fillEllipse(in: CGRect(origin: CGPoint(x: shadowInset, y: shadowInset), size: CGSize(width: size.width - shadowInset * 2.0, height: size.height - shadowInset * 2.0)))
|
||||
})?.stretchableImage(withLeftCapWidth: Int(diameter + shadowInset * 2.0) / 2, topCapHeight: Int(diameter + shadowInset * 2.0) / 2)
|
||||
@@ -752,6 +765,11 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
) {
|
||||
self.containerSize = containerSize
|
||||
|
||||
if self.dateIndicator.alpha.isZero {
|
||||
let transition: ContainedViewLayoutTransition = .immediate
|
||||
transition.updateSublayerTransformOffset(layer: self.dateIndicator.layer, offset: CGPoint())
|
||||
}
|
||||
|
||||
if isScrolling {
|
||||
self.updateActivityTimer(isScrolling: true)
|
||||
}
|
||||
@@ -781,15 +799,15 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
let topIndicatorInset: CGFloat = indicatorVerticalInset + containerInsets.top
|
||||
let bottomIndicatorInset: CGFloat = indicatorVerticalInset + containerInsets.bottom
|
||||
|
||||
let scrollIndicatorHeight = max(35.0, ceil(scrollIndicatorHeightFraction * containerSize.height))
|
||||
let scrollIndicatorHeight = max(44.0, ceil(scrollIndicatorHeightFraction * containerSize.height))
|
||||
|
||||
let indicatorPositionFraction = min(1.0, max(0.0, contentOffset / (contentHeight - containerSize.height)))
|
||||
|
||||
let indicatorTopPosition = topIndicatorInset
|
||||
let indicatorBottomPosition = containerSize.height - bottomIndicatorInset - scrollIndicatorHeight
|
||||
|
||||
let dateIndicatorTopPosition = topIndicatorInset
|
||||
let dateIndicatorBottomPosition = containerSize.height - bottomIndicatorInset - indicatorSize.height
|
||||
let dateIndicatorTopPosition = topIndicatorInset + 4.0
|
||||
let dateIndicatorBottomPosition = containerSize.height - bottomIndicatorInset - 4.0 - indicatorSize.height
|
||||
|
||||
self.indicatorPosition = indicatorTopPosition * (1.0 - indicatorPositionFraction) + indicatorBottomPosition * indicatorPositionFraction
|
||||
self.scrollIndicatorHeight = scrollIndicatorHeight
|
||||
@@ -805,8 +823,9 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
|
||||
transition.updateFrame(view: self.dateIndicator, frame: CGRect(origin: CGPoint(x: containerSize.width - 12.0 - indicatorSize.width, y: dateIndicatorPosition), size: indicatorSize))
|
||||
if isScrolling {
|
||||
self.dateIndicator.alpha = 1.0
|
||||
self.lineIndicator.alpha = 1.0
|
||||
let transition: ContainedViewLayoutTransition = .animated(duration: 0.3, curve: .easeInOut)
|
||||
transition.updateAlpha(layer: self.dateIndicator.layer, alpha: 1.0)
|
||||
transition.updateAlpha(layer: self.lineIndicator.layer, alpha: 1.0)
|
||||
}
|
||||
|
||||
self.updateLineTooltip(containerSize: containerSize)
|
||||
@@ -823,7 +842,7 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
return
|
||||
}
|
||||
|
||||
let lineIndicatorSize = CGSize(width: self.isDragging ? 6.0 : 3.0, height: scrollIndicatorHeight)
|
||||
let lineIndicatorSize = CGSize(width: (self.isDragging || self.lineTooltip != nil) ? 6.0 : 3.0, height: scrollIndicatorHeight)
|
||||
let mappedTransition: Transition
|
||||
switch transition {
|
||||
case .immediate:
|
||||
@@ -889,6 +908,9 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
|
||||
lineTooltip.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
|
||||
|
||||
let transition: ContainedViewLayoutTransition = .immediate
|
||||
transition.updateSublayerTransformOffset(layer: self.dateIndicator.layer, offset: CGPoint(x: -3.0, y: 0.0))
|
||||
|
||||
displayTooltip.completed()
|
||||
}
|
||||
|
||||
@@ -912,7 +934,7 @@ public final class SparseItemGridScrollingArea: ASDisplayNode {
|
||||
font: Font.regular(13.0),
|
||||
color: .white
|
||||
)),
|
||||
arrowLocation: self.lineIndicator.frame.insetBy(dx: -4.0, dy: -4.0)
|
||||
arrowLocation: self.lineIndicator.frame.insetBy(dx: -3.0, dy: -8.0)
|
||||
)),
|
||||
environment: {},
|
||||
containerSize: containerSize
|
||||
|
||||
Reference in New Issue
Block a user