// // KMCheckInViewItem.swift // PDF Reader Pro // // Created by User-Tangchao on 2024/12/24. // import Cocoa @objcMembers class KMGradientView: NSView { var colors: [NSColor] = [] { didSet { needsDisplay = true } } var xRadius: CGFloat = 0 { didSet { needsDisplay = true } } var yRadius: CGFloat = 0 { didSet { needsDisplay = true } } var angle: CGFloat = 0 { didSet { needsDisplay = true } } var contentInset: NSEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: 0) { didSet { needsDisplay = true } } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) wantsLayer = true let gradient = NSGradient(colors: colors) let x = contentInset.left let y = contentInset.top let w = max(NSWidth(self.bounds)-x-contentInset.right, 0) let h = max(NSHeight(self.bounds)-y-contentInset.bottom, 0) let frame = NSMakeRect(x, y, w, h) let path = NSBezierPath(roundedRect: frame, xRadius: xRadius, yRadius: yRadius) gradient?.draw(in: path, angle: angle) } } class KMCheckInGiftItemView: KMCheckInItemView { private lazy var numLabel_: NSTextField = { let view = NSTextField(labelWithString: "") return view }() private lazy var creditsLabel_: NSTextField = { let view = NSTextField(labelWithString: "") return view }() private lazy var giftIv_: NSImageView = { let view = NSImageView() return view }() private lazy var gradientV_: KMGradientView = { let view = KMGradientView() return view }() var numLabel: NSTextField { get { return numLabel_ } } var creditsLabel: NSTextField { get { return creditsLabel_ } } var giftIv: NSImageView { get { return giftIv_ } } var gradientView: KMGradientView { get { return gradientV_ } } override func initSubviews() { super.initSubviews() checkIv.isHidden = true backgroundView.addSubview(gradientV_) gradientV_.frame = backgroundView.bounds gradientV_.autoresizingMask = [.width, .height] contentBox.contentView?.addSubview(numLabel_) contentBox.contentView?.addSubview(creditsLabel_) contentBox.contentView?.addSubview(giftIv) numLabel_.mas_makeConstraints { make in make?.top.mas_equalTo()(15) make?.centerX.mas_equalTo()(0) } creditsLabel_.mas_makeConstraints { make in make?.top.equalTo()(numLabel_.mas_bottom) make?.centerX.mas_equalTo()(0) } giftIv.mas_makeConstraints { make in make?.centerX.mas_equalTo()(0) make?.top.mas_equalTo()(53) make?.size.mas_equalTo()(NSMakeSize(24, 24)) } } } class KMCheckInItemView: NSView { private lazy var contentBox_: NSBox = { let view = NSBox() view.boxType = .custom view.borderWidth = 0 view.contentViewMargins = .init(width: 0, height: 0) view.titlePosition = .noTitle return view }() private lazy var backgroundView_: NSView = { let view = NSView() return view }() private lazy var iv_: NSImageView = { let view = NSImageView() return view }() private lazy var nameLabel_: NSTextField = { let view = NSTextField(labelWithString: "") return view }() var contentBox: NSBox { get { return contentBox_ } } var backgroundView: NSView { get { return backgroundView_ } } var checkIv: NSImageView { get { return iv_ } } var nameLabel: NSTextField { get { return nameLabel_ } } convenience init() { self.init(frame: .init(x: 0, y: 0, width: 200, height: 30)) initSubviews() } override func awakeFromNib() { super.awakeFromNib() initSubviews() } func initSubviews() { addSubview(contentBox_) contentBox_.contentView?.addSubview(backgroundView_) contentBox_.contentView?.addSubview(iv_) contentBox_.contentView?.addSubview(nameLabel_) contentBox_.mas_makeConstraints { make in make?.edges.mas_equalTo()(0) } backgroundView_.mas_makeConstraints { make in make?.leading.mas_equalTo()(6) make?.trailing.mas_equalTo()(-6) make?.top.mas_equalTo()(5) make?.height.mas_equalTo()(83) } iv_.mas_makeConstraints { make in make?.center.equalTo()(backgroundView_) } nameLabel_.mas_makeConstraints { make in make?.centerX.mas_equalTo()(0) make?.bottom.mas_equalTo()(-5) } } } class KMCheckInViewItem: NSCollectionViewItem { private lazy var contentBox_: NSBox = { let view = NSBox() view.boxType = .custom view.borderWidth = 0 view.contentViewMargins = .init(width: 0, height: 0) view.titlePosition = .noTitle return view }() var contentBox: NSBox { get { return contentBox_ } } override func viewDidLoad() { super.viewDidLoad() view.addSubview(contentBox_) contentBox_.frame = view.bounds contentBox_.autoresizingMask = [.width, .height] } }