Browse Source

Undo the kRenderJustXForceLeft bugfix of 4 commits back.

The fix (adding adjustment of fRenderInfo.fDestPtr) made kRenderJustXForceLeft behave as intended (left-aligning the edge of the bitmap rather than the side bearing of the first character) but cuts off shadows in some places (e.g. at the left edges of "BUDDIES" and "NEIGHBORS" in the mini KI). To ensure enough space for the shadow, and considering that all content was developed and visually optimized with the bug in place, it seems better to preserve the buggy behavior and make kRenderJustXForceLeft work exactly like kRenderJustXLeft.
Christian Walther 11 years ago committed by Anne Marije v/d Meer
parent
commit
0c8fc6d559
  1. 18
      Sources/Plasma/PubUtilLib/plGImage/plFont.cpp

18
Sources/Plasma/PubUtilLib/plGImage/plFont.cpp

@ -668,16 +668,14 @@ void plFont::IRenderString( plMipmap *mip, uint16_t x, uint16_t y, const wcha
fRenderInfo.fRenderFunc = oldFunc;
}
// Adjust for left kern
if( ( fRenderInfo.fFlags & kRenderJustXMask ) == kRenderJustXForceLeft )
{
// See note at top of file
plCharacter &ch = fCharacters[ (uint16_t)string[ 0 ] - fFirstChar ];
fRenderInfo.fX -= (int16_t)ch.fLeftKern;
fRenderInfo.fMaxWidth += (int16_t)ch.fLeftKern;
fRenderInfo.fDestPtr -= (int16_t)ch.fLeftKern * fRenderInfo.fDestBPP;
fRenderInfo.fFarthestX = fRenderInfo.fX;
}
// There used to be an adjustment of the X coordinate by -ch.fLeftKern for the case
// of kRenderJustXForceLeft here, but it was buggy in that it neglected to adjust
// fRenderInfo.fDestPtr and therefore had no visible effect (or almost none - only
// at the end of the line). Fixing the bug however (making kRenderJustXForceLeft
// work as intended) causes the text shadow to be cut off in some places. To ensure
// enough space for the shadow, and considering that all content was developed and
// visually optimized with the bug in place, it seems better to preserve the buggy
// behavior and make kRenderJustXForceLeft work exactly like kRenderJustXLeft.
fRenderInfo.fVolatileStringPtr = string; // Just so we can keep track of when we clip
IRenderLoop( string, -1 );

Loading…
Cancel
Save