@@ -1390,6 +1390,8 @@ public final class EmojiPagerContentComponent: Component {
13901390 private let backgroundTintView : UIView
13911391 private var fadingMaskLayer : FadingMaskLayer ?
13921392 private var tintFadingMaskLayer : FadingMaskLayer ?
1393+ private var topPanelSeparator : ( colorLayer: SimpleLayer , tintLayer: SimpleLayer ) ?
1394+ private var topPanelHeight : CGFloat = 0.0
13931395 private var vibrancyClippingView : UIView
13941396 private var vibrancyEffectView : UIView ?
13951397 public private( set) var mirrorContentClippingView : UIView ?
@@ -4016,6 +4018,23 @@ public final class EmojiPagerContentComponent: Component {
40164018 }
40174019 if let tintFadingMaskLayer = self . tintFadingMaskLayer {
40184020 tintFadingMaskLayer. internalAlpha = max ( 0.0 , min ( 1.0 , self . scrollView. contentOffset. y / 30.0 ) )
4021+
4022+ self . updateTopPanelSeparator ( transition: transition)
4023+ }
4024+ }
4025+
4026+ private func updateTopPanelSeparator( transition: ComponentTransition ) {
4027+ if let topPanelSeparator = self . topPanelSeparator {
4028+ var offset = self . scrollView. contentOffset. y
4029+ let startOffset : CGFloat = 40.0 - self . topPanelHeight
4030+ let endOffset : CGFloat = startOffset + 10.0
4031+
4032+ offset = min ( max ( offset, startOffset) , endOffset)
4033+ offset = ( endOffset - offset) / ( endOffset - startOffset)
4034+ let alpha = 1.0 - offset
4035+
4036+ transition. setAlpha ( layer: topPanelSeparator. colorLayer, alpha: alpha)
4037+ transition. setAlpha ( layer: topPanelSeparator. tintLayer, alpha: alpha)
40194038 }
40204039 }
40214040
@@ -4102,14 +4121,41 @@ public final class EmojiPagerContentComponent: Component {
41024121 self . tintFadingMaskLayer = tintFadingMaskLayer
41034122 }
41044123
4124+ if case . clip = component. maskEdge {
4125+ let topPanelSeparator : ( colorLayer: SimpleLayer , tintLayer: SimpleLayer )
4126+ if let current = self . topPanelSeparator {
4127+ topPanelSeparator = current
4128+ } else {
4129+ topPanelSeparator = ( SimpleLayer ( ) , SimpleLayer ( ) )
4130+ self . topPanelSeparator = topPanelSeparator
4131+ self . layer. addSublayer ( topPanelSeparator. colorLayer)
4132+ if let effectContainerView = externalTintMaskContainer ?? component. inputInteractionHolder. inputInteraction? . externalBackground? . effectContainerView {
4133+ effectContainerView. layer. addSublayer ( topPanelSeparator. tintLayer)
4134+ }
4135+ }
4136+
4137+ topPanelSeparator. colorLayer. backgroundColor = keyboardChildEnvironment. theme. list. itemPlainSeparatorColor. withMultipliedAlpha ( 0.5 ) . cgColor
4138+ topPanelSeparator. tintLayer. backgroundColor = UIColor ( white: 0.0 , alpha: 0.7 ) . cgColor
4139+
4140+ let separatorFrame = CGRect ( origin: CGPoint ( x: 0.0 , y: topPanelHeight - UIScreenPixel) , size: CGSize ( width: backgroundFrame. width, height: UIScreenPixel) )
4141+ transition. setFrame ( layer: topPanelSeparator. colorLayer, frame: separatorFrame)
4142+ transition. setFrame ( layer: topPanelSeparator. tintLayer, frame: separatorFrame)
4143+
4144+ self . topPanelHeight = topPanelHeight
4145+ self . updateTopPanelSeparator ( transition: transition)
4146+ }
4147+
41054148 if self . layer. mask == nil {
41064149 self . layer. mask = maskLayer
41074150 }
41084151 if self . mirrorContentClippingView? . layer. mask != tintFadingMaskLayer {
41094152 self . mirrorContentClippingView? . layer. mask = tintFadingMaskLayer
41104153 }
4111- maskLayer. frame = CGRect ( origin: CGPoint ( x: 0.0 , y: topPanelHeight - 40.0 ) , size: backgroundFrame. size)
4112- tintFadingMaskLayer. frame = maskLayer. frame
4154+ let maskFrame = CGRect ( origin: CGPoint ( x: 0.0 , y: topPanelHeight - 40.0 ) , size: backgroundFrame. size)
4155+ transition. setFrame ( layer: maskLayer, frame: maskFrame)
4156+ transition. setFrame ( layer: tintFadingMaskLayer, frame: maskLayer. frame)
4157+ maskLayer. update ( size: maskFrame. size, transition: transition)
4158+ tintFadingMaskLayer. update ( size: maskFrame. size, transition: transition)
41134159 }
41144160 } else if component. warpContentsOnEdges {
41154161 self . backgroundView. isHidden = true
@@ -4955,7 +5001,7 @@ private final class FadingMaskLayer: SimpleLayer {
49555001 fatalError ( " init(coder:) has not been implemented " )
49565002 }
49575003
4958- override func layoutSublayers ( ) {
5004+ func update ( size : CGSize , transition : ComponentTransition ) {
49595005 let gradientHeight : CGFloat = 66.0
49605006 if self . gradientLayer. contents == nil {
49615007 if !self . isHard {
@@ -4973,13 +5019,13 @@ private final class FadingMaskLayer: SimpleLayer {
49735019 self . gradientFillLayer. backgroundColor = UIColor . white. cgColor
49745020 }
49755021
4976- self . gradientLayer. frame = CGRect ( origin: . zero, size: CGSize ( width: self . bounds . width, height: gradientHeight) )
4977- self . gradientFillLayer. frame = self . gradientLayer. frame
5022+ transition . setFrame ( layer : self . gradientLayer, frame: CGRect ( origin: . zero, size: CGSize ( width: size . width, height: gradientHeight) ) )
5023+ transition . setFrame ( layer : self . gradientFillLayer, frame: self . gradientLayer. frame)
49785024 if self . isHard {
49795025 let hardHeight : CGFloat = 40.0
4980- self . fillLayer. frame = CGRect ( origin: CGPoint ( x: 0.0 , y: hardHeight) , size: CGSize ( width: self . bounds . width, height: self . bounds . height - hardHeight) )
5026+ transition . setFrame ( layer : self . fillLayer, frame: CGRect ( origin: CGPoint ( x: 0.0 , y: hardHeight) , size: CGSize ( width: size . width, height: size . height - hardHeight) ) )
49815027 } else {
4982- self . fillLayer. frame = CGRect ( origin: CGPoint ( x: 0.0 , y: gradientHeight) , size: CGSize ( width: self . bounds . width, height: self . bounds . height - gradientHeight) )
5028+ transition . setFrame ( layer : self . fillLayer, frame: CGRect ( origin: CGPoint ( x: 0.0 , y: gradientHeight) , size: CGSize ( width: size . width, height: size . height - gradientHeight) ) )
49835029 }
49845030 }
49855031}
0 commit comments