GRAPHICS: Use better rounding for BDF font scaling

This commit is contained in:
Eugene Sandulenko 2023-03-18 20:17:52 +01:00
parent 69d86d3382
commit 9bb24b21f3
No known key found for this signature in database
GPG Key ID: 014D387312D34F08

View File

@ -746,14 +746,14 @@ BdfFont *BdfFont::scaleFont(const BdfFont *src, int newSize) {
BdfFontData data;
data.maxAdvance = (int)((float)src->_data.maxAdvance * scale);
data.height = (int)((float)src->_data.height * scale);
data.size = (int)((float)src->_data.size * scale);
data.defaultBox.width = (int)((float)src->_data.defaultBox.width * scale);
data.defaultBox.height = (int)((float)src->_data.defaultBox.height * scale);
data.defaultBox.xOffset = (int)((float)src->_data.defaultBox.xOffset * scale);
data.defaultBox.yOffset = (int)((float)src->_data.defaultBox.yOffset * scale);
data.ascent = (int)((float)src->_data.ascent * scale);
data.maxAdvance = (int)(roundf((float)src->_data.maxAdvance * scale));
data.height = (int)(roundf((float)src->_data.height * scale));
data.size = (int)(roundf((float)src->_data.size * scale));
data.defaultBox.width = (int)(roundf((float)src->_data.defaultBox.width * scale));
data.defaultBox.height = (int)(roundf((float)src->_data.defaultBox.height * scale));
data.defaultBox.xOffset = (int)(roundf((float)src->_data.defaultBox.xOffset * scale));
data.defaultBox.yOffset = (int)(roundf((float)src->_data.defaultBox.yOffset * scale));
data.ascent = (int)roundf(((float)src->_data.ascent * scale));
data.firstCharacter = src->_data.firstCharacter;
data.defaultCharacter = src->_data.defaultCharacter;
data.numCharacters = src->_data.numCharacters;
@ -768,16 +768,16 @@ BdfFont *BdfFont::scaleFont(const BdfFont *src, int newSize) {
BdfBoundingBox *boxes = new BdfBoundingBox[data.numCharacters];
for (int i = 0; i < data.numCharacters; ++i) {
boxes[i].width = (int)((float)src->_data.boxes[i].width * scale);
boxes[i].height = (int)((float)src->_data.boxes[i].height * scale);
boxes[i].xOffset = (int)((float)src->_data.boxes[i].xOffset * scale);
boxes[i].yOffset = (int)((float)src->_data.boxes[i].yOffset * scale);
boxes[i].width = (int)(roundf((float)src->_data.boxes[i].width * scale));
boxes[i].height = (int)(roundf((float)src->_data.boxes[i].height * scale));
boxes[i].xOffset = (int)(roundf((float)src->_data.boxes[i].xOffset * scale));
boxes[i].yOffset = (int)(roundf((float)src->_data.boxes[i].yOffset * scale));
}
data.boxes = boxes;
byte *advances = new byte[data.numCharacters];
for (int i = 0; i < data.numCharacters; ++i) {
advances[i] = (int)((float)src->_data.advances[i] * scale);
advances[i] = (int)(roundf((float)src->_data.advances[i] * scale));
}
data.advances = advances;
@ -804,7 +804,7 @@ BdfFont *BdfFont::scaleFont(const BdfFont *src, int newSize) {
for (int x = 0; x < box.width; x++) {
b <<= 1;
int sx = (int)((float)x / scale);
int sx = (int)(roundf((float)x / scale));
if (srcd[sx / 8] & (0x80 >> (sx % 8))) {
b |= 1;