Mercurial > hg > svgui
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 } |