From 9bb24b21f3541b4649f84dd83efe87e02cf35a89 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 18 Mar 2023 20:17:52 +0100 Subject: [PATCH] GRAPHICS: Use better rounding for BDF font scaling --- graphics/fonts/bdf.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/graphics/fonts/bdf.cpp b/graphics/fonts/bdf.cpp index af11c77bd80..9f257a6fb92 100644 --- a/graphics/fonts/bdf.cpp +++ b/graphics/fonts/bdf.cpp @@ -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;