diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.cpp index ca70c356..2ab6565c 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.cpp @@ -380,6 +380,17 @@ void plDynamicTextMap::IClearFromBuffer( UInt32 *clearBuffer ) } } +//// IPropagateFlags ////////////////////////////////////////////////////////// + +void plDynamicTextMap::IPropagateFlags() +{ + SetJustify(fJustify); + fCurrFont->SetRenderFlag(plFont::kRenderShadow, fFontFlags & kFontShadowed); + fCurrFont->SetRenderFlag(plFont::kRenderIntoAlpha, fFontBlockRGB); + fCurrFont->SetRenderFlag(plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha); + fCurrFont->SetRenderColor(fFontColor.ToARGB32()); +} + //// ClearToColor ///////////////////////////////////////////////////////////// void plDynamicTextMap::ClearToColor( hsColorRGBA &color ) @@ -454,6 +465,8 @@ void plDynamicTextMap::SetFont( const char *face, UInt16 size, UInt8 fontFlags, // This will be nil if we're just running the page optimizer. if (fCurrFont) { + if (fFontFlags & kFontShadowed) + fCurrFont->SetRenderFlag(plFont::kRenderShadow, true); fCurrFont->SetRenderYJustify( plFont::kRenderJustYTop ); SetJustify( fJustify ); } @@ -507,12 +520,9 @@ void plDynamicTextMap::DrawString( UInt16 x, UInt16 y, const wchar_t *text ) if( !IIsValid() ) return; - SetJustify( fJustify ); + IPropagateFlags(); fCurrFont->SetRenderFlag( plFont::kRenderWrap | plFont::kRenderClip, false ); fCurrFont->SetRenderClipRect( 0, 0, fVisWidth, fVisHeight ); - fCurrFont->SetRenderColor( fFontColor.ToARGB32() ); - fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB ); - fCurrFont->SetRenderFlag( plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha ); fCurrFont->RenderString( this, x, y, text ); } @@ -530,11 +540,8 @@ void plDynamicTextMap::DrawClippedString( Int16 x, Int16 y, const wchar_t *text, if( !IIsValid() ) return; - SetJustify( fJustify ); + IPropagateFlags(); fCurrFont->SetRenderClipping( x, y, width, height ); - fCurrFont->SetRenderColor( fFontColor.ToARGB32() ); - fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB ); - fCurrFont->SetRenderFlag( plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha ); fCurrFont->RenderString( this, x, y, text ); } @@ -552,10 +559,8 @@ void plDynamicTextMap::DrawClippedString( Int16 x, Int16 y, const wchar_t *text, if( !IIsValid() ) return; - SetJustify( fJustify ); + IPropagateFlags(); fCurrFont->SetRenderClipping( clipX, clipY, width, height ); - fCurrFont->SetRenderColor( fFontColor.ToARGB32() ); - fCurrFont->SetRenderFlag( plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha ); fCurrFont->RenderString( this, x, y, text ); } @@ -573,11 +578,8 @@ void plDynamicTextMap::DrawWrappedString( UInt16 x, UInt16 y, const wchar_t *tex if( !IIsValid() ) return; - SetJustify( fJustify ); + IPropagateFlags(); fCurrFont->SetRenderWrapping( x, y, width, height ); - fCurrFont->SetRenderColor( fFontColor.ToARGB32() ); - fCurrFont->SetRenderFlag( plFont::kRenderIntoAlpha, fFontBlockRGB ); - fCurrFont->SetRenderFlag( plFont::kRenderAlphaPremultiplied, fPremultipliedAlpha ); fCurrFont->RenderString( this, x, y, text, lastX, lastY ); } diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.h index b8162ef7..453a0afe 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plDynamicTextMap.h @@ -222,6 +222,8 @@ class plDynamicTextMap : public plMipmap UInt32 *IAllocateOSSurface( UInt16 width, UInt16 height ); void IDestroyOSSurface( void ); + void IPropagateFlags(); + hsBool fHasAlpha, fPremultipliedAlpha, fShadowed; Justify fJustify; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp index f5761216..c40fc35f 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.cpp @@ -347,7 +347,7 @@ void plFont::IRenderString( plMipmap *mip, UInt16 x, UInt16 y, const wchar_t *st { if( fRenderInfo.fFlags & kRenderAlphaPremultiplied ) { - if (1)//( ( fRenderInfo.fColor & 0x00ffffff ) == 0x00ffffff ) //FIXME + if (fRenderInfo.fFlags & kRenderShadow) fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32AlphaPremShadow; else fRenderInfo.fRenderFunc = &plFont::IRenderChar8To32AlphaPremultiplied; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.h index ff69be5b..58911f52 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plGImage/plFont.h @@ -117,6 +117,7 @@ class plFont : public hsKeyedObject // leave the alpha as-is // This flag has no effect on monochrome fonts kRenderAlphaPremultiplied = 0x00001000, // Destination has color values premultiplied by alpha + kRenderShadow = 0x00002000, // Render text shadows }; enum Flags