File indexing completed on 2024-09-07 04:36:20
0001 #include "Fireworks/Core/src/fwPaletteExtra.h"
0002
0003 #include "TROOT.h"
0004 #include "TColor.h"
0005 #include "TMath.h"
0006
0007 namespace fireworks {
0008
0009
0010
0011 struct PaletteExtraTopBottomIndices {
0012 float (*colVals)[3];
0013 bool whiteBg;
0014 FWColorManager::EPalette id;
0015 PaletteExtraTopBottomIndices(float (*iColors)[3], bool iIsWhiteBg, FWColorManager::EPalette iId)
0016 : colVals(iColors), whiteBg(iIsWhiteBg), id(iId) {}
0017
0018 void set(int i, Color_t cidx) {
0019 if (whiteBg) {
0020
0021 const TColor* c = gROOT->GetColor(cidx);
0022 colVals[i][0] = c->GetRed();
0023 colVals[i][1] = c->GetGreen();
0024 colVals[i][2] = c->GetBlue();
0025 if (id != FWColorManager::kPurple)
0026 TColor::HLStoRGB(
0027 c->GetHue(), 1.2 * c->GetLight(), c->GetSaturation(), colVals[i][0], colVals[i][1], colVals[i][2]);
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 } else {
0039 const TColor* c = gROOT->GetColor(cidx);
0040 colVals[i][0] = c->GetRed();
0041 colVals[i][1] = c->GetGreen();
0042 colVals[i][2] = c->GetBlue();
0043
0044
0045
0046
0047
0048
0049
0050 }
0051 }
0052
0053
0054
0055 void InitArctic() {
0056
0057 set(0, kYellow + 2);
0058 set(1, kMagenta - 3);
0059 set(2, kCyan + 3);
0060 set(3, kAzure + 7);
0061 set(4, kAzure + 8);
0062
0063 set(5, kAzure + 3);
0064 set(6, kAzure - 3);
0065 set(7, kOrange + 7);
0066 set(8, kAzure);
0067 set(9, kBlue - 1);
0068 set(10, kBlue - 7);
0069 set(11, kTeal - 1);
0070 set(12, kTeal - 7);
0071 set(13, kCyan - 7);
0072 set(14, kAzure + 10);
0073
0074 }
0075
0076
0077
0078 void InitFall() {
0079 set(0, kYellow - 4);
0080 set(1, kRed + 1);
0081 set(2, kMagenta + 3);
0082 set(3, kGreen + 2);
0083 set(4, kBlue + 2);
0084 set(5, kOrange - 5);
0085 set(6, kOrange - 8);
0086 set(7, kMagenta - 1);
0087 set(8, kRed - 2);
0088 set(9, kCyan + 2);
0089
0090 int j = 2;
0091 for (int i = 10; i < 15; ++i) {
0092 set(i, kRed - j);
0093 j++;
0094 }
0095 }
0096
0097 void InitSpring() {
0098 set(0, kRed);
0099 set(1, kOrange - 2);
0100 set(2, kRed - 7);
0101 set(3, kPink + 2);
0102 set(4, kOrange - 7);
0103 set(5, kSpring + 5);
0104
0105 set(6, kSpring);
0106 set(7, kMagenta);
0107 set(8, kSpring + 4);
0108 set(9, kGreen + 2);
0109 set(10, kSpring + 3);
0110 set(11, kGreen - 5);
0111 set(12, kGreen - 6);
0112 set(13, kGreen - 7);
0113 set(14, kTeal - 5);
0114 }
0115
0116 void InitPurple() {
0117 set(0, kGreen - 7);
0118 set(1, kRed + 1);
0119 set(2, kMagenta + 3);
0120 set(3, kCyan + 2);
0121 set(4, kBlue + 2);
0122 set(5, kViolet - 5);
0123 set(6, kViolet - 6);
0124 set(7, kViolet - 7);
0125 set(8, kGray + 1);
0126 set(9, kPink - 8);
0127 set(10, kBlue - 8);
0128 set(11, kBlue - 4);
0129 set(12, kBlue - 2);
0130 set(13, kViolet + 8);
0131 set(14, kViolet + 10);
0132 }
0133 };
0134
0135 void GetColorValuesForPaletteExtra(float (*iColors)[3],
0136 unsigned int iSize,
0137 FWColorManager::EPalette id,
0138 bool isWhiteBg) {
0139 PaletteExtraTopBottomIndices p(iColors, isWhiteBg, id);
0140 switch (id) {
0141 case FWColorManager::kArctic:
0142 p.InitArctic();
0143 break;
0144 case FWColorManager::kFall:
0145 p.InitFall();
0146 break;
0147 case FWColorManager::kSpring:
0148 p.InitSpring();
0149 break;
0150
0151 case FWColorManager::kPurple:
0152 p.InitPurple();
0153 break;
0154 default:
0155 break;
0156 }
0157
0158 iSize = iSize / 2;
0159 unsigned int lastIdx = iSize - 2;
0160 if (isWhiteBg) {
0161 for (unsigned int i = 0; i < lastIdx; ++i) {
0162 float s = 1.2;
0163 float r = TMath::Min(1.f, s * iColors[i][0]);
0164 float g = TMath::Min(1.f, s * iColors[i][1]);
0165 float b = TMath::Min(1.f, s * iColors[i][2]);
0166
0167 iColors[i][0] = r;
0168 iColors[i][1] = g;
0169 iColors[i][2] = b;
0170
0171 float value = 1.7;
0172 r = TMath::Power(r, (2.5 - value) / 2.5);
0173 g = TMath::Power(g, (2.5 - value) / 2.5);
0174 b = TMath::Power(b, (2.5 - value) / 2.5);
0175
0176
0177
0178
0179
0180
0181
0182 r = TMath::Min(1.f, r);
0183 g = TMath::Min(1.f, g);
0184 b = TMath::Min(1.f, b);
0185
0186 iColors[i + iSize][0] = r;
0187 iColors[i + iSize][1] = g;
0188 iColors[i + iSize][2] = b;
0189 }
0190 } else {
0191 for (unsigned int i = 0; i < lastIdx; ++i) {
0192
0193 float s = 0.4;
0194 float r = s * iColors[i][0];
0195 float g = s * iColors[i][1];
0196 float b = s * iColors[i][2];
0197
0198
0199 float value = -0.5;
0200 r = TMath::Power(r, (2.5 - value) / 2.5);
0201 g = TMath::Power(g, (2.5 - value) / 2.5);
0202 b = TMath::Power(b, (2.5 - value) / 2.5);
0203
0204
0205
0206 iColors[i + iSize][0] = r;
0207 iColors[i + iSize][1] = g;
0208 iColors[i + iSize][2] = b;
0209 }
0210 }
0211 }
0212
0213 }