1/******************************************************************************
2 * Copyright (c) 2007-2012 Transmission authors and contributors
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 *****************************************************************************/
22
23#import "ProgressGradients.h"
24#import "NSApplicationAdditions.h"
25
26@implementation ProgressGradients (Private)
27
28+ (NSGradient *) progressGradientForRed: (CGFloat) redComponent green: (CGFloat) greenComponent blue: (CGFloat) blueComponent
29{
30    const CGFloat alpha = [[NSUserDefaults standardUserDefaults] boolForKey: @"SmallView"] ? 0.27 : 1.0;
31
32    NSColor * baseColor = [NSColor colorWithCalibratedRed: redComponent green: greenComponent blue: blueComponent alpha: alpha];
33
34    NSColor * color2 = [NSColor colorWithCalibratedRed: redComponent * 0.95 green: greenComponent * 0.95 blue: blueComponent * 0.95
35                        alpha: alpha];
36
37    NSColor * color3 = [NSColor colorWithCalibratedRed: redComponent * 0.85 green: greenComponent * 0.85 blue: blueComponent * 0.85
38                        alpha: alpha];
39
40    return [[NSGradient alloc] initWithColorsAndLocations: baseColor, 0.0, color2, 0.5, color3, 0.5, baseColor, 1.0, nil];
41}
42
43@end
44
45@implementation ProgressGradients
46
47+ (NSGradient *) progressWhiteGradient
48{
49    if ([NSApp isDarkMode]) {
50        return [[self class] progressGradientForRed: 0.1 green: 0.1 blue: 0.1];
51    } else {
52        return [[self class] progressGradientForRed: 0.95 green: 0.95 blue: 0.95];
53    }
54}
55
56+ (NSGradient *) progressGrayGradient
57{
58    if ([NSApp isDarkMode]) {
59        return [[self class] progressGradientForRed: 0.35 green: 0.35 blue: 0.35];
60    } else {
61        return [[self class] progressGradientForRed: 0.7 green: 0.7 blue: 0.7];
62    }
63}
64
65+ (NSGradient *) progressLightGrayGradient
66{
67    if ([NSApp isDarkMode]) {
68        return [[self class] progressGradientForRed: 0.2 green: 0.2 blue: 0.2];
69    } else {
70        return [[self class] progressGradientForRed: 0.87 green: 0.87 blue: 0.87];
71    }
72}
73
74+ (NSGradient *) progressBlueGradient
75{
76    if ([NSApp isDarkMode]) {
77        return [[self class] progressGradientForRed: 0.35 * 2.0/3.0 green: 0.67 * 2.0/3.0 blue: 0.98 * 2.0/3.0];
78    } else {
79        return [[self class] progressGradientForRed: 0.35 green: 0.67 blue: 0.98];
80    }
81}
82
83+ (NSGradient *) progressDarkBlueGradient
84{
85    if ([NSApp isDarkMode]) {
86        return [[self class] progressGradientForRed: 0.616 * 2.0/3.0 green: 0.722 * 2.0/3.0 blue: 0.776 * 2.0/3.0];
87    } else {
88        return [[self class] progressGradientForRed: 0.616 green: 0.722 blue: 0.776];
89    }
90}
91
92+ (NSGradient *) progressGreenGradient
93{
94    if ([NSApp isDarkMode]) {
95        return [[self class] progressGradientForRed: 0.44 * 2.0/3.0 green: 0.89 * 2.0/3.0 blue: 0.40 * 2.0/3.0];
96    } else {
97        return [[self class] progressGradientForRed: 0.44 green: 0.89 blue: 0.40];
98    }
99}
100
101+ (NSGradient *) progressLightGreenGradient
102{
103    if ([NSApp isDarkMode]) {
104        return [[self class] progressGradientForRed: 0.62 * 3.0/4.0 green: 0.99 * 3.0/4.0 blue: 0.58 * 3.0/4.0];
105    } else {
106        return [[self class] progressGradientForRed: 0.62 green: 0.99 blue: 0.58];
107    }
108}
109
110+ (NSGradient *) progressDarkGreenGradient
111{
112    if ([NSApp isDarkMode]) {
113        return [[self class] progressGradientForRed: 0.627 * 2.0/3.0 green: 0.714 * 2.0/3.0 blue: 0.639 * 2.0/3.0];
114    } else {
115        return [[self class] progressGradientForRed: 0.627 green: 0.714 blue: 0.639];
116    }
117}
118
119+ (NSGradient *) progressRedGradient
120{
121    if ([NSApp isDarkMode]) {
122        return [[self class] progressGradientForRed: 0.902 * 2.0/3.0 green: 0.439 * 2.0/3.0 blue: 0.451 * 2.0/3.0];
123    } else {
124        return [[self class] progressGradientForRed: 0.902 green: 0.439 blue: 0.451];
125    }
126}
127
128+ (NSGradient *) progressYellowGradient
129{
130    if ([NSApp isDarkMode]) {
131        return [[self class] progressGradientForRed: 0.933 * 0.8 green: 0.890 * 0.8 blue: 0.243 * 0.8];
132    } else {
133        return [[self class] progressGradientForRed: 0.933 green: 0.890 blue: 0.243];
134    }
135}
136
137@end
138