Use alpha channel if available.
svn-id: r17354
This commit is contained in:
parent
ac54a40ea2
commit
d2214dca99
1 changed files with 48 additions and 16 deletions
|
@ -311,6 +311,36 @@ void NewGui::blendRect(int x, int y, int w, int h, OverlayColor color, int level
|
||||||
if (!rect.isValidRect())
|
if (!rect.isValidRect())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (_system->hasAlpha()) {
|
||||||
|
|
||||||
|
int a, r, g, b;
|
||||||
|
uint8 aa, ar, ag, ab;
|
||||||
|
_system->colorToARGB(color, aa, ar, ag, ab);
|
||||||
|
a = aa*level/(level+1);
|
||||||
|
if (a < 1)
|
||||||
|
return;
|
||||||
|
r = ar * a;
|
||||||
|
g = ag * a;
|
||||||
|
b = ab * a;
|
||||||
|
|
||||||
|
OverlayColor *ptr = getBasePtr(rect.left, rect.top);
|
||||||
|
|
||||||
|
h = rect.height();
|
||||||
|
w = rect.width();
|
||||||
|
while (h--) {
|
||||||
|
for (int i = 0; i < w; i++) {
|
||||||
|
_system->colorToARGB(ptr[i], aa, ar, ag, ab);
|
||||||
|
int a2 = aa + a - (a*aa)/255;
|
||||||
|
ptr[i] = _system->ARGBToColor(a2,
|
||||||
|
((255-a)*aa*ar/255+r)/a2,
|
||||||
|
((255-a)*aa*ag/255+g)/a2,
|
||||||
|
((255-a)*aa*ab/255+b)/a2);
|
||||||
|
}
|
||||||
|
ptr += _screenPitch;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
int r, g, b;
|
int r, g, b;
|
||||||
uint8 ar, ag, ab;
|
uint8 ar, ag, ab;
|
||||||
_system->colorToRGB(color, ar, ag, ab);
|
_system->colorToRGB(color, ar, ag, ab);
|
||||||
|
@ -331,6 +361,8 @@ void NewGui::blendRect(int x, int y, int w, int h, OverlayColor color, int level
|
||||||
}
|
}
|
||||||
ptr += _screenPitch;
|
ptr += _screenPitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue