// // CPUView.swift // Stats // // Created by Serhiy Mytrovtsiy on 14.06.2019. // Copyright © 2019 Serhiy Mytrovtsiy. All rights reserved. // import Cocoa class ChartView: NSView { var valueLabel: NSTextField = NSTextField() var label: Bool = true var points: [Float] { didSet { self.needsDisplay = true setNeedsDisplay(self.frame) } } override init(frame: NSRect) { self.points = Array(repeating: 0.0, count: 50) super.init(frame: frame) self.wantsLayer = true if self.label { let valueLabel = NSTextField(frame: NSMakeRect(2, MODULE_HEIGHT - 11, self.frame.size.width, 10)) valueLabel.textColor = NSColor.red valueLabel.isEditable = false valueLabel.isSelectable = false valueLabel.isBezeled = false valueLabel.wantsLayer = true valueLabel.textColor = .labelColor valueLabel.backgroundColor = .controlColor valueLabel.canDrawSubviewsIntoLayer = true valueLabel.alignment = .natural valueLabel.font = NSFont.systemFont(ofSize: 8, weight: .ultraLight) valueLabel.stringValue = "" valueLabel.addSubview(NSView()) self.valueLabel = valueLabel self.addSubview(self.valueLabel) } else { self.addSubview(NSView()) } } required init?(coder decoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) let lineColor: NSColor = NSColor.selectedMenuItemColor let gradientColor: NSColor = NSColor(red: (26/255.0), green: (126/255.0), blue: (252/255.0), alpha: 0.5) let context = NSGraphicsContext.current!.cgContext let xOffset: CGFloat = 4.0 let yOffset: CGFloat = 3.0 var height: CGFloat = self.frame.size.height - CGFloat((yOffset * 2)) if self.label { height = 7.0 } let xRatio = Double(self.frame.size.width - (xOffset * 2)) / (Double(self.points.count) - 1) let columnXPoint = { (point: Int) -> CGFloat in return CGFloat((Double(point) * xRatio)) + xOffset } let columnYPoint = { (point: Int) -> CGFloat in return CGFloat((CGFloat(truncating: self.points[point] as NSNumber) * height)) + yOffset } let graphPath = NSBezierPath() let x: CGFloat = columnXPoint(0) let y: CGFloat = columnYPoint(0) graphPath.move(to: CGPoint(x: x, y: y)) for i in 1..