Used other font metrics members in the GetEscapement implementation in order to support white spaces. As suggested by DarkWyrm. It seems to work better now, but I realised that DisplayDriverPainter::StringWidth() is broken in the same way. Will be fixed next.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12681 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
92acca78db
commit
1f738c5b4e
@ -333,14 +333,26 @@ ServerFont::GetEscapements(const char charArray[], int32 numChars,
|
||||
BPoint *escapements = (BPoint *)malloc(sizeof(BPoint) * numChars);
|
||||
for (int i = 0; i < numChars; i++) {
|
||||
FT_Load_Char(face, charArray[i], FT_LOAD_NO_BITMAP);
|
||||
escapements[i].x = float(face->glyph->metrics.width / 64) / fSize;
|
||||
escapements[i].y = 0;
|
||||
// escapements[i].x = float(face->glyph->metrics.width / 64) / fSize;
|
||||
// escapements[i].y = 0;
|
||||
escapements[i].x = float(face->glyph->metrics.horiAdvance / 64) / fSize;
|
||||
escapements[i].y = float(face->glyph->metrics.vertAdvance / 64) / fSize;
|
||||
escapements[i] += offsetArray[i];
|
||||
}
|
||||
|
||||
return escapements;
|
||||
}
|
||||
|
||||
// is_white_space
|
||||
inline bool
|
||||
is_white_space(uint16 glyph)
|
||||
{
|
||||
// TODO: handle them all!
|
||||
if (glyph == ' ')
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
ServerFont::GetEscapements(const char charArray[], int32 numChars,
|
||||
float widthArray[], escapement_delta delta) const
|
||||
@ -376,11 +388,9 @@ ServerFont::GetEscapements(const char charArray[], int32 numChars,
|
||||
|
||||
for (int i = 0; i < numChars; i++) {
|
||||
FT_Load_Char(face, glyphIndex[i], FT_LOAD_NO_BITMAP);
|
||||
// TODO: It appears that "white spaces" are not handled correctly:
|
||||
// metrics.width will be zero, which is in now way correct!
|
||||
widthArray[i] = float(face->glyph->metrics.width / 64) / fSize;
|
||||
// TODO:
|
||||
// widthArray[i] += is_white_space(glyphIndex[i]) ? delta.space : delta.nonspace;
|
||||
// widthArray[i] = float(face->glyph->metrics.width / 64) / fSize;
|
||||
widthArray[i] = float(face->glyph->metrics.horiAdvance / 64) / fSize;
|
||||
widthArray[i] += is_white_space(glyphIndex[i]) ? delta.space : delta.nonspace;
|
||||
}
|
||||
}
|
||||
delete[] convertedBuffer;
|
||||
|
Loading…
Reference in New Issue
Block a user