comparison layer/ColourScale.cpp @ 1266:a34a2a25907c

Untabify
author Chris Cannam
date Thu, 01 Mar 2018 18:02:22 +0000
parents 6e724c81f18f
children d79e21855aef
comparison
equal deleted inserted replaced
1265:6e724c81f18f 1266:a34a2a25907c
30 m_mapper(m_params.colourMap, 1.f, double(m_maxPixel)) 30 m_mapper(m_params.colourMap, 1.f, double(m_maxPixel))
31 { 31 {
32 if (m_params.minValue >= m_params.maxValue) { 32 if (m_params.minValue >= m_params.maxValue) {
33 SVCERR << "ERROR: ColourScale::ColourScale: minValue = " 33 SVCERR << "ERROR: ColourScale::ColourScale: minValue = "
34 << m_params.minValue << ", maxValue = " << m_params.maxValue << endl; 34 << m_params.minValue << ", maxValue = " << m_params.maxValue << endl;
35 throw std::logic_error("maxValue must be greater than minValue"); 35 throw std::logic_error("maxValue must be greater than minValue");
36 } 36 }
37 37
38 m_mappedMin = m_params.minValue; 38 m_mappedMin = m_params.minValue;
39 m_mappedMax = m_params.maxValue; 39 m_mappedMax = m_params.maxValue;
40 40
60 double threshold = -10.0; 60 double threshold = -10.0;
61 LogRange::mapRange(m_mappedMin, m_mappedMax, threshold); 61 LogRange::mapRange(m_mappedMin, m_mappedMax, threshold);
62 if (m_mappedMin < m_mappedMax + threshold) { 62 if (m_mappedMin < m_mappedMax + threshold) {
63 m_mappedMin = m_mappedMax + threshold; 63 m_mappedMin = m_mappedMax + threshold;
64 } 64 }
65 65
66 } else if (m_params.scaleType == ColourScaleType::PlusMinusOne) { 66 } else if (m_params.scaleType == ColourScaleType::PlusMinusOne) {
67 67
68 m_mappedMin = -1.0; 68 m_mappedMin = -1.0;
69 m_mappedMax = 1.0; 69 m_mappedMax = 1.0;
70 70
71 } else if (m_params.scaleType == ColourScaleType::Absolute) { 71 } else if (m_params.scaleType == ColourScaleType::Absolute) {
72 72
73 m_mappedMin = fabs(m_mappedMin); 73 m_mappedMin = fabs(m_mappedMin);
74 m_mappedMax = fabs(m_mappedMax); 74 m_mappedMax = fabs(m_mappedMax);
75 if (m_mappedMin >= m_mappedMax) { 75 if (m_mappedMin >= m_mappedMax) {
76 std::swap(m_mappedMin, m_mappedMax); 76 std::swap(m_mappedMin, m_mappedMax);
77 } 77 }
78 } 78 }
79 79
80 if (m_mappedMin >= m_mappedMax) { 80 if (m_mappedMin >= m_mappedMax) {
81 SVCERR << "ERROR: ColourScale::ColourScale: minValue = " << m_params.minValue 81 SVCERR << "ERROR: ColourScale::ColourScale: minValue = " << m_params.minValue
82 << ", maxValue = " << m_params.maxValue 82 << ", maxValue = " << m_params.maxValue
83 << ", threshold = " << m_params.threshold 83 << ", threshold = " << m_params.threshold
84 << ", scale = " << int(m_params.scaleType) 84 << ", scale = " << int(m_params.scaleType)
85 << " resulting in mapped minValue = " << m_mappedMin 85 << " resulting in mapped minValue = " << m_mappedMin
86 << ", mapped maxValue = " << m_mappedMax << endl; 86 << ", mapped maxValue = " << m_mappedMax << endl;
87 throw std::logic_error("maxValue must be greater than minValue [after mapping]"); 87 throw std::logic_error("maxValue must be greater than minValue [after mapping]");
88 } 88 }
89 } 89 }
90 90
91 ColourScale::~ColourScale() 91 ColourScale::~ColourScale()
92 { 92 {
102 ColourScale::getPixel(double value) const 102 ColourScale::getPixel(double value) const
103 { 103 {
104 double maxPixF = m_maxPixel; 104 double maxPixF = m_maxPixel;
105 105
106 if (m_params.scaleType == ColourScaleType::Phase) { 106 if (m_params.scaleType == ColourScaleType::Phase) {
107 double half = (maxPixF - 1.f) / 2.f; 107 double half = (maxPixF - 1.f) / 2.f;
108 int pixel = 1 + int((value * half) / M_PI + half); 108 int pixel = 1 + int((value * half) / M_PI + half);
109 // SVCERR << "phase = " << value << " pixel = " << pixel << endl; 109 // SVCERR << "phase = " << value << " pixel = " << pixel << endl;
110 return pixel; 110 return pixel;
111 } 111 }
112 112
115 if (value < m_params.threshold) return 0; 115 if (value < m_params.threshold) return 0;
116 116
117 double mapped = value; 117 double mapped = value;
118 118
119 if (m_params.scaleType == ColourScaleType::Log) { 119 if (m_params.scaleType == ColourScaleType::Log) {
120 mapped = LogRange::map(value); 120 mapped = LogRange::map(value);
121 } else if (m_params.scaleType == ColourScaleType::PlusMinusOne) { 121 } else if (m_params.scaleType == ColourScaleType::PlusMinusOne) {
122 if (mapped < -1.f) mapped = -1.f; 122 if (mapped < -1.f) mapped = -1.f;
123 if (mapped > 1.f) mapped = 1.f; 123 if (mapped > 1.f) mapped = 1.f;
124 } else if (m_params.scaleType == ColourScaleType::Absolute) { 124 } else if (m_params.scaleType == ColourScaleType::Absolute) {
125 if (mapped < 0.f) mapped = -mapped; 125 if (mapped < 0.f) mapped = -mapped;
126 } 126 }
127 127
128 mapped *= m_params.multiple; 128 mapped *= m_params.multiple;
129 129
130 if (mapped < m_mappedMin) { 130 if (mapped < m_mappedMin) {
131 mapped = m_mappedMin; 131 mapped = m_mappedMin;
132 } 132 }
133 if (mapped > m_mappedMax) { 133 if (mapped > m_mappedMax) {
134 mapped = m_mappedMax; 134 mapped = m_mappedMax;
135 } 135 }
136 136
137 double proportion = (mapped - m_mappedMin) / (m_mappedMax - m_mappedMin); 137 double proportion = (mapped - m_mappedMin) / (m_mappedMax - m_mappedMin);
138 138
139 int pixel = 0; 139 int pixel = 0;
140 140
141 if (m_params.scaleType == ColourScaleType::Meter) { 141 if (m_params.scaleType == ColourScaleType::Meter) {
142 pixel = AudioLevel::multiplier_to_preview(proportion, m_maxPixel-1) + 1; 142 pixel = AudioLevel::multiplier_to_preview(proportion, m_maxPixel-1) + 1;
143 } else { 143 } else {
144 pixel = int(proportion * maxPixF) + 1; 144 pixel = int(proportion * maxPixF) + 1;
145 } 145 }
146 146
147 if (pixel < 0) { 147 if (pixel < 0) {
148 pixel = 0; 148 pixel = 0;
149 } 149 }
150 if (pixel > m_maxPixel) { 150 if (pixel > m_maxPixel) {
151 pixel = m_maxPixel; 151 pixel = m_maxPixel;
152 } 152 }
153 return pixel; 153 return pixel;
154 } 154 }
155 155
156 QColor 156 QColor
157 ColourScale::getColourForPixel(int pixel, int rotation) const 157 ColourScale::getColourForPixel(int pixel, int rotation) const
158 { 158 {
159 if (pixel < 0) { 159 if (pixel < 0) {
160 pixel = 0; 160 pixel = 0;
161 } 161 }
162 if (pixel > m_maxPixel) { 162 if (pixel > m_maxPixel) {
163 pixel = m_maxPixel; 163 pixel = m_maxPixel;
164 } 164 }
165 if (pixel == 0) { 165 if (pixel == 0) {
166 if (m_mapper.hasLightBackground()) { 166 if (m_mapper.hasLightBackground()) {
167 return Qt::white; 167 return Qt::white;
168 } else { 168 } else {
169 return Qt::black; 169 return Qt::black;
170 } 170 }
171 } else { 171 } else {
172 int target = int(pixel) + rotation; 172 int target = int(pixel) + rotation;
173 while (target < 1) target += m_maxPixel; 173 while (target < 1) target += m_maxPixel;
174 while (target > m_maxPixel) target -= m_maxPixel; 174 while (target > m_maxPixel) target -= m_maxPixel;
175 return m_mapper.map(double(target)); 175 return m_mapper.map(double(target));
176 } 176 }
177 } 177 }