60 lines
1.8 KiB
Swift
60 lines
1.8 KiB
Swift
//
|
|
// SidebarLayout.swift
|
|
// NetNewsWire
|
|
//
|
|
// Created by Brent Simmons on 11/24/17.
|
|
// Copyright © 2017 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
import AppKit
|
|
import RSCore
|
|
|
|
// image - title - unreadCount
|
|
|
|
struct SidebarCellLayout {
|
|
|
|
let faviconRect: CGRect
|
|
let titleRect: CGRect
|
|
let unreadCountRect: CGRect
|
|
|
|
init(appearance: SidebarCellAppearance, cellSize: NSSize, shouldShowImage: Bool, textField: NSTextField, unreadCountView: UnreadCountView) {
|
|
|
|
let bounds = NSRect(x: 0.0, y: 0.0, width: floor(cellSize.width), height: floor(cellSize.height))
|
|
|
|
var rFavicon = NSRect.zero
|
|
if shouldShowImage {
|
|
rFavicon = NSRect(x: 0.0, y: 0.0, width: appearance.imageSize.width, height: appearance.imageSize.height)
|
|
rFavicon = rFavicon.centeredVertically(in: bounds)
|
|
}
|
|
self.faviconRect = rFavicon
|
|
|
|
let textFieldSize = SingleLineTextFieldSizer.size(for: textField.stringValue, font: textField.font!)
|
|
|
|
var rTextField = NSRect(x: 0.0, y: 0.0, width: textFieldSize.width, height: textFieldSize.height)
|
|
if shouldShowImage {
|
|
rTextField.origin.x = NSMaxX(rFavicon) + appearance.imageMarginRight
|
|
}
|
|
rTextField = rTextField.centeredVertically(in: bounds)
|
|
|
|
let unreadCountSize = unreadCountView.intrinsicContentSize
|
|
let unreadCountIsHidden = unreadCountView.unreadCount < 1
|
|
|
|
var rUnread = NSRect.zero
|
|
if !unreadCountIsHidden {
|
|
rUnread.size = unreadCountSize
|
|
rUnread.origin.x = NSMaxX(bounds) - unreadCountSize.width
|
|
rUnread = rUnread.centeredVertically(in: bounds)
|
|
let textFieldMaxX = NSMinX(rUnread) - appearance.unreadCountMarginLeft
|
|
if NSMaxX(rTextField) > textFieldMaxX {
|
|
rTextField.size.width = textFieldMaxX - NSMinX(rTextField)
|
|
}
|
|
}
|
|
self.unreadCountRect = rUnread
|
|
|
|
if NSMaxX(rTextField) > NSMaxX(bounds) {
|
|
rTextField.size.width = NSMaxX(bounds) - NSMinX(rTextField)
|
|
}
|
|
self.titleRect = rTextField
|
|
}
|
|
}
|