|
@@ -31,7 +31,6 @@ class ViewController: NSViewController {
|
|
|
private var paywallReturnToHomeOnDismiss = true
|
|
private var paywallReturnToHomeOnDismiss = true
|
|
|
|
|
|
|
|
private var headerView: NSView!
|
|
private var headerView: NSView!
|
|
|
- private var headerFreeUsesBanner: FreeUsesBannerView!
|
|
|
|
|
private var contentTopBelowHeader: NSLayoutConstraint!
|
|
private var contentTopBelowHeader: NSLayoutConstraint!
|
|
|
private var contentTopBelowWindow: NSLayoutConstraint!
|
|
private var contentTopBelowWindow: NSLayoutConstraint!
|
|
|
|
|
|
|
@@ -119,7 +118,6 @@ class ViewController: NSViewController {
|
|
|
sidebar?.refreshAppearance()
|
|
sidebar?.refreshAppearance()
|
|
|
view.refreshAppearanceRecursively()
|
|
view.refreshAppearanceRecursively()
|
|
|
paywallOverlay?.refreshAppearance()
|
|
paywallOverlay?.refreshAppearance()
|
|
|
- headerFreeUsesBanner?.refreshAppearance()
|
|
|
|
|
photoPreviewOverlay?.refreshAppearance()
|
|
photoPreviewOverlay?.refreshAppearance()
|
|
|
filePreviewOverlay?.refreshAppearance()
|
|
filePreviewOverlay?.refreshAppearance()
|
|
|
printTextOverlay?.refreshAppearance()
|
|
printTextOverlay?.refreshAppearance()
|
|
@@ -388,7 +386,7 @@ class ViewController: NSViewController {
|
|
|
self?.showDestination(destination)
|
|
self?.showDestination(destination)
|
|
|
}
|
|
}
|
|
|
sidebar.onPremiumUpgradeTapped = { [weak self] in
|
|
sidebar.onPremiumUpgradeTapped = { [weak self] in
|
|
|
- self?.showDestination(.scanAndHome)
|
|
|
|
|
|
|
+ self?.presentPaywall(returnToHomeOnDismiss: false)
|
|
|
}
|
|
}
|
|
|
sidebar.onManageSubscriptionTapped = {
|
|
sidebar.onManageSubscriptionTapped = {
|
|
|
StoreManager.shared.showManageSubscriptions()
|
|
StoreManager.shared.showManageSubscriptions()
|
|
@@ -540,7 +538,7 @@ class ViewController: NSViewController {
|
|
|
self?.handlePaywallDismiss()
|
|
self?.handlePaywallDismiss()
|
|
|
}
|
|
}
|
|
|
Task { @MainActor in
|
|
Task { @MainActor in
|
|
|
- await StoreManager.shared.ensureEntitlementsResolved()
|
|
|
|
|
|
|
+ await StoreManager.shared.ensurePaywallStoreDataLoaded()
|
|
|
paywallOverlay.refreshStoreState()
|
|
paywallOverlay.refreshStoreState()
|
|
|
}
|
|
}
|
|
|
return
|
|
return
|
|
@@ -653,11 +651,9 @@ class ViewController: NSViewController {
|
|
|
documentView.translatesAutoresizingMaskIntoConstraints = false
|
|
documentView.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
|
|
|
let sectionTitle = makeSectionTitle(title, icon: .grid)
|
|
let sectionTitle = makeSectionTitle(title, icon: .grid)
|
|
|
- let freeUsesBanner = FreeUsesBannerView()
|
|
|
|
|
let grid = makeFeatureGrid(features: features, columns: AppTheme.featureGridColumns)
|
|
let grid = makeFeatureGrid(features: features, columns: AppTheme.featureGridColumns)
|
|
|
|
|
|
|
|
documentView.addSubview(sectionTitle)
|
|
documentView.addSubview(sectionTitle)
|
|
|
- documentView.addSubview(freeUsesBanner)
|
|
|
|
|
documentView.addSubview(grid)
|
|
documentView.addSubview(grid)
|
|
|
scrollView.documentView = documentView
|
|
scrollView.documentView = documentView
|
|
|
container.addSubview(scrollView)
|
|
container.addSubview(scrollView)
|
|
@@ -679,13 +675,9 @@ class ViewController: NSViewController {
|
|
|
sectionTitle.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
sectionTitle.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
sectionTitle.topAnchor.constraint(equalTo: documentView.topAnchor, constant: 8),
|
|
sectionTitle.topAnchor.constraint(equalTo: documentView.topAnchor, constant: 8),
|
|
|
|
|
|
|
|
- freeUsesBanner.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
|
|
|
- freeUsesBanner.trailingAnchor.constraint(lessThanOrEqualTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
|
|
- freeUsesBanner.topAnchor.constraint(equalTo: sectionTitle.bottomAnchor, constant: 12),
|
|
|
|
|
-
|
|
|
|
|
grid.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
grid.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
|
grid.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
grid.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
- grid.topAnchor.constraint(equalTo: freeUsesBanner.bottomAnchor, constant: 16),
|
|
|
|
|
|
|
+ grid.topAnchor.constraint(equalTo: sectionTitle.bottomAnchor, constant: 16),
|
|
|
grid.bottomAnchor.constraint(equalTo: documentView.bottomAnchor, constant: -40),
|
|
grid.bottomAnchor.constraint(equalTo: documentView.bottomAnchor, constant: -40),
|
|
|
])
|
|
])
|
|
|
|
|
|
|
@@ -700,18 +692,11 @@ class ViewController: NSViewController {
|
|
|
titleLabel.alignment = .center
|
|
titleLabel.alignment = .center
|
|
|
titleLabel.translatesAutoresizingMaskIntoConstraints = false
|
|
titleLabel.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
|
|
|
- headerFreeUsesBanner = FreeUsesBannerView()
|
|
|
|
|
- headerFreeUsesBanner.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
-
|
|
|
|
|
header.addSubview(titleLabel)
|
|
header.addSubview(titleLabel)
|
|
|
- header.addSubview(headerFreeUsesBanner)
|
|
|
|
|
|
|
|
|
|
NSLayoutConstraint.activate([
|
|
NSLayoutConstraint.activate([
|
|
|
titleLabel.centerXAnchor.constraint(equalTo: header.centerXAnchor),
|
|
titleLabel.centerXAnchor.constraint(equalTo: header.centerXAnchor),
|
|
|
titleLabel.centerYAnchor.constraint(equalTo: header.centerYAnchor),
|
|
titleLabel.centerYAnchor.constraint(equalTo: header.centerYAnchor),
|
|
|
-
|
|
|
|
|
- headerFreeUsesBanner.trailingAnchor.constraint(equalTo: header.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
|
|
- headerFreeUsesBanner.centerYAnchor.constraint(equalTo: header.centerYAnchor),
|
|
|
|
|
])
|
|
])
|
|
|
|
|
|
|
|
return header
|
|
return header
|
|
@@ -754,11 +739,9 @@ class ViewController: NSViewController {
|
|
|
let documentView = FlippedDocumentView()
|
|
let documentView = FlippedDocumentView()
|
|
|
documentView.translatesAutoresizingMaskIntoConstraints = false
|
|
documentView.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
|
|
|
- let freeUsesBanner = FreeUsesBannerView()
|
|
|
|
|
let quickStartSection = makeQuickStartSection()
|
|
let quickStartSection = makeQuickStartSection()
|
|
|
let createPrintSection = makeCreatePrintSection()
|
|
let createPrintSection = makeCreatePrintSection()
|
|
|
|
|
|
|
|
- documentView.addSubview(freeUsesBanner)
|
|
|
|
|
documentView.addSubview(quickStartSection)
|
|
documentView.addSubview(quickStartSection)
|
|
|
documentView.addSubview(createPrintSection)
|
|
documentView.addSubview(createPrintSection)
|
|
|
scrollView.documentView = documentView
|
|
scrollView.documentView = documentView
|
|
@@ -771,13 +754,9 @@ class ViewController: NSViewController {
|
|
|
documentView.trailingAnchor.constraint(equalTo: contentGuide.trailingAnchor),
|
|
documentView.trailingAnchor.constraint(equalTo: contentGuide.trailingAnchor),
|
|
|
documentView.widthAnchor.constraint(equalTo: contentGuide.widthAnchor),
|
|
documentView.widthAnchor.constraint(equalTo: contentGuide.widthAnchor),
|
|
|
|
|
|
|
|
- freeUsesBanner.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
|
|
|
- freeUsesBanner.trailingAnchor.constraint(lessThanOrEqualTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
|
|
- freeUsesBanner.topAnchor.constraint(equalTo: documentView.topAnchor, constant: 12),
|
|
|
|
|
-
|
|
|
|
|
quickStartSection.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
quickStartSection.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
|
quickStartSection.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
quickStartSection.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
|
- quickStartSection.topAnchor.constraint(equalTo: freeUsesBanner.bottomAnchor, constant: 16),
|
|
|
|
|
|
|
+ quickStartSection.topAnchor.constraint(equalTo: documentView.topAnchor, constant: 12),
|
|
|
|
|
|
|
|
createPrintSection.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
createPrintSection.leadingAnchor.constraint(equalTo: documentView.leadingAnchor, constant: AppTheme.contentPadding),
|
|
|
createPrintSection.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|
|
createPrintSection.trailingAnchor.constraint(equalTo: documentView.trailingAnchor, constant: -AppTheme.contentPadding),
|