             return ChartTheme.screenParams
         case .presentation:
             return ChartTheme.presentationParams
-        case .print:
-            return ChartTheme.printParams
+        case .colorPrint:
+            return ChartTheme.colorPrintParams
+        case .monoPrint:
+            return ChartTheme.monoPrintParams
         }
     }
 }


        let bottomRect = bounds.divided(
            atDistance: showTitle
                ? 1.2 * (params.titleFont.boundingRectForFont.height + params.titleFont.leading)
                : params.axisLabelFont.boundingRectForFont.height,
            from: .maxYEdge).remainder

        let scaleWidth = 3 * params.axisLabelFont.maximumAdvancement.width
        self.chartRect = CGRect(x: bottomRect.minX + scaleWidth,
                                y: bottomRect.minY + params.axisLabelFont.boundingRectForFont.height,
                                width: bottomRect.width - 2 * scaleWidth,
                                height: bottomRect.height - params.axisLabelFont.boundingRectForFont.height - params.axisLabelFont.leading)

        var chartTransform = AffineTransform()
        chartTransform.translate(x: chartRect.minX, y: chartRect.minY)

            return nil
        case .presentation:
            return CGSize(width: 1280, height: 720)
        case .colorPrint, .monoPrint:
            return CGSize(width: 800, height: 260)
        }
    }

    #if OBJCIO
    private static let labelFontName = "Tiempos Text"
    private static let monoFontName = "Akkurat TT"
    #elseif LORENTEY
    private static let labelFontName = "Palatino"
    private static let monoFontName = "InputSansNarrow-Regular"
    #else
    private static let labelFontName = "Helvetica-Light"
    private static let monoFontName = "Menlo"
    #endif

    private static func colorLineParams(index: Int, count: Int, lineWidth: CGFloat, hairLine: Bool, shadowRadius: CGFloat = 0) -> [LineParams] {
        let color: NSColor
        if count > 6 {
            color = NSColor(calibratedHue: CGFloat(index) / CGFloat(count),
                            saturation: 1, brightness: 1, alpha: 1)
        }
        else {
            // Use stable colors when possible.
            // These particular ones are nice because people with most forms of color blindness can still
            // differentiate them.
            switch index {
            case 0: color = NSColor(calibratedRed: 0.89, green: 0.01, blue: 0.01, alpha: 1) // Red
            case 1: color = NSColor(calibratedRed: 1, green: 0.55, blue: 0, alpha: 1) // Orange
            case 2: color = NSColor(calibratedRed: 1, green: 0.93, blue: 0, alpha: 1) // Yellow
            case 3: color = NSColor(calibratedRed: 0, green: 0.5, blue: 0.15, alpha: 1) // Green
            case 4: color = NSColor(calibratedRed: 0, green: 0.3, blue: 1, alpha: 1) // Blue
            case 5: color = NSColor(calibratedRed: 0.46, green: 0.03, blue: 0.53, alpha: 1) // Purple
            default: fatalError()
            }
        }
        if hairLine {
            return [LineParams(lineWidth: lineWidth, color: color, shadowRadius: shadowRadius),
                    LineParams(lineWidth: 0.5, color: .black)]
        }
        else {
            return [LineParams(lineWidth: lineWidth, color: color, shadowRadius: shadowRadius)]
        }
    }

    private static func monoLineParams(index: Int, count: Int, lineWidth: CGFloat) -> [LineParams] {
        let dash: [CGFloat]
        switch index {
        case 0: dash = []
        case 1: dash = [6, 3]
        case 2: dash = [0, 3]
        default:
            dash = [6, 3] + [0, 3].repeated(index - 2)
        }
        return [LineParams(lineWidth: lineWidth, color: .black, dash: dash)]
    }

    static let screenParams = ChartParams(
        marginRatio: (0.05, 0.05),
        backgroundColor: NSColor.white,
        title: TextParams(font: NSFont(name: labelFontName, size: 24)!, color: NSColor.black),
        border: LineParams(lineWidth: 0.5, color: NSColor.black),
        highlightedBorder: LineParams(lineWidth: 4, color: NSColor.black),
        majorGridline: LineParams(lineWidth: 0.75, color: NSColor(white: 0.3, alpha: 1)),
        minorGridline: LineParams(lineWidth: 0.5, color: NSColor(white: 0.3, alpha: 1), dash: [6, 3]),
        axisLabel: TextParams(font: NSFont(name: labelFontName, size: 10)!, color: .black),
        legend: TextParams(font: NSFont(name: monoFontName, size: 12)!, color: .black),
        legendPadding: 6,
        legendSampleLine: false,
        lineParams: { i, c in colorLineParams(index: i, count: c, lineWidth: 4, hairLine: true) },
        xPadding: 6)

    private static let presentationParams = ChartParams(
        marginRatio: (0, 0),
        backgroundColor: NSColor.black,
        title: TextParams(font: NSFont(name: labelFontName, size: 48)!, color: NSColor.white),
        border: LineParams(lineWidth: 0.5, color: NSColor.white),
        highlightedBorder: LineParams(lineWidth: 4, color: NSColor.white),
        majorGridline: LineParams(lineWidth: 0.75, color: NSColor(white: 0.3, alpha: 1)),
        minorGridline: LineParams(lineWidth: 0.5, color: NSColor(white: 0.7, alpha: 1), dash: [6, 3]),
        axisLabel: TextParams(font: NSFont(name: labelFontName, size: 24)!, color: .white),
        legend: TextParams(font: NSFont(name: monoFontName, size: 20)!, color: .white),
        legendPadding: 8,
        legendSampleLine: false,
        lineParams: { i, c in colorLineParams(index: i, count: c, lineWidth: 8, hairLine: false, shadowRadius: 3) },
        xPadding: 12)

    private static let colorPrintParams = ChartParams(
        marginRatio: (0, 0),
        backgroundColor: NSColor.white,
        title: TextParams(font: NSFont(name: labelFontName, size: 12)!, color: .black),
        border: LineParams(lineWidth: 1, color: .black),
        highlightedBorder: LineParams(lineWidth: 4, color: .black),
        majorGridline: LineParams(lineWidth: 0.7, color: NSColor(white: 0.6, alpha: 1)),
        minorGridline: LineParams(lineWidth: 0.4, color: NSColor(white: 0.6, alpha: 1), dash: [2, 1]),
        axisLabel: TextParams(font: NSFont(name: labelFontName, size: 10)!, color: .black),
        legend: TextParams(font: NSFont(name: monoFontName, size: 10)!, color: .black),
        legendPadding: 6,
        legendSampleLine: false,
        lineParams: { i, c in colorLineParams(index: i, count: c, lineWidth: 4, hairLine: true) },
        xPadding: 6)

    private static let monoPrintParams = ChartParams(
        marginRatio: (0, 0),
        backgroundColor: NSColor.white,
        title: TextParams(font: NSFont(name: labelFontName, size: 12)!, color: .black),
        border: LineParams(lineWidth: 1, color: .black),
        highlightedBorder: LineParams(lineWidth: 4, color: .black),
        majorGridline: LineParams(lineWidth: 0.7, color: NSColor(white: 0.6, alpha: 1)),
        minorGridline: LineParams(lineWidth: 0.4, color: NSColor(white: 0.6, alpha: 1), dash: [2, 1]),
        axisLabel: TextParams(font: NSFont(name: labelFontName, size: 10)!, color: .black),
        legend: TextParams(font: NSFont(name: monoFontName, size: 10)!, color: .black),
        legendPadding: 6,
        legendSampleLine: true,
        lineParams: { i, c in monoLineParams(index: i, count: c, lineWidth: 2) },
        xPadding: 6)

    var params: ChartParams {
        switch self {
