Mercurial > hg > svgui
comparison layer/ColourMapper.cpp @ 1015:352fa17af9f0 colourschemes
Rearrange colours, make some of them more attractive, give some of them nicer names
author | Chris Cannam |
---|---|
date | Tue, 19 Jan 2016 16:30:33 +0000 |
parents | 6338d7dc3b6d |
children | 6a8084c72e7a |
comparison
equal
deleted
inserted
replaced
1014:6338d7dc3b6d | 1015:352fa17af9f0 |
---|---|
32 reverse(converted.begin(), converted.end()); | 32 reverse(converted.begin(), converted.end()); |
33 return converted; | 33 return converted; |
34 } | 34 } |
35 | 35 |
36 static vector<QColor> xRay = convertStrings({ | 36 static vector<QColor> xRay = convertStrings({ |
37 // Based on ColorBrewer ylGnBu scale | 37 // Based on ColorBrewer ylGnBu |
38 "#ffffff", "#ffff00", "#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081","#042040" | 38 "#ffffff", "#ffff00", "#f7fcf0", "#e0f3db", "#ccebc5", "#a8ddb5", |
39 "#7bccc4", "#4eb3d3", "#2b8cbe", "#0868ac", "#084081", "#042040" | |
39 }); | 40 }); |
40 | 41 |
42 static vector<QColor> cherryPie = convertStrings({ | |
43 "#f7f7f7", | |
44 "#fddbc7", | |
45 "#f4a582", | |
46 "#d6604d", | |
47 "#b2182b", | |
48 "#dd3497", | |
49 "#ae017e", | |
50 "#7a0177", | |
51 "#49006a" | |
52 // "#d1e5f0", | |
53 // "#92c5de", | |
54 // "#4393c3", | |
55 // "#2166ac", | |
56 | |
57 }); | |
58 | |
41 static void | 59 static void |
42 mapDiscrete(double norm, vector<QColor> &colours, double &r, double &g, double &b) | 60 mapDiscrete(double norm, vector<QColor> &colours, double &r, double &g, double &b) |
43 { | 61 { |
44 int n = colours.size(); | 62 int n = int(colours.size()); |
45 double m = norm * (n-1); | 63 double m = norm * (n-1); |
46 if (m >= n-1) { colours[n-1].getRgbF(&r, &g, &b, 0); return; } | 64 if (m >= n-1) { colours[n-1].getRgbF(&r, &g, &b, 0); return; } |
47 if (m <= 0) { colours[0].getRgbF(&r, &g, &b, 0); return; } | 65 if (m <= 0) { colours[0].getRgbF(&r, &g, &b, 0); return; } |
48 int base(int(floor(m))); | 66 int base(int(floor(m))); |
49 double prop0 = (base + 1.0) - m, prop1 = m - base; | 67 double prop0 = (base + 1.0) - m, prop1 = m - base; |
71 } | 89 } |
72 | 90 |
73 int | 91 int |
74 ColourMapper::getColourMapCount() | 92 ColourMapper::getColourMapCount() |
75 { | 93 { |
76 return 13; | 94 return 12; |
77 } | 95 } |
78 | 96 |
79 QString | 97 QString |
80 ColourMapper::getColourMapName(int n) | 98 ColourMapper::getColourMapName(int n) |
81 { | 99 { |
82 if (n >= getColourMapCount()) return tr("<unknown>"); | 100 if (n >= getColourMapCount()) return tr("<unknown>"); |
83 StandardMap map = (StandardMap)n; | 101 StandardMap map = (StandardMap)n; |
84 | 102 |
85 switch (map) { | 103 switch (map) { |
86 case DefaultColours: return tr("Default"); | 104 case DefaultColours: return tr("Green"); |
87 case WhiteOnBlack: return tr("White on Black"); | 105 case WhiteOnBlack: return tr("White on Black"); |
88 case BlackOnWhite: return tr("Black on White"); | 106 case BlackOnWhite: return tr("Black on White"); |
89 case RedOnBlue: return tr("Red on Blue"); | 107 case CherryPie: return tr("Cherry"); |
90 case YellowOnBlack: return tr("Yellow on Black"); | 108 case YellowOnBlack: return tr("Wasp"); |
91 case BlueOnBlack: return tr("Blue on Black"); | 109 case XRay: return tr("X-Ray"); |
92 case Sunset: return tr("Sunset"); | 110 case Sunset: return tr("Sunset"); |
93 case FruitSalad: return tr("Fruit Salad"); | 111 case FruitSalad: return tr("Fruit Salad"); |
94 case Banded: return tr("Banded"); | 112 case Banded: return tr("Banded"); |
95 case Highlight: return tr("Highlight"); | 113 case Highlight: return tr("Highlight"); |
96 case Printer: return tr("Printer"); | 114 case Printer: return tr("Printer"); |
97 case HighGain: return tr("High Gain"); | 115 case HighGain: return tr("High Gain"); |
98 case XRay: return tr("X-Ray"); | |
99 } | 116 } |
100 | 117 |
101 return tr("<unknown>"); | 118 return tr("<unknown>"); |
102 } | 119 } |
103 | 120 |
132 case BlackOnWhite: | 149 case BlackOnWhite: |
133 r = g = b = 1.0 - norm; | 150 r = g = b = 1.0 - norm; |
134 hsv = false; | 151 hsv = false; |
135 break; | 152 break; |
136 | 153 |
137 case RedOnBlue: | 154 case CherryPie: |
138 h = blue - pieslice/4.0 + norm * (pieslice + pieslice/4.0); | 155 hsv = false; |
139 s = 1.0; | 156 mapDiscrete(norm, cherryPie, r, g, b); |
140 v = norm; | |
141 break; | 157 break; |
142 | 158 |
143 case YellowOnBlack: | 159 case YellowOnBlack: |
144 h = 0.15; | 160 h = 0.15; |
145 s = 1.0; | 161 s = 1.0; |
146 v = norm; | 162 v = norm; |
147 break; | |
148 | |
149 case BlueOnBlack: | |
150 h = blue; | |
151 s = 1.0; | |
152 v = norm * 2.0; | |
153 if (v > 1.0) { | |
154 v = 1.0; | |
155 s = 1.0 - (sqrt(norm) - 0.707) * 3.413; | |
156 if (s < 0.0) s = 0.0; | |
157 if (s > 1.0) s = 1.0; | |
158 } | |
159 break; | 163 break; |
160 | 164 |
161 case Sunset: | 165 case Sunset: |
162 r = (norm - 0.24) * 2.38; | 166 r = (norm - 0.24) * 2.38; |
163 if (r > 1.0) r = 1.0; | 167 if (r > 1.0) r = 1.0; |
268 return Qt::red; | 272 return Qt::red; |
269 | 273 |
270 case BlackOnWhite: | 274 case BlackOnWhite: |
271 return Qt::darkGreen; | 275 return Qt::darkGreen; |
272 | 276 |
273 case RedOnBlue: | 277 case CherryPie: |
274 return Qt::green; | 278 return Qt::green; |
275 | 279 |
276 case YellowOnBlack: | 280 case YellowOnBlack: |
277 return QColor::fromHsv(240, 255, 255); | 281 return QColor::fromHsv(240, 255, 255); |
278 | 282 |
279 case BlueOnBlack: | 283 case XRay: |
280 return Qt::red; | 284 return Qt::red; |
281 | 285 |
282 case Sunset: | 286 case Sunset: |
283 return Qt::white; | 287 return Qt::white; |
284 | 288 |
315 return true; | 319 return true; |
316 | 320 |
317 case DefaultColours: | 321 case DefaultColours: |
318 case Sunset: | 322 case Sunset: |
319 case WhiteOnBlack: | 323 case WhiteOnBlack: |
320 case RedOnBlue: | 324 case CherryPie: |
321 case YellowOnBlack: | 325 case YellowOnBlack: |
322 case BlueOnBlack: | 326 case XRay: |
323 case FruitSalad: | 327 case FruitSalad: |
324 case Banded: | 328 case Banded: |
325 case Highlight: | 329 case Highlight: |
326 | 330 |
327 default: | 331 default: |