|
|
@@ -28,10 +28,11 @@ using namespace Polycode;
|
|
|
#define NORMAL_FT_FLAGS FT_LOAD_TARGET_LIGHT
|
|
|
|
|
|
|
|
|
-Label::Label(Font *font, const String& text, int size, int antiAliasMode) : Image() {
|
|
|
+Label::Label(Font *font, const String& text, int size, int antiAliasMode, bool premultiplyAlpha) : Image() {
|
|
|
setPixelType(Image::IMAGE_RGBA);
|
|
|
this->font = font;
|
|
|
this->size = size;
|
|
|
+ this->premultiplyAlpha = premultiplyAlpha;
|
|
|
imageData = NULL;
|
|
|
this->antiAliasMode = antiAliasMode;
|
|
|
currentTextWidth = 0;
|
|
|
@@ -186,12 +187,21 @@ void Label::setText(const String& text) {
|
|
|
if(!(j%slot->bitmap.width) && j !=0)
|
|
|
lineoffset += (textWidth*4)-(slot->bitmap.width * 4);
|
|
|
|
|
|
- imageData[xoff+lineoffset] = 255;
|
|
|
- imageData[xoff+lineoffset+1] = 255;
|
|
|
- imageData[xoff+lineoffset+2] = 255;
|
|
|
-
|
|
|
- if(imageData[xoff+lineoffset+3] == 0)
|
|
|
- imageData[xoff+lineoffset+3] = slot->bitmap.buffer[j];
|
|
|
+ int newVal = imageData[xoff+lineoffset+3] + slot->bitmap.buffer[j];
|
|
|
+ if(newVal > 255)
|
|
|
+ newVal = 255;
|
|
|
+ imageData[xoff+lineoffset+3] = newVal;
|
|
|
+
|
|
|
+ if(premultiplyAlpha) {
|
|
|
+ imageData[xoff+lineoffset] = (int)(255.0 * ((Number)imageData[xoff+lineoffset+3])/255.0);
|
|
|
+ imageData[xoff+lineoffset+1] = (int)(255.0 * ((Number)imageData[xoff+lineoffset+3])/255.0);
|
|
|
+ imageData[xoff+lineoffset+2] = (int)(255.0 * ((Number)imageData[xoff+lineoffset+3])/255.0);
|
|
|
+ } else {
|
|
|
+ imageData[xoff+lineoffset] = 255;
|
|
|
+ imageData[xoff+lineoffset+1] = 255;
|
|
|
+ imageData[xoff+lineoffset+2] = 255;
|
|
|
+ }
|
|
|
+
|
|
|
xoff += 4;
|
|
|
}
|
|
|
break;
|