From 203637b30e86c79bcb93cff5d1bbaef007f252df Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 17 Feb 2018 22:23:36 -0800 Subject: [PATCH] Show a star in the timeline for starred articles. --- Evergreen/AppImages.swift | 5 +++ .../timelineStar.imageset/Contents.json | 22 ++++++++++++ .../timelineStar.imageset/timelineStar.png | Bin 0 -> 981 bytes .../timelineStar.imageset/timelineStar@2x.png | Bin 0 -> 1303 bytes .../Timeline/Cell/TimelineCellData.swift | 3 ++ .../Timeline/Cell/TimelineCellLayout.swift | 2 +- .../Timeline/Cell/TimelineTableCellView.swift | 33 ++++++++++++------ Evergreen/Resources/DB5.plist | 2 +- 8 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 Evergreen/Assets.xcassets/timelineStar.imageset/Contents.json create mode 100644 Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar.png create mode 100644 Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar@2x.png diff --git a/Evergreen/AppImages.swift b/Evergreen/AppImages.swift index 6b08ab7b7..17c160577 100644 --- a/Evergreen/AppImages.swift +++ b/Evergreen/AppImages.swift @@ -11,6 +11,7 @@ import AppKit extension NSImage.Name { static let star = NSImage.Name(rawValue: "star") static let unstar = NSImage.Name(rawValue: "unstar") + static let timelineStar = NSImage.Name(rawValue: "timelineStar") } struct AppImages { @@ -20,4 +21,8 @@ struct AppImages { let image = NSImage(contentsOfFile: path) return image }() + + static var timelineStar: NSImage! = { + return NSImage(named: .timelineStar) + }() } diff --git a/Evergreen/Assets.xcassets/timelineStar.imageset/Contents.json b/Evergreen/Assets.xcassets/timelineStar.imageset/Contents.json new file mode 100644 index 000000000..838695523 --- /dev/null +++ b/Evergreen/Assets.xcassets/timelineStar.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "timelineStar.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "timelineStar@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar.png b/Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar.png new file mode 100644 index 0000000000000000000000000000000000000000..eb88ecbc7a1d5923b93f1bc871622a32339a7993 GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f>5jgR3=A9lx&I`x0{IHb9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!CBxDSxV%QuQiw3xKK_7;Gx6fXv*~l0=1y+?>2(s|s5sunH?6 z8zii+qySb@l5MLL;TxdfoL`ixV5(=LXP{)qrJ$f-QN^PGMBb474qg}`6R4!DO34IM^VA{b?=*2cj{z3lsT-EfA6-rHT!?jI+w%z zl^>W_ZM60_oG^#){guciqOXs;_L=#W=ohNIQGb>nx%9|i^?9e(rg7?Twz+(VnNfQ4 z1O4ZhllH8;SFrpEf2FHiz16(^OMF_Hdz?MB1(%zD{gyNP@gno@YV`*vPWaogB0blS z$!@=`yHd5%Ocuw${d4|En*N>bu9&*kDtK>TeQ^5a?>?tCeO-1vbEl$_;2ai9;nXDS zoR!;JY**@SJW#cuu3Lsz@Lc86%-CbB2g{yL+obj1DH3!`38u<7Y53BN&^$J5o% JWt~$(695U_N@oB7 literal 0 HcmV?d00001 diff --git a/Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar@2x.png b/Evergreen/Assets.xcassets/timelineStar.imageset/timelineStar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd2acdf11b004b9e6245d84509755b8ae1003cd GIT binary patch literal 1303 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@Af^h!jGjR% z9~c;zj50$aN+NuHtdjF{^%7I^lT!66atnZ}85nFTtboki)RIJnirk#MVyg;UC9n!B zAR8pCucQE0Qj%?}6yY17;GAESs$i;TqGzCF$EBd4U{jQmW)z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLnOgw2D6bgmE1>`MD-sLz4fPE4v1uyFOhY&iMHfg0q7CdT zh-Egwps{i;N=+=uFAB-e&#`k%&M(SSC`&CW2D#8g&s5LCMju@f!m&0WQ>~oya|?=6 zi$PlKOl|Zr#L(482Bj9~=ahm1!Oqac1gZmB6kSIIRvpNqP#re z#|88aEIrt9ajde}1g0K;PZ!4!58l0D=e(=8=7qMuCR%X|j&?BqP z%Iw*<;OfhAizBSMLdzcTY&g^^cGdMy*&9yNoJCS?mYxS^x-HZG@T*NI)Rt}O>K$CI z&%Zpi{kPZP>V>9_GP_@?T=>s4(e1O%0>95aU$XBkE1G`naJ6AmX!2C&JAus=GV;s^ zcLg2~W}CZ_sa*M-a7qksqGQ*Q;|^EWUt#AkbH0}HW`b(DTb8MVhVW(QU!wdh8p7{p z9G{yP6p?n$*R-ok`U&eKg}+SdH;+YkEx)rwq_$CE`W1zEO{|~boyDYo*CP5le_`*%evYasWk21l7OHJbIj*99>a#aP#rY5BZ?@E13uvY# my?T-EclAl$6@lyjE?eDcc;;o=bm|kR`0;f0b6Mw<&;$T=^X)PK literal 0 HcmV?d00001 diff --git a/Evergreen/MainWindow/Timeline/Cell/TimelineCellData.swift b/Evergreen/MainWindow/Timeline/Cell/TimelineCellData.swift index 314a52d4f..f7e6ff5e2 100644 --- a/Evergreen/MainWindow/Timeline/Cell/TimelineCellData.swift +++ b/Evergreen/MainWindow/Timeline/Cell/TimelineCellData.swift @@ -27,6 +27,7 @@ struct TimelineCellData { let showAvatar: Bool // Make space even when avatar is nil let featuredImage: NSImage? // image from within the article let read: Bool + let starred: Bool init(article: Article, appearance: TimelineCellAppearance, showFeedName: Bool, feedName: String?, avatar: NSImage?, showAvatar: Bool, featuredImage: NSImage?) { @@ -72,6 +73,7 @@ struct TimelineCellData { self.featuredImage = featuredImage self.read = article.status.read + self.starred = article.status.starred } init() { //Empty @@ -88,6 +90,7 @@ struct TimelineCellData { self.avatar = nil self.featuredImage = nil self.read = true + self.starred = false } static func emptyCache() { diff --git a/Evergreen/MainWindow/Timeline/Cell/TimelineCellLayout.swift b/Evergreen/MainWindow/Timeline/Cell/TimelineCellLayout.swift index 9f08dba9d..daed6895b 100644 --- a/Evergreen/MainWindow/Timeline/Cell/TimelineCellLayout.swift +++ b/Evergreen/MainWindow/Timeline/Cell/TimelineCellLayout.swift @@ -126,7 +126,7 @@ private func rectForStar(_ cellData: TimelineCellData, _ appearance: TimelineCel r.size.width = appearance.starDimension r.size.height = appearance.starDimension r.origin.x = floor(unreadIndicatorRect.origin.x - ((appearance.starDimension - appearance.unreadCircleDimension) / 2.0)) - r.origin.y = unreadIndicatorRect.origin.y + r.origin.y = unreadIndicatorRect.origin.y - 3.0 return r } diff --git a/Evergreen/MainWindow/Timeline/Cell/TimelineTableCellView.swift b/Evergreen/MainWindow/Timeline/Cell/TimelineTableCellView.swift index 23500c854..f200b1cb3 100644 --- a/Evergreen/MainWindow/Timeline/Cell/TimelineTableCellView.swift +++ b/Evergreen/MainWindow/Timeline/Cell/TimelineTableCellView.swift @@ -8,6 +8,7 @@ import Foundation import RSTextDrawing +import DB5 class TimelineTableCellView: NSTableCellView { @@ -25,13 +26,14 @@ class TimelineTableCellView: NSTableCellView { return imageView }() -// let faviconImageView: NSImageView = { -// let imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 16, height: 16)) -// imageView.imageScaling = .scaleProportionallyDown -// imageView.animates = false -// imageView.imageAlignment = .alignCenter -// return imageView -// }() + let starView: NSImageView = { + let imageView = NSImageView(frame: NSRect.zero) + imageView.imageScaling = .scaleNone + imageView.animates = false + imageView.imageAlignment = .alignCenter + imageView.image = AppImages.timelineStar + return imageView + }() var cellAppearance: TimelineCellAppearance! { didSet { @@ -91,7 +93,7 @@ class TimelineTableCellView: NSTableCellView { addSubviewAtInit(dateView, hidden: false) addSubviewAtInit(feedNameView, hidden: true) addSubviewAtInit(avatarImageView, hidden: false) -// addSubviewAtInit(faviconImageView, hidden: true) + addSubviewAtInit(starView, hidden: false) } override init(frame frameRect: NSRect) { @@ -140,6 +142,7 @@ class TimelineTableCellView: NSTableCellView { dateView.rs_setFrameIfNotEqual(layoutRects.dateRect) feedNameView.rs_setFrameIfNotEqual(layoutRects.feedNameRect) avatarImageView.rs_setFrameIfNotEqual(layoutRects.avatarImageRect) + starView.rs_setFrameIfNotEqual(layoutRects.starRect) // faviconImageView.rs_setFrameIfNotEqual(layoutRects.faviconRect) } @@ -186,12 +189,18 @@ class TimelineTableCellView: NSTableCellView { } private func updateUnreadIndicator() { - - if unreadIndicatorView.isHidden != cellData.read { - unreadIndicatorView.isHidden = cellData.read + + let shouldHide = cellData.read || cellData.starred + if unreadIndicatorView.isHidden != shouldHide { + unreadIndicatorView.isHidden = shouldHide } } + private func updateStarView() { + + starView.isHidden = !cellData.starred + } + private func updateAvatar() { if !cellData.showAvatar { @@ -240,6 +249,7 @@ class TimelineTableCellView: NSTableCellView { updateDateView() updateFeedNameView() updateUnreadIndicator() + updateStarView() updateAvatar() // updateFavicon() } @@ -256,3 +266,4 @@ class TimelineTableCellView: NSTableCellView { } } } + diff --git a/Evergreen/Resources/DB5.plist b/Evergreen/Resources/DB5.plist index 196dc661c..6188f6b17 100644 --- a/Evergreen/Resources/DB5.plist +++ b/Evergreen/Resources/DB5.plist @@ -114,7 +114,7 @@ avatarCornerRadius 7 starDimension - 19 + 13 Detail