From ef18600acc06c140b42622073d0bdd3632a0c6aa Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sun, 6 Dec 2020 14:25:22 -0600 Subject: [PATCH] Separate background suppression from symbol processing. Fixes #2646 & Fixes #2635 --- Mac/AppAssets.swift | 16 ++++++++-------- Mac/MainWindow/IconView.swift | 2 +- Mac/MainWindow/Sidebar/Cell/SidebarCell.swift | 6 +++--- Multiplatform/iOS/Article/IconView.swift | 6 +++++- Shared/Extensions/IconImage.swift | 4 +++- Shared/Favicons/FaviconGenerator.swift | 4 ++-- iOS/AppAssets.swift | 8 ++++---- iOS/IconView.swift | 6 +++++- .../smartFeedStar.imageset/Contents.json | 3 +++ .../smartFeedToday.imageset/Contents.json | 3 +++ .../smartFeedUnread.imageset/Contents.json | 3 +++ 11 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Mac/AppAssets.swift b/Mac/AppAssets.swift index a5993d9a7..6759f9862 100644 --- a/Mac/AppAssets.swift +++ b/Mac/AppAssets.swift @@ -155,7 +155,7 @@ struct AppAssets { let image = NSImage(systemSymbolName: "folder", accessibilityDescription: nil)! let preferredColor = NSColor(named: "AccentColor")! let coloredImage = image.tinted(with: preferredColor) - return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor) + return IconImage(coloredImage, isSymbol: true, isBackgroundSupressed: true, preferredColor: preferredColor.cgColor) } else { return IconImage(RSImage(named: NSImage.folderName)!) } @@ -223,7 +223,7 @@ struct AppAssets { }() static var searchFeedImage: IconImage = { - return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) + return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true, isBackgroundSupressed: true) }() @available(macOS 11.0, *) @@ -251,9 +251,9 @@ struct AppAssets { let image = NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)! let preferredColor = NSColor(named: "StarColor")! let coloredImage = image.tinted(with: preferredColor) - return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor) + return IconImage(coloredImage, isSymbol: true, isBackgroundSupressed: true, preferredColor: preferredColor.cgColor) } else { - return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) + return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isBackgroundSupressed: true) } }() @@ -274,9 +274,9 @@ struct AppAssets { let image = NSImage(systemSymbolName: "sun.max.fill", accessibilityDescription: nil)! let preferredColor = NSColor.orange let coloredImage = image.tinted(with: preferredColor) - return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor) + return IconImage(coloredImage, isSymbol: true, isBackgroundSupressed: true, preferredColor: preferredColor.cgColor) } else { - return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) + return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isBackgroundSupressed: true) } }() @@ -285,9 +285,9 @@ struct AppAssets { let image = NSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: nil)! let preferredColor = NSColor(named: "AccentColor")! let coloredImage = image.tinted(with: preferredColor) - return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor) + return IconImage(coloredImage, isSymbol: true, isBackgroundSupressed: true, preferredColor: preferredColor.cgColor) } else { - return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) + return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isBackgroundSupressed: true) } }() diff --git a/Mac/MainWindow/IconView.swift b/Mac/MainWindow/IconView.swift index bd84ed41b..401f41cb0 100644 --- a/Mac/MainWindow/IconView.swift +++ b/Mac/MainWindow/IconView.swift @@ -84,7 +84,7 @@ final class IconView: NSView { } override func draw(_ dirtyRect: NSRect) { - guard !(iconImage?.isSymbol ?? true) else { return } + guard !(iconImage?.isBackgroundSupressed ?? false) else { return } guard hasExposedVerticalBackground || !isDisconcernable else { return } let color = NSApplication.shared.effectiveAppearance.isDarkMode ? IconView.darkBackgroundColor : IconView.lightBackgroundColor diff --git a/Mac/MainWindow/Sidebar/Cell/SidebarCell.swift b/Mac/MainWindow/Sidebar/Cell/SidebarCell.swift index 60f50deab..6355edb35 100644 --- a/Mac/MainWindow/Sidebar/Cell/SidebarCell.swift +++ b/Mac/MainWindow/Sidebar/Cell/SidebarCell.swift @@ -143,14 +143,14 @@ private extension SidebarCell { if let iconImage = iconImage, iconImage.isSymbol { if backgroundStyle != .normal { let image = iconImage.image.tinted(with: .white) - updatedIconImage = IconImage(image, isSymbol: true) + updatedIconImage = IconImage(image, isSymbol: iconImage.isSymbol, isBackgroundSupressed: iconImage.isBackgroundSupressed) } else { if let preferredColor = iconImage.preferredColor { let image = iconImage.image.tinted(with: NSColor(cgColor: preferredColor)!) - updatedIconImage = IconImage(image, isSymbol: true) + updatedIconImage = IconImage(image, isSymbol: iconImage.isSymbol, isBackgroundSupressed: iconImage.isBackgroundSupressed) } else { let image = iconImage.image.tinted(with: .controlAccentColor) - updatedIconImage = IconImage(image, isSymbol: true) + updatedIconImage = IconImage(image, isSymbol: iconImage.isSymbol, isBackgroundSupressed: iconImage.isBackgroundSupressed) } } } diff --git a/Multiplatform/iOS/Article/IconView.swift b/Multiplatform/iOS/Article/IconView.swift index d42b17b24..1f8974287 100644 --- a/Multiplatform/iOS/Article/IconView.swift +++ b/Multiplatform/iOS/Article/IconView.swift @@ -55,6 +55,10 @@ final class IconView: UIView { return imageView.image?.isSymbolImage ?? false } + private var isBackgroundSuppressed: Bool { + return imageView.image?.isBackgroundSuppressed ?? false + } + override init(frame: CGRect) { super.init(frame: frame) commonInit() @@ -75,7 +79,7 @@ final class IconView: UIView { override func layoutSubviews() { imageView.setFrameIfNotEqual(rectForImageView()) - if (iconImage != nil && isVerticalBackgroundExposed && !isSymbolImage) || !isDisconcernable { + if (iconImage != nil && isVerticalBackgroundExposed) || !isDisconcernable { backgroundColor = AppAssets.uiIconBackgroundColor } else { backgroundColor = nil diff --git a/Shared/Extensions/IconImage.swift b/Shared/Extensions/IconImage.swift index 006dea48c..dd11e0933 100644 --- a/Shared/Extensions/IconImage.swift +++ b/Shared/Extensions/IconImage.swift @@ -26,12 +26,14 @@ final class IconImage { let image: RSImage let isSymbol: Bool + let isBackgroundSupressed: Bool let preferredColor: CGColor? - init(_ image: RSImage, isSymbol: Bool = false, preferredColor: CGColor? = nil) { + init(_ image: RSImage, isSymbol: Bool = false, isBackgroundSupressed: Bool = false, preferredColor: CGColor? = nil) { self.image = image self.isSymbol = isSymbol self.preferredColor = preferredColor + self.isBackgroundSupressed = isBackgroundSupressed } } diff --git a/Shared/Favicons/FaviconGenerator.swift b/Shared/Favicons/FaviconGenerator.swift index 3a19ac7ef..bb4d1b054 100644 --- a/Shared/Favicons/FaviconGenerator.swift +++ b/Shared/Favicons/FaviconGenerator.swift @@ -22,11 +22,11 @@ final class FaviconGenerator { let colorHash = ColorHash(webFeed.url) if let favicon = AppAssets.faviconTemplateImage.maskWithColor(color: colorHash.color.cgColor) { - let iconImage = IconImage(favicon) + let iconImage = IconImage(favicon, isBackgroundSupressed: true) FaviconGenerator.faviconGeneratorCache[webFeed.url] = iconImage return iconImage } else { - return IconImage(AppAssets.faviconTemplateImage) + return IconImage(AppAssets.faviconTemplateImage, isBackgroundSupressed: true) } } diff --git a/iOS/AppAssets.swift b/iOS/AppAssets.swift index 5a2e1fa11..b3b74b14c 100644 --- a/iOS/AppAssets.swift +++ b/iOS/AppAssets.swift @@ -154,7 +154,7 @@ struct AppAssets { }() static var masterFolderImage: IconImage = { - return IconImage(UIImage(systemName: "folder.fill")!, isSymbol: true) + return IconImage(UIImage(systemName: "folder")!, isSymbol: true, isBackgroundSupressed: true) }() static var moreImage: UIImage = { @@ -219,7 +219,7 @@ struct AppAssets { static var starredFeedImage: IconImage = { let image = UIImage(named: "smartFeedStar")! - return IconImage(image, isSymbol: true, preferredColor: nil) + return IconImage(image, isSymbol: true, isBackgroundSupressed: true, preferredColor: nil) }() static var tickMarkColor: UIColor = { @@ -233,7 +233,7 @@ struct AppAssets { static var todayFeedImage: IconImage = { let image = UIImage(named: "smartFeedToday")! - return IconImage(image, isSymbol: true, preferredColor: nil) + return IconImage(image, isSymbol: true, isBackgroundSupressed: true, preferredColor: nil) }() static var trashImage: UIImage = { @@ -242,7 +242,7 @@ struct AppAssets { static var unreadFeedImage: IconImage = { let image = UIImage(named: "smartFeedUnread")! - return IconImage(image, isSymbol: true, preferredColor: nil) + return IconImage(image, isSymbol: true, isBackgroundSupressed: true, preferredColor: nil) }() static var vibrantTextColor: UIColor = { diff --git a/iOS/IconView.swift b/iOS/IconView.swift index a7d9f3e28..e342c010f 100644 --- a/iOS/IconView.swift +++ b/iOS/IconView.swift @@ -55,6 +55,10 @@ final class IconView: UIView { return iconImage?.isSymbol ?? false } + private var isBackgroundSuppressed: Bool { + return iconImage?.isBackgroundSupressed ?? false + } + override init(frame: CGRect) { super.init(frame: frame) commonInit() @@ -75,7 +79,7 @@ final class IconView: UIView { override func layoutSubviews() { imageView.setFrameIfNotEqual(rectForImageView()) - if !isSymbolImage && ((iconImage != nil && isVerticalBackgroundExposed) || !isDisconcernable) { + if !isBackgroundSuppressed && ((iconImage != nil && isVerticalBackgroundExposed) || !isDisconcernable) { backgroundColor = AppAssets.iconBackgroundColor } else { backgroundColor = nil diff --git a/iOS/Resources/Assets.xcassets/smartFeedStar.imageset/Contents.json b/iOS/Resources/Assets.xcassets/smartFeedStar.imageset/Contents.json index 66a9bd099..36b70afee 100644 --- a/iOS/Resources/Assets.xcassets/smartFeedStar.imageset/Contents.json +++ b/iOS/Resources/Assets.xcassets/smartFeedStar.imageset/Contents.json @@ -8,5 +8,8 @@ "info" : { "author" : "xcode", "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" } } diff --git a/iOS/Resources/Assets.xcassets/smartFeedToday.imageset/Contents.json b/iOS/Resources/Assets.xcassets/smartFeedToday.imageset/Contents.json index c2f498767..eef86ef84 100644 --- a/iOS/Resources/Assets.xcassets/smartFeedToday.imageset/Contents.json +++ b/iOS/Resources/Assets.xcassets/smartFeedToday.imageset/Contents.json @@ -18,5 +18,8 @@ "info" : { "author" : "xcode", "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" } } diff --git a/iOS/Resources/Assets.xcassets/smartFeedUnread.imageset/Contents.json b/iOS/Resources/Assets.xcassets/smartFeedUnread.imageset/Contents.json index 4272a594e..9a04ad91a 100644 --- a/iOS/Resources/Assets.xcassets/smartFeedUnread.imageset/Contents.json +++ b/iOS/Resources/Assets.xcassets/smartFeedUnread.imageset/Contents.json @@ -18,5 +18,8 @@ "info" : { "author" : "xcode", "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" } }