Change any glyphs in the sidebar to white when selected to make them visible regardless of use control color selection

This commit is contained in:
Maurice Parker 2020-08-10 13:53:21 -05:00
parent c652486663
commit 73b120a91c
6 changed files with 110 additions and 26 deletions

View File

@ -118,15 +118,16 @@ struct AppAssets {
return NSColor(named: NSColor.Name("iconDarkBackgroundColor"))! return NSColor(named: NSColor.Name("iconDarkBackgroundColor"))!
}() }()
static var masterFolderImage: IconImage = { static var masterFolderImage: IconImage {
if #available(macOS 11.0, *) { if #available(macOS 11.0, *) {
let image = NSImage(systemSymbolName: "folder", accessibilityDescription: nil)! let image = NSImage(systemSymbolName: "folder", accessibilityDescription: nil)!
let coloredImage = image.tinted(with: NSColor(named: "AccentColor")!) let preferredColor = NSColor(named: "AccentColor")!
return IconImage(coloredImage, isSymbol: true) let coloredImage = image.tinted(with: preferredColor)
return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor)
} else { } else {
return IconImage(RSImage(named: NSImage.folderName)!) return IconImage(RSImage(named: NSImage.folderName)!)
} }
}() }
static var markAllAsReadImage: RSImage = { static var markAllAsReadImage: RSImage = {
return RSImage(named: "markAllAsRead")! return RSImage(named: "markAllAsRead")!
@ -211,8 +212,9 @@ struct AppAssets {
static var starredFeedImage: IconImage = { static var starredFeedImage: IconImage = {
if #available(macOS 11.0, *) { if #available(macOS 11.0, *) {
let image = NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)! let image = NSImage(systemSymbolName: "star.fill", accessibilityDescription: nil)!
let coloredImage = image.tinted(with: NSColor(named: "StarColor")!) let preferredColor = NSColor(named: "StarColor")!
return IconImage(coloredImage, isSymbol: true) let coloredImage = image.tinted(with: preferredColor)
return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor)
} else { } else {
return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true)
} }
@ -231,8 +233,9 @@ struct AppAssets {
static var todayFeedImage: IconImage = { static var todayFeedImage: IconImage = {
if #available(macOS 11.0, *) { if #available(macOS 11.0, *) {
let image = NSImage(systemSymbolName: "sun.max.fill", accessibilityDescription: nil)! let image = NSImage(systemSymbolName: "sun.max.fill", accessibilityDescription: nil)!
let coloredImage = image.tinted(with: .orange) let preferredColor = NSColor.orange
return IconImage(coloredImage, isSymbol: true) let coloredImage = image.tinted(with: preferredColor)
return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor)
} else { } else {
return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true)
} }
@ -241,8 +244,9 @@ struct AppAssets {
static var unreadFeedImage: IconImage = { static var unreadFeedImage: IconImage = {
if #available(macOS 11.0, *) { if #available(macOS 11.0, *) {
let image = NSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: nil)! let image = NSImage(systemSymbolName: "largecircle.fill.circle", accessibilityDescription: nil)!
let coloredImage = image.tinted(with: NSColor(named: "AccentColor")!) let preferredColor = NSColor(named: "AccentColor")!
return IconImage(coloredImage, isSymbol: true) let coloredImage = image.tinted(with: preferredColor)
return IconImage(coloredImage, isSymbol: true, preferredColor: preferredColor.cgColor)
} else { } else {
return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true)
} }

View File

@ -15,12 +15,7 @@ class SidebarCell : NSTableCellView {
var iconImage: IconImage? { var iconImage: IconImage? {
didSet { didSet {
if let image = iconImage { updateFaviconImage()
faviconImageView.iconImage = shouldShowImage ? image : nil
}
else {
faviconImageView.iconImage = nil
}
} }
} }
@ -33,7 +28,6 @@ class SidebarCell : NSTableCellView {
} }
} }
var cellAppearance: SidebarCellAppearance? { var cellAppearance: SidebarCellAppearance? {
didSet { didSet {
if cellAppearance != oldValue { if cellAppearance != oldValue {
@ -68,6 +62,12 @@ class SidebarCell : NSTableCellView {
} }
} }
var isSelected: Bool = false {
didSet {
updateFaviconImage()
}
}
private let titleView: NSTextField = { private let titleView: NSTextField = {
let textField = NSTextField(labelWithString: "") let textField = NSTextField(labelWithString: "")
textField.usesSingleLineMode = true textField.usesSingleLineMode = true
@ -79,7 +79,6 @@ class SidebarCell : NSTableCellView {
}() }()
private let faviconImageView = IconView() private let faviconImageView = IconView()
private let unreadCountView = UnreadCountView(frame: NSZeroRect) private let unreadCountView = UnreadCountView(frame: NSZeroRect)
override var isFlipped: Bool { override var isFlipped: Bool {
@ -137,5 +136,31 @@ private extension SidebarCell {
titleView.setFrame(ifNotEqualTo: layout.titleRect) titleView.setFrame(ifNotEqualTo: layout.titleRect)
unreadCountView.setFrame(ifNotEqualTo: layout.unreadCountRect) unreadCountView.setFrame(ifNotEqualTo: layout.unreadCountRect)
} }
func updateFaviconImage() {
var updatedIconImage = iconImage
if let iconImage = iconImage, iconImage.isSymbol {
if isSelected {
let image = iconImage.image.tinted(with: .white)
updatedIconImage = IconImage(image, isSymbol: true)
} else {
if let preferredColor = iconImage.preferredColor {
let image = iconImage.image.tinted(with: NSColor(cgColor: preferredColor)!)
updatedIconImage = IconImage(image, isSymbol: true)
} else {
let image = iconImage.image.tinted(with: .controlAccentColor)
updatedIconImage = IconImage(image, isSymbol: true)
}
}
}
if let image = updatedIconImage {
faviconImageView.iconImage = shouldShowImage ? image : nil
} else {
faviconImageView.iconImage = nil
}
}
} }

View File

@ -0,0 +1,36 @@
//
// SidebarTableRowView.swift
// NetNewsWire
//
// Created by Maurice Parker on 8/10/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import AppKit
class SidebarTableRowView : NSTableRowView {
override var isSelected: Bool {
didSet {
cellView?.isSelected = isSelected
}
}
init() {
super.init(frame: NSRect.zero)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private var cellView: SidebarCell? {
for oneSubview in subviews {
if let foundView = oneSubview as? SidebarCell {
return foundView
}
}
return nil
}
}

View File

@ -57,6 +57,8 @@ protocol SidebarDelegate: class {
return selectedNodes.representedObjects() return selectedNodes.representedObjects()
} }
private static let rowViewIdentifier = NSUserInterfaceItemIdentifier(rawValue: "sidebarRow")
// MARK: - NSViewController // MARK: - NSViewController
override func viewDidLoad() { override func viewDidLoad() {
@ -340,6 +342,15 @@ protocol SidebarDelegate: class {
// MARK: - NSOutlineViewDelegate // MARK: - NSOutlineViewDelegate
func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
if let rowView = outlineView.makeView(withIdentifier: SidebarViewController.rowViewIdentifier, owner: nil) as? SidebarTableRowView {
return rowView
}
let rowView = SidebarTableRowView()
rowView.identifier = SidebarViewController.rowViewIdentifier
return rowView
}
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
let node = item as! Node let node = item as! Node

View File

@ -303,6 +303,8 @@
5194736F24BBB937001A2939 /* HiddenModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5194736D24BBB937001A2939 /* HiddenModifier.swift */; }; 5194736F24BBB937001A2939 /* HiddenModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5194736D24BBB937001A2939 /* HiddenModifier.swift */; };
5194737124BBCAF4001A2939 /* TimelineSortOrderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5194737024BBCAF4001A2939 /* TimelineSortOrderView.swift */; }; 5194737124BBCAF4001A2939 /* TimelineSortOrderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5194737024BBCAF4001A2939 /* TimelineSortOrderView.swift */; };
519B8D332143397200FA689C /* SharingServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519B8D322143397200FA689C /* SharingServiceDelegate.swift */; }; 519B8D332143397200FA689C /* SharingServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519B8D322143397200FA689C /* SharingServiceDelegate.swift */; };
519D2F2524E1C03300AD7D8A /* SidebarTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519D2F2424E1C03300AD7D8A /* SidebarTableRowView.swift */; };
519D2F2624E1C03300AD7D8A /* SidebarTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519D2F2424E1C03300AD7D8A /* SidebarTableRowView.swift */; };
519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519E743422C663F900A78E47 /* SceneDelegate.swift */; }; 519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519E743422C663F900A78E47 /* SceneDelegate.swift */; };
519ED456244828C3007F8E94 /* AddExtensionPointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519ED455244828C3007F8E94 /* AddExtensionPointViewController.swift */; }; 519ED456244828C3007F8E94 /* AddExtensionPointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519ED455244828C3007F8E94 /* AddExtensionPointViewController.swift */; };
519ED47A24482AEB007F8E94 /* EnableExtensionPointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519ED47924482AEB007F8E94 /* EnableExtensionPointViewController.swift */; }; 519ED47A24482AEB007F8E94 /* EnableExtensionPointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519ED47924482AEB007F8E94 /* EnableExtensionPointViewController.swift */; };
@ -1595,6 +1597,7 @@
5194736D24BBB937001A2939 /* HiddenModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenModifier.swift; sourceTree = "<group>"; }; 5194736D24BBB937001A2939 /* HiddenModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenModifier.swift; sourceTree = "<group>"; };
5194737024BBCAF4001A2939 /* TimelineSortOrderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineSortOrderView.swift; sourceTree = "<group>"; }; 5194737024BBCAF4001A2939 /* TimelineSortOrderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineSortOrderView.swift; sourceTree = "<group>"; };
519B8D322143397200FA689C /* SharingServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingServiceDelegate.swift; sourceTree = "<group>"; }; 519B8D322143397200FA689C /* SharingServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingServiceDelegate.swift; sourceTree = "<group>"; };
519D2F2424E1C03300AD7D8A /* SidebarTableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarTableRowView.swift; sourceTree = "<group>"; };
519E743422C663F900A78E47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; 519E743422C663F900A78E47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
519ED455244828C3007F8E94 /* AddExtensionPointViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddExtensionPointViewController.swift; sourceTree = "<group>"; }; 519ED455244828C3007F8E94 /* AddExtensionPointViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddExtensionPointViewController.swift; sourceTree = "<group>"; };
519ED47924482AEB007F8E94 /* EnableExtensionPointViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnableExtensionPointViewController.swift; sourceTree = "<group>"; }; 519ED47924482AEB007F8E94 /* EnableExtensionPointViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnableExtensionPointViewController.swift; sourceTree = "<group>"; };
@ -3050,16 +3053,17 @@
849A975F1ED9EB95007D329B /* Sidebar */ = { 849A975F1ED9EB95007D329B /* Sidebar */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
849A97621ED9EB96007D329B /* SidebarViewController.swift */, 84AD1EA92031617300BC20B7 /* PasteboardFolder.swift */,
84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */, 848D578D21543519005FFAD5 /* PasteboardWebFeed.swift */,
84AD1EBB2032AF5C00BC20B7 /* SidebarOutlineDataSource.swift */, 84AD1EBB2032AF5C00BC20B7 /* SidebarOutlineDataSource.swift */,
849A97601ED9EB96007D329B /* SidebarOutlineView.swift */, 849A97601ED9EB96007D329B /* SidebarOutlineView.swift */,
849A97631ED9EB96007D329B /* UnreadCountView.swift */,
848D578D21543519005FFAD5 /* PasteboardWebFeed.swift */,
84AD1EA92031617300BC20B7 /* PasteboardFolder.swift */,
849A97821ED9EC63007D329B /* SidebarStatusBarView.swift */, 849A97821ED9EC63007D329B /* SidebarStatusBarView.swift */,
844B5B6A1FEA224000C7C76A /* Keyboard */, 519D2F2424E1C03300AD7D8A /* SidebarTableRowView.swift */,
849A97621ED9EB96007D329B /* SidebarViewController.swift */,
84B7178B201E66580091657D /* SidebarViewController+ContextualMenus.swift */,
849A97631ED9EB96007D329B /* UnreadCountView.swift */,
845A29251FC928C7007B49E3 /* Cell */, 845A29251FC928C7007B49E3 /* Cell */,
844B5B6A1FEA224000C7C76A /* Keyboard */,
84A37CB3201ECD610087C5AF /* Renaming */, 84A37CB3201ECD610087C5AF /* Renaming */,
); );
path = Sidebar; path = Sidebar;
@ -4748,6 +4752,7 @@
65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */, 65ED3FED235DEF6C0081F399 /* SendToMarsEditCommand.swift in Sources */,
514A89A6244FD6640085E65D /* AddTwitterFeedWindowController.swift in Sources */, 514A89A6244FD6640085E65D /* AddTwitterFeedWindowController.swift in Sources */,
65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */, 65ED3FEE235DEF6C0081F399 /* UserNotificationManager.swift in Sources */,
519D2F2624E1C03300AD7D8A /* SidebarTableRowView.swift in Sources */,
65ED3FEF235DEF6C0081F399 /* ScriptingObjectContainer.swift in Sources */, 65ED3FEF235DEF6C0081F399 /* ScriptingObjectContainer.swift in Sources */,
65ED3FF0235DEF6C0081F399 /* ArticleStylesManager.swift in Sources */, 65ED3FF0235DEF6C0081F399 /* ArticleStylesManager.swift in Sources */,
65ED3FF1235DEF6C0081F399 /* DetailContainerView.swift in Sources */, 65ED3FF1235DEF6C0081F399 /* DetailContainerView.swift in Sources */,
@ -5150,6 +5155,7 @@
848D578E21543519005FFAD5 /* PasteboardWebFeed.swift in Sources */, 848D578E21543519005FFAD5 /* PasteboardWebFeed.swift in Sources */,
5144EA2F2279FAB600D19003 /* AccountsDetailViewController.swift in Sources */, 5144EA2F2279FAB600D19003 /* AccountsDetailViewController.swift in Sources */,
849A97801ED9EC42007D329B /* DetailViewController.swift in Sources */, 849A97801ED9EC42007D329B /* DetailViewController.swift in Sources */,
519D2F2524E1C03300AD7D8A /* SidebarTableRowView.swift in Sources */,
518C3193237B00D9004D740F /* DetailIconSchemeHandler.swift in Sources */, 518C3193237B00D9004D740F /* DetailIconSchemeHandler.swift in Sources */,
84C9FC6722629B9000D921D6 /* AppDelegate.swift in Sources */, 84C9FC6722629B9000D921D6 /* AppDelegate.swift in Sources */,
84C9FC7A22629E1200D921D6 /* PreferencesTableViewBackgroundView.swift in Sources */, 84C9FC7A22629E1200D921D6 /* PreferencesTableViewBackgroundView.swift in Sources */,

View File

@ -25,11 +25,13 @@ final class IconImage {
}() }()
let image: RSImage let image: RSImage
var isSymbol: Bool let isSymbol: Bool
let preferredColor: CGColor?
init(_ image: RSImage, isSymbol: Bool = false) { init(_ image: RSImage, isSymbol: Bool = false, preferredColor: CGColor? = nil) {
self.image = image self.image = image
self.isSymbol = isSymbol self.isSymbol = isSymbol
self.preferredColor = preferredColor
} }
} }