mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Story location picking
This commit is contained in:
@@ -2210,6 +2210,12 @@ public protocol EmojiContentPeekBehavior: AnyObject {
|
||||
func setGestureRecognizerEnabled(view: UIView, isEnabled: Bool, itemAtPoint: @escaping (CGPoint) -> (AnyHashable, CALayer, TelegramMediaFile)?)
|
||||
}
|
||||
|
||||
public protocol EmojiCustomContentView: UIView {
|
||||
var tintContainerView: UIView { get }
|
||||
|
||||
func update(theme: PresentationTheme, useOpaqueTheme: Bool, availableSize: CGSize, transition: Transition) -> CGSize
|
||||
}
|
||||
|
||||
public final class EmojiPagerContentComponent: Component {
|
||||
public static let staticEmojiMapping: [(EmojiPagerContentComponent.StaticEmojiSegment, [String])] = {
|
||||
guard let path = getAppBundle().path(forResource: "emoji1016", ofType: "txt") else {
|
||||
@@ -2263,7 +2269,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
self.isDisabled = isDisabled
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public struct CustomLayout: Equatable {
|
||||
public var itemsPerRow: Int
|
||||
public var itemSize: CGFloat
|
||||
@@ -2322,6 +2328,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
public let customLayout: CustomLayout?
|
||||
public let externalBackground: ExternalBackground?
|
||||
public weak var externalExpansionView: UIView?
|
||||
public let customContentView: EmojiCustomContentView?
|
||||
public let useOpaqueTheme: Bool
|
||||
public let hideBackground: Bool
|
||||
public let scrollingStickersGridPromise = ValuePromise<Bool>(false)
|
||||
@@ -2350,6 +2357,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
customLayout: CustomLayout?,
|
||||
externalBackground: ExternalBackground?,
|
||||
externalExpansionView: UIView?,
|
||||
customContentView: EmojiCustomContentView?,
|
||||
useOpaqueTheme: Bool,
|
||||
hideBackground: Bool,
|
||||
stateContext: StateContext?,
|
||||
@@ -2376,6 +2384,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
self.customLayout = customLayout
|
||||
self.externalBackground = externalBackground
|
||||
self.externalExpansionView = externalExpansionView
|
||||
self.customContentView = customContentView
|
||||
self.useOpaqueTheme = useOpaqueTheme
|
||||
self.hideBackground = hideBackground
|
||||
self.stateContext = stateContext
|
||||
@@ -2849,6 +2858,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
var verticalGroupDefaultSpacing: CGFloat
|
||||
var verticalGroupFeaturedSpacing: CGFloat
|
||||
var itemsPerRow: Int
|
||||
var customContentHeight: CGFloat
|
||||
var contentSize: CGSize
|
||||
|
||||
var searchInsets: UIEdgeInsets
|
||||
@@ -2857,9 +2867,21 @@ public final class EmojiPagerContentComponent: Component {
|
||||
var premiumButtonInset: CGFloat
|
||||
var premiumButtonHeight: CGFloat
|
||||
|
||||
init(layoutType: ItemLayoutType, width: CGFloat, containerInsets: UIEdgeInsets, itemGroups: [ItemGroupDescription], expandedGroupIds: Set<AnyHashable>, curveNearBounds: Bool, displaySearch: Bool, isSearchActivated: Bool, customLayout: CustomLayout?) {
|
||||
init(
|
||||
layoutType: ItemLayoutType,
|
||||
width: CGFloat,
|
||||
containerInsets: UIEdgeInsets,
|
||||
itemGroups: [ItemGroupDescription],
|
||||
expandedGroupIds: Set<AnyHashable>,
|
||||
curveNearBounds: Bool,
|
||||
displaySearch: Bool,
|
||||
isSearchActivated: Bool,
|
||||
customContentHeight: CGFloat,
|
||||
customLayout: CustomLayout?
|
||||
) {
|
||||
self.layoutType = layoutType
|
||||
self.width = width
|
||||
self.customContentHeight = customContentHeight
|
||||
|
||||
self.premiumButtonInset = 6.0
|
||||
self.premiumButtonHeight = 50.0
|
||||
@@ -2926,6 +2948,8 @@ public final class EmojiPagerContentComponent: Component {
|
||||
self.itemInsets.left = floorToScreenPixels((width - actualContentWidth) / 2.0)
|
||||
self.itemInsets.right = self.itemInsets.left
|
||||
|
||||
self.itemInsets.top += self.customContentHeight
|
||||
|
||||
if displaySearch {
|
||||
self.itemInsets.top += self.searchHeight - 4.0
|
||||
}
|
||||
@@ -3651,6 +3675,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
private let placeholdersContainerView: UIView
|
||||
private var visibleSearchHeader: EmojiSearchHeaderView?
|
||||
private var visibleEmptySearchResultsView: EmptySearchResultsView?
|
||||
private var visibleCustomContentView: EmojiCustomContentView?
|
||||
private var visibleItemPlaceholderViews: [ItemLayer.Key: ItemPlaceholderView] = [:]
|
||||
private var visibleFillPlaceholdersViews: [Int: ItemPlaceholderView] = [:]
|
||||
private var visibleItemSelectionLayers: [ItemLayer.Key: ItemSelectionLayer] = [:]
|
||||
@@ -6357,6 +6382,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
var updatedItemPositions: [VisualItemKey: CGPoint]?
|
||||
|
||||
let contentAnimation = transition.userData(ContentAnimation.self)
|
||||
let useOpaqueTheme = component.inputInteractionHolder.inputInteraction?.useOpaqueTheme ?? false
|
||||
|
||||
var transitionHintInstalledGroupId: AnyHashable?
|
||||
var transitionHintExpandedGroupId: AnyHashable?
|
||||
@@ -6483,6 +6509,30 @@ public final class EmojiPagerContentComponent: Component {
|
||||
calculateUpdatedItemPositions = true
|
||||
}
|
||||
|
||||
var customContentHeight: CGFloat = 0.0
|
||||
if let customContentView = component.inputInteractionHolder.inputInteraction?.customContentView {
|
||||
var customContentViewTransition = transition
|
||||
if let _ = self.visibleCustomContentView {
|
||||
|
||||
} else {
|
||||
customContentViewTransition = .immediate
|
||||
self.visibleCustomContentView = customContentView
|
||||
self.scrollView.addSubview(customContentView)
|
||||
self.mirrorContentScrollView.addSubview(customContentView.tintContainerView)
|
||||
}
|
||||
let availableCustomContentSize = availableSize
|
||||
let customContentViewSize = customContentView.update(theme: keyboardChildEnvironment.theme, useOpaqueTheme: useOpaqueTheme, availableSize: availableCustomContentSize, transition: customContentViewTransition)
|
||||
customContentViewTransition.setFrame(view: customContentView, frame: CGRect(origin: CGPoint(x: 0.0, y: pagerEnvironment.containerInsets.top + (component.displaySearchWithPlaceholder != nil ? 54.0 : 0.0)), size: customContentViewSize))
|
||||
|
||||
customContentHeight = customContentViewSize.height
|
||||
} else {
|
||||
if let visibleCustomContentView = self.visibleCustomContentView {
|
||||
self.visibleCustomContentView = nil
|
||||
visibleCustomContentView.removeFromSuperview()
|
||||
visibleCustomContentView.tintContainerView.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
|
||||
var itemGroups: [ItemGroupDescription] = []
|
||||
for itemGroup in component.contentItemGroups {
|
||||
itemGroups.append(ItemGroupDescription(
|
||||
@@ -6508,6 +6558,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
curveNearBounds: component.warpContentsOnEdges,
|
||||
displaySearch: component.displaySearchWithPlaceholder != nil,
|
||||
isSearchActivated: self.isSearchActivated,
|
||||
customContentHeight: customContentHeight,
|
||||
customLayout: component.inputInteractionHolder.inputInteraction?.customLayout
|
||||
)
|
||||
let itemLayout = extractedExpr
|
||||
@@ -6704,7 +6755,6 @@ public final class EmojiPagerContentComponent: Component {
|
||||
}
|
||||
}
|
||||
|
||||
let useOpaqueTheme = component.inputInteractionHolder.inputInteraction?.useOpaqueTheme ?? false
|
||||
|
||||
if let displaySearchWithPlaceholder = component.displaySearchWithPlaceholder {
|
||||
let visibleSearchHeader: EmojiSearchHeaderView
|
||||
@@ -6812,8 +6862,7 @@ public final class EmojiPagerContentComponent: Component {
|
||||
visibleSearchHeader.tintContainerView.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if let emptySearchResults = component.emptySearchResults {
|
||||
let visibleEmptySearchResultsView: EmptySearchResultsView
|
||||
var emptySearchResultsTransition = transition
|
||||
|
||||
Reference in New Issue
Block a user