// // TitlebarView.swift // SBrowser // // Created by James Magahern on 7/29/20. // import UIKit import QuartzCore_Private class TitlebarView: UIView { private let titleLabelView = UILabel(frame: .zero) private let backgroundView = GradientView(direction: .horizontal, colors: [ UIColor(red: 0.101, green: 0.176, blue: 0.415, alpha: 1.0), UIColor(red: 0.153, green: 0.000, blue: 0.153, alpha: 1.0) ]) private let separatorView = UIView(frame: .zero) convenience init() { self.init(frame: .zero) addSubview(backgroundView) addSubview(titleLabelView) addSubview(separatorView) separatorView.backgroundColor = UIColor(white: 1.0, alpha: 0.20) separatorView.layer.compositingFilter = kCAFilterPlusL titleLabelView.textColor = .white titleLabelView.layer.shadowColor = UIColor.black.cgColor titleLabelView.layer.shadowRadius = 0.0 titleLabelView.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) titleLabelView.font = UIFont.boldSystemFont(ofSize: 12.0) backgroundView.alpha = 0.98 } func setTitle(_ title: String) { let titleAttributes: [NSAttributedString.Key : Any] = [ .font : UIFont.boldSystemFont(ofSize: 12.0), .foregroundColor : UIColor.white ] let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String let appNameAttributes: [NSAttributedString.Key : Any] = [ .font : UIFont.systemFont(ofSize: 12.0), .foregroundColor : UIColor(white: 1.0, alpha: 0.75) ] if title.count > 0 { let attributedString = NSMutableAttributedString(string: title, attributes: titleAttributes) let appAttributedString = NSAttributedString(string: " :: \(appName)", attributes: appNameAttributes) attributedString.append(appAttributedString) titleLabelView.attributedText = attributedString } else { titleLabelView.attributedText = NSAttributedString(string: appName, attributes: titleAttributes) } } func setColorTheme(_ colorTheme: [UIColor]) { backgroundView.colors = colorTheme } override func layoutSubviews() { super.layoutSubviews() backgroundView.frame = bounds titleLabelView.frame = bounds.avoiding(verticalInsets: safeAreaInsets).insetBy(dx: 8.0 + layoutMargins.left, dy: 0.0) let separatorHeight = 1.0 / UIScreen.main.scale separatorView.frame = CGRect(x: 0, y: bounds.height - separatorHeight, width: bounds.width, height: separatorHeight) } }