comparison layer/SingleColourLayer.cpp @ 373:0895517bb2d1 1.2-stable

* merge from trunk (1.2 ended up being tracked from trunk, but we may want this branch for fixes later)
author Chris Cannam
date Wed, 27 Feb 2008 10:32:45 +0000
parents c0b9eec70639
children
comparison
equal deleted inserted replaced
337:813170c57b13 373:0895517bb2d1
20 #include <iostream> 20 #include <iostream>
21 21
22 #include <QTextStream> 22 #include <QTextStream>
23 #include <QApplication> 23 #include <QApplication>
24 24
25 //#define DEBUG_COLOUR_SELECTION 1
26
25 SingleColourLayer::ColourRefCount 27 SingleColourLayer::ColourRefCount
26 SingleColourLayer::m_colourRefCount; 28 SingleColourLayer::m_colourRefCount;
27 29
28 SingleColourLayer::SingleColourLayer() : 30 SingleColourLayer::SingleColourLayer() :
29 m_colour(0), 31 m_colour(0),
30 m_colourExplicitlySet(false) 32 m_colourExplicitlySet(false),
33 m_defaultColourSet(false)
31 { 34 {
32 setDefaultColourFor(0); 35 setDefaultColourFor(0);
33 } 36 }
34 37
35 QPixmap 38 QPixmap
123 } 126 }
124 127
125 void 128 void
126 SingleColourLayer::setDefaultColourFor(View *v) 129 SingleColourLayer::setDefaultColourFor(View *v)
127 { 130 {
128 if (m_colourExplicitlySet) return; 131 #ifdef DEBUG_COLOUR_SELECTION
132 std::cerr << "SingleColourLayer::setDefaultColourFor: m_colourExplicitlySet = " << m_colourExplicitlySet << ", m_defaultColourSet " << m_defaultColourSet << std::endl;
133 #endif
134
135 if (m_colourExplicitlySet || m_defaultColourSet) return;
136
137 if (v) m_defaultColourSet = true; // v==0 case doesn't really count
129 138
130 bool dark = false; 139 bool dark = false;
131 if (v) { 140 if (v) {
132 dark = !v->hasLightBackground(); 141 dark = !v->hasLightBackground();
133 } else { 142 } else {
146 } 155 }
147 // We don't want to call this if !v because that probably 156 // We don't want to call this if !v because that probably
148 // means we're being called from the constructor, and this is 157 // means we're being called from the constructor, and this is
149 // a virtual function 158 // a virtual function
150 hint = getDefaultColourHint(dark, impose); 159 hint = getDefaultColourHint(dark, impose);
151 // std::cerr << "hint = " << hint << ", impose = " << impose << std::endl; 160 #ifdef DEBUG_COLOUR_SELECTION
152 } else { 161 std::cerr << "hint = " << hint << ", impose = " << impose << std::endl;
153 // std::cerr << "(from ctor)" << std::endl; 162 #endif
163 } else {
164 #ifdef DEBUG_COLOUR_SELECTION
165 std::cerr << "(from ctor)" << std::endl;
166 #endif
154 } 167 }
155 168
156 if (hint >= 0 && impose) { 169 if (hint >= 0 && impose) {
157 setBaseColour(hint); 170 setBaseColour(hint);
158 return; 171 return;
169 int count = 0; 182 int count = 0;
170 if (m_colourRefCount.find(index) != m_colourRefCount.end()) { 183 if (m_colourRefCount.find(index) != m_colourRefCount.end()) {
171 count = m_colourRefCount[index]; 184 count = m_colourRefCount[index];
172 } 185 }
173 186
174 // std::cerr << "index = " << index << ", count = " << count; 187 #ifdef DEBUG_COLOUR_SELECTION
188 std::cerr << "index = " << index << ", count = " << count;
189 #endif
175 190
176 if (bestColour < 0 || count < bestCount) { 191 if (bestColour < 0 || count < bestCount) {
177 bestColour = index; 192 bestColour = index;
178 bestCount = count; 193 bestCount = count;
179 // std::cerr << " *"; 194 #ifdef DEBUG_COLOUR_SELECTION
180 } 195 std::cerr << " *";
181 196 #endif
182 // std::cerr << std::endl; 197 }
198
199 #ifdef DEBUG_COLOUR_SELECTION
200 std::cerr << std::endl;
201 #endif
183 } 202 }
184 203
185 if (bestColour < 0) m_colour = 0; 204 if (bestColour < 0) m_colour = 0;
186 else m_colour = bestColour; 205 else m_colour = bestColour;
187 206
287 306
288 m_colourExplicitlySet = true; 307 m_colourExplicitlySet = true;
289 308
290 if (m_colour != colour) { 309 if (m_colour != colour) {
291 310
311 #ifdef DEBUG_COLOUR_SELECTION
292 std::cerr << "SingleColourLayer::setProperties: changing colour from " << m_colour << " to " << colour << std::endl; 312 std::cerr << "SingleColourLayer::setProperties: changing colour from " << m_colour << " to " << colour << std::endl;
313 #endif
293 314
294 if (m_colourRefCount.find(m_colour) != m_colourRefCount.end() && 315 if (m_colourRefCount.find(m_colour) != m_colourRefCount.end() &&
295 m_colourRefCount[m_colour] > 0) { 316 m_colourRefCount[m_colour] > 0) {
296 m_colourRefCount[m_colour]--; 317 m_colourRefCount[m_colour]--;
297 } 318 }