226 lines
7.9 KiB
Swift
226 lines
7.9 KiB
Swift
//
|
|
// AppImage.swift
|
|
// NetNewsWire
|
|
//
|
|
// Created by Brent Simmons on 1/26/25.
|
|
// Copyright © 2025 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
#if os(macOS)
|
|
import AppKit
|
|
#elseif os(iOS)
|
|
import UIKit
|
|
#endif
|
|
import RSCore
|
|
import Account
|
|
|
|
struct AppImage {
|
|
|
|
// MARK: - Account
|
|
|
|
static func account(_ accountType: AccountType) -> RSImage? {
|
|
switch accountType {
|
|
case .onMyMac:
|
|
AppImage.accountLocal
|
|
case .cloudKit:
|
|
AppImage.accountCloudKit
|
|
case .feedbin:
|
|
AppImage.accountFeedbin
|
|
case .feedly:
|
|
AppImage.accountFeedly
|
|
case .freshRSS:
|
|
AppImage.accountFreshRSS
|
|
case .newsBlur:
|
|
AppImage.accountNewsBlur
|
|
case .inoreader:
|
|
AppImage.accountInoreader
|
|
case .bazQux:
|
|
AppImage.accountBazQux
|
|
case .theOldReader:
|
|
AppImage.accountTheOldReader
|
|
}
|
|
}
|
|
|
|
static var articleExtractorError = appImage("articleExtractorError")
|
|
static var articleExtractorOff = appImage("articleExtractorOff")
|
|
static var articleExtractorOn = appImage("articleExtractorOn")
|
|
static var faviconTemplate = appImage("faviconTemplateImage")
|
|
static var filterActive = systemImage("line.horizontal.3.decrease.circle.fill")
|
|
static var filterInactive = systemImage("line.horizontal.3.decrease.circle")
|
|
static var markAllAsRead = appImage("markAllAsRead")
|
|
static let nnwFeedIcon = RSImage(named: "nnwFeedIcon")!
|
|
static var share = systemImage("square.and.arrow.up")
|
|
static var starClosed = systemImage("star.fill")
|
|
static var starOpen = systemImage("star")
|
|
}
|
|
|
|
// MARK: - Mac
|
|
|
|
extension AppImage {
|
|
|
|
#if os(macOS)
|
|
static var addNewSidebarItem = systemImage("plus")
|
|
static var articleTheme = systemImage("doc.richtext")
|
|
static var cleanUp = systemImage("wind")
|
|
static var marsEditIcon = appImage("MarsEditIcon")
|
|
static var microblogIcon = appImage("MicroblogIcon")
|
|
static var nextUnread = systemImage("chevron.down.circle")
|
|
static var openInBrowser = systemImage("safari")
|
|
static var preferencesToolbarAccounts = systemImage("at")
|
|
static var preferencesToolbarAdvanced = systemImage("gearshape.2")
|
|
static var preferencesToolbarGeneral = systemImage("gearshape")
|
|
static var readClosed = systemImage("largecircle.fill.circle")
|
|
static var readOpen = systemImage("circle")
|
|
static var refresh = systemImage("arrow.clockwise")
|
|
static var timelineStarSelected = appImage("timelineStar").tinted(with: .white)
|
|
static var timelineStarUnselected = appImage("timelineStar").tinted(with: AppColor.star)
|
|
|
|
static var swipeMarkRead: RSImage = {
|
|
RSImage(systemSymbolName: "circle", accessibilityDescription: "Mark Read")!
|
|
.withSymbolConfiguration(.init(scale: .large))!
|
|
}()
|
|
|
|
static var swipeMarkUnread: RSImage = {
|
|
RSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: "Mark Unread")!
|
|
.withSymbolConfiguration(.init(scale: .large))!
|
|
}()
|
|
|
|
static var swipeMarkStarred: RSImage = {
|
|
RSImage(systemSymbolName: "star.fill", accessibilityDescription: "Star")!
|
|
.withSymbolConfiguration(.init(scale: .large))!
|
|
}()
|
|
|
|
static var swipeMarkUnstarred: RSImage = {
|
|
RSImage(systemSymbolName: "star", accessibilityDescription: "Unstar")!
|
|
.withSymbolConfiguration(.init(scale: .large))!
|
|
}()
|
|
|
|
// IconImages
|
|
|
|
static var searchFeed = IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true, isBackgroundSuppressed: true)
|
|
|
|
// TODO: handle color palette change
|
|
|
|
static var starredFeed: IconImage = {
|
|
let image = systemImage("star.fill")
|
|
let preferredColor = AppColor.star
|
|
let coloredImage = image.tinted(with: preferredColor)
|
|
return IconImage(coloredImage, isSymbol: true, isBackgroundSuppressed: true, preferredColor: preferredColor.cgColor)
|
|
}()
|
|
|
|
static var todayFeed: IconImage = {
|
|
let image = systemImage("sun.max.fill")
|
|
let preferredColor = NSColor.orange
|
|
let coloredImage = image.tinted(with: preferredColor)
|
|
return IconImage(coloredImage, isSymbol: true, isBackgroundSuppressed: true, preferredColor: preferredColor.cgColor)
|
|
}()
|
|
|
|
static var unreadFeed: IconImage = {
|
|
let image = systemImage("largecircle.fill.circle")
|
|
let preferredColor = AppColor.accent
|
|
let coloredImage = image.tinted(with: preferredColor)
|
|
return IconImage(coloredImage, isSymbol: true, isBackgroundSuppressed: true, preferredColor: preferredColor.cgColor)
|
|
}()
|
|
|
|
static var folder: IconImage = {
|
|
let image = systemImage("folder")
|
|
let preferredColor = AppColor.accent
|
|
let coloredImage = image.tinted(with: preferredColor)
|
|
return IconImage(coloredImage, isSymbol: true, isBackgroundSuppressed: true, preferredColor: preferredColor.cgColor)
|
|
}()
|
|
#endif
|
|
}
|
|
|
|
// MARK: - iOS
|
|
|
|
extension AppImage {
|
|
|
|
#if os(iOS)
|
|
static var articleExtractorOffSF = systemImage("doc.plaintext")
|
|
static var articleExtractorOnSF = appImage("articleExtractorOnSF")
|
|
static var articleExtractorOffTinted = articleExtractorOff.tinted(color: AppColor.accent)!
|
|
static var articleExtractorOnTinted = articleExtractorOn.tinted(color: AppColor.accent)!
|
|
static var circleClosed = systemImage("largecircle.fill.circle")
|
|
static var circleOpen = systemImage("circle")
|
|
static var copy = systemImage("doc.on.doc")
|
|
static var deactivate = systemImage("minus.circle")
|
|
static var disclosure = appImage("disclosure")
|
|
static var edit = systemImage("square.and.pencil")
|
|
static var folderOutlinePlus = systemImage("folder.badge.plus")
|
|
static var info = systemImage("info.circle")
|
|
static var markBelowAsRead = systemImage("arrowtriangle.down.circle")
|
|
static var markAboveAsRead = systemImage("arrowtriangle.up.circle")
|
|
static var more = systemImage("ellipsis.circle")
|
|
static var nextArticle = systemImage("chevron.down")
|
|
static var nextUnreadArticle = systemImage("chevron.down.circle")
|
|
static var openInSidebar = systemImage("arrow.turn.down.left")
|
|
static var plus = systemImage("plus")
|
|
static var previousArticle = systemImage("chevron.up")
|
|
static var safari = systemImage("safari")
|
|
static var timelineStar = systemImage("star.fill").withTintColor(AppColor.star, renderingMode: .alwaysOriginal)
|
|
static var trash = systemImage("trash")
|
|
|
|
// IconImages
|
|
|
|
static var searchFeed = IconImage(systemImage("magnifyingglass"), isSymbol: true)
|
|
|
|
// TODO: handle color palette change
|
|
|
|
static var starredFeed: IconImage = {
|
|
let image = systemImage("star.fill")
|
|
return IconImage(image, isSymbol: true, isBackgroundSuppressed: true, preferredColor: AppColor.star.cgColor)
|
|
}()
|
|
|
|
static var todayFeed: IconImage = {
|
|
let image = systemImage("sun.max.fill")
|
|
return IconImage(image, isSymbol: true, isBackgroundSuppressed: true, preferredColor: UIColor.systemOrange.cgColor)
|
|
}()
|
|
|
|
static var unreadFeed: IconImage = {
|
|
let image = systemImage("largecircle.fill.circle")
|
|
return IconImage(image, isSymbol: true, isBackgroundSuppressed: true, preferredColor: AppColor.secondaryAccent.cgColor)
|
|
}()
|
|
|
|
static var folder: IconImage = {
|
|
let image = systemImage("folder.fill")
|
|
return IconImage(image, isSymbol: true, isBackgroundSuppressed: true, preferredColor: AppColor.secondaryAccent.cgColor)
|
|
}()
|
|
#endif
|
|
}
|
|
|
|
// MARK: - Private
|
|
|
|
private extension AppImage {
|
|
|
|
// MARK: - Account Images
|
|
|
|
static var accountBazQux = appImage("accountBazQux")
|
|
static var accountCloudKit = appImage("accountCloudKit")
|
|
static var accountFeedbin = appImage("accountFeedbin")
|
|
static var accountFeedly = appImage("accountFeedly")
|
|
static var accountFreshRSS = appImage("accountFreshRSS")
|
|
static var accountInoreader = appImage("accountInoreader")
|
|
static var accountNewsBlur = appImage("accountNewsBlur")
|
|
static var accountTheOldReader = appImage("accountTheOldReader")
|
|
|
|
#if os(macOS)
|
|
static var accountLocal = appImage("accountLocal")
|
|
#elseif os(iOS)
|
|
static var accountLocalPad = appImage("accountLocalPad")
|
|
static var accountLocalPhone = appImage("accountLocalPhone")
|
|
static var accountLocal = UIDevice.current.userInterfaceIdiom == .pad ? accountLocalPad : accountLocalPhone
|
|
#endif
|
|
|
|
static func appImage(_ name: String) -> RSImage {
|
|
RSImage(named: name)!
|
|
}
|
|
|
|
static func systemImage(_ name: String) -> RSImage {
|
|
#if os(macOS)
|
|
RSImage(systemSymbolName: name, accessibilityDescription: nil)!
|
|
#elseif os(iOS)
|
|
UIImage(systemName: name)!
|
|
#endif
|
|
}
|
|
}
|