mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Refactor AColor.cpp
This commit is contained in:
parent
d6d486000a
commit
ca58443644
159
src/AColor.cpp
159
src/AColor.cpp
@ -638,85 +638,108 @@ void AColor::DarkMIDIChannel(wxDC * dc, int channel /* 1 - 16 */ )
|
|||||||
unsigned char AColor::gradient_pre[ColorGradientTotal][2][gradientSteps][3];
|
unsigned char AColor::gradient_pre[ColorGradientTotal][2][gradientSteps][3];
|
||||||
|
|
||||||
void AColor::PreComputeGradient() {
|
void AColor::PreComputeGradient() {
|
||||||
{
|
if (gradient_inited) return;
|
||||||
if (!gradient_inited) {
|
gradient_inited = 1;
|
||||||
gradient_inited = 1;
|
|
||||||
|
|
||||||
for (int selected = 0; selected < ColorGradientTotal; selected++)
|
for (int selected = 0; selected < ColorGradientTotal; selected++) {
|
||||||
for (int grayscale = 0; grayscale <= 1; grayscale++) {
|
const int gsteps = 4;
|
||||||
float r, g, b;
|
float gradient[gsteps + 1][3];
|
||||||
|
theTheme.Colour( clrSpectro1 ) = theTheme.Colour( clrUnselected );
|
||||||
|
theTheme.Colour( clrSpectro1Sel ) = theTheme.Colour( clrSelected );
|
||||||
|
int clrFirst = (selected == ColorGradientUnselected ) ? clrSpectro1 : clrSpectro1Sel;
|
||||||
|
for(int j=0;j<(gsteps+1);j++){
|
||||||
|
wxColour c = theTheme.Colour( clrFirst+j );
|
||||||
|
gradient[ j] [0] = c.Red()/255.0;
|
||||||
|
gradient[ j] [1] = c.Green()/255.0;
|
||||||
|
gradient[ j] [2] = c.Blue()/255.0;
|
||||||
|
}
|
||||||
|
|
||||||
int i;
|
// Color
|
||||||
for (i=0; i<gradientSteps; i++) {
|
for (int i = 0; i<gradientSteps; i++) {
|
||||||
float value = float(i)/gradientSteps;
|
float r, g, b;
|
||||||
|
float value = float(i)/gradientSteps;
|
||||||
|
|
||||||
if (grayscale) {
|
int left = (int)(value * gsteps);
|
||||||
r = g = b = 0.84 - 0.84 * value;
|
int right = (left == gsteps ? gsteps : left + 1);
|
||||||
} else {
|
|
||||||
const int gsteps = 4;
|
float rweight = (value * gsteps) - left;
|
||||||
float gradient[gsteps + 1][3];
|
float lweight = 1.0 - rweight;
|
||||||
theTheme.Colour( clrSpectro1 ) = theTheme.Colour( clrUnselected );
|
|
||||||
theTheme.Colour( clrSpectro1Sel ) = theTheme.Colour( clrSelected );
|
r = (gradient[left][0] * lweight) + (gradient[right][0] * rweight);
|
||||||
int clrFirst = (selected == ColorGradientUnselected ) ? clrSpectro1 : clrSpectro1Sel;
|
g = (gradient[left][1] * lweight) + (gradient[right][1] * rweight);
|
||||||
for(int j=0;j<(gsteps+1);j++){
|
b = (gradient[left][2] * lweight) + (gradient[right][2] * rweight);
|
||||||
wxColour c = theTheme.Colour( clrFirst+j );
|
|
||||||
gradient[ j] [0] = c.Red()/255.0;
|
switch (selected) {
|
||||||
gradient[ j] [1] = c.Green()/255.0;
|
case ColorGradientUnselected:
|
||||||
gradient[ j] [2] = c.Blue()/255.0;
|
// not dimmed
|
||||||
}
|
break;
|
||||||
|
|
||||||
|
case ColorGradientTimeAndFrequencySelected:
|
||||||
|
float temp;
|
||||||
|
temp = r;
|
||||||
|
r = g;
|
||||||
|
g = b;
|
||||||
|
b = temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ColorGradientTimeSelected:
|
||||||
|
// partly dimmed
|
||||||
|
r *= 0.75f;
|
||||||
|
g *= 0.75f;
|
||||||
|
b *= 0.75f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
int left = (int)(value * gsteps);
|
// For now edge colour is just black (or white if grey-scale)
|
||||||
int right = (left == gsteps ? gsteps : left + 1);
|
// Later we might invert or something else funky.
|
||||||
|
case ColorGradientEdge:
|
||||||
|
// fully dimmed
|
||||||
|
r = 0;
|
||||||
|
g = 0;
|
||||||
|
b = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gradient_pre[selected][0][i][0] = (unsigned char) (255 * r);
|
||||||
|
gradient_pre[selected][0][i][1] = (unsigned char) (255 * g);
|
||||||
|
gradient_pre[selected][0][i][2] = (unsigned char) (255 * b);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grayscale
|
||||||
|
for (int i = 0; i<gradientSteps; i++) {
|
||||||
|
float r, g, b;
|
||||||
|
float value = float(i)/gradientSteps;
|
||||||
|
|
||||||
float rweight = (value * gsteps) - left;
|
r = g = b = 0.84 - 0.84 * value;
|
||||||
float lweight = 1.0 - rweight;
|
|
||||||
|
|
||||||
r = (gradient[left][0] * lweight) + (gradient[right][0] * rweight);
|
switch (selected) {
|
||||||
g = (gradient[left][1] * lweight) + (gradient[right][1] * rweight);
|
case ColorGradientUnselected:
|
||||||
b = (gradient[left][2] * lweight) + (gradient[right][2] * rweight);
|
// not dimmed
|
||||||
}
|
break;
|
||||||
|
|
||||||
switch (selected) {
|
case ColorGradientTimeAndFrequencySelected:
|
||||||
case ColorGradientUnselected:
|
// else fall through to SAME grayscale colour as normal selection.
|
||||||
// not dimmed
|
// The white lines show it up clearly enough.
|
||||||
break;
|
|
||||||
|
|
||||||
case ColorGradientTimeAndFrequencySelected:
|
case ColorGradientTimeSelected:
|
||||||
if( !grayscale )
|
// partly dimmed
|
||||||
{
|
r *= 0.75f;
|
||||||
float temp;
|
g *= 0.75f;
|
||||||
temp = r;
|
b *= 0.75f;
|
||||||
r = g;
|
break;
|
||||||
g = b;
|
|
||||||
b = temp;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// else fall through to SAME grayscale colour as normal selection.
|
|
||||||
// The white lines show it up clearly enough.
|
|
||||||
|
|
||||||
case ColorGradientTimeSelected:
|
|
||||||
// partly dimmed
|
|
||||||
r *= 0.75f;
|
|
||||||
g *= 0.75f;
|
|
||||||
b *= 0.75f;
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
// For now edge colour is just black (or white if grey-scale)
|
// For now edge colour is just black (or white if grey-scale)
|
||||||
// Later we might invert or something else funky.
|
// Later we might invert or something else funky.
|
||||||
case ColorGradientEdge:
|
case ColorGradientEdge:
|
||||||
// fully dimmed
|
// fully dimmed
|
||||||
r = 1.0f * grayscale;
|
r = 1.0f;
|
||||||
g = 1.0f * grayscale;
|
g = 1.0f;
|
||||||
b = 1.0f * grayscale;
|
b = 1.0f;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gradient_pre[selected][grayscale][i][0] = (unsigned char) (255 * r);
|
gradient_pre[selected][1][i][0] = (unsigned char) (255 * r);
|
||||||
gradient_pre[selected][grayscale][i][1] = (unsigned char) (255 * g);
|
gradient_pre[selected][1][i][1] = (unsigned char) (255 * g);
|
||||||
gradient_pre[selected][grayscale][i][2] = (unsigned char) (255 * b);
|
gradient_pre[selected][1][i][2] = (unsigned char) (255 * b);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user