commit ff8383348c4c3a60a14d68f2d42631544adcc5a4 Author: Campbell Barton Date: Thu Sep 22 21:46:55 2022 +1000 TMP diff --git a/source/blender/blenfont/intern/blf_thumbs.c b/source/blender/blenfont/intern/blf_thumbs.c index ea5e4dd5d09..be5435b4f4e 100644 --- a/source/blender/blenfont/intern/blf_thumbs.c +++ b/source/blender/blenfont/intern/blf_thumbs.c @@ -224,12 +224,10 @@ static const char32_t *blf_get_sample_text(FT_Face face) if (FT_Get_Char_Index(face, U'\uf041') != 0) { return U"\uf041\uf044\uf048"; } - else if (FT_Get_Char_Index(face, U'\uf030') != 0) { + if (FT_Get_Char_Index(face, U'\uf030') != 0) { return U"\uf030\uf031\uf032"; } - else { - return U"ADH"; - } + return U"ADH"; } const char32_t *def = U"Aabg"; @@ -252,21 +250,21 @@ static const char32_t *blf_get_sample_text(FT_Face face) return U"\xE000\xFFFF"; } - int language_count = count_bits_i(os2_table->ulUnicodeRange1) + - count_bits_i(os2_table->ulUnicodeRange2) + - count_bits_i(os2_table->ulUnicodeRange3) + - count_bits_i(os2_table->ulUnicodeRange4); + int language_count = count_bits_i((uint)os2_table->ulUnicodeRange1) + + count_bits_i((uint)os2_table->ulUnicodeRange2) + + count_bits_i((uint)os2_table->ulUnicodeRange3) + + count_bits_i((uint)os2_table->ulUnicodeRange4); if (language_count == 0) { return def; } - for (int i = 0; i < ARRAY_SIZE(unicode_samples); ++i) { + for (uint i = 0; i < ARRAY_SIZE(unicode_samples); ++i) { UnicodeSample s = unicode_samples[i]; if (os2_table && s.field && s.mask) { /* OS/2 Table contains 4 contiguous integers of script coverage bit flags. */ FT_ULong *field = &(os2_table->ulUnicodeRange1) + (s.field - 1); - if (!(*field & s.mask)) { + if (!(*field & (FT_ULong)s.mask)) { continue; } } @@ -333,8 +331,9 @@ bool BLF_thumb_preview( FT_Fixed advance = 0; int width = 0; - int height = (face->size->metrics.ascender - face->size->metrics.descender) >> 6; - for (int i = 0; i < BLF_SAMPLE_LEN && codepoints[i]; ++i) { + /* FIXME: don't bit-shift by magic numbers use `ft_pix_to_int`. */ + int height = (int)((face->size->metrics.ascender - face->size->metrics.descender) >> 6); + for (uint i = 0; i < BLF_SAMPLE_LEN && codepoints[i]; i++) { glyph_ids[i] = FT_Get_Char_Index(face, codepoints[i]); /* If sample glyph is not available, find another. */ if (!glyph_ids[i]) { @@ -345,12 +344,15 @@ bool BLF_thumb_preview( } /* Get advance without loading the glyph. */ FT_Get_Advance(face, glyph_ids[i], FT_LOAD_NO_HINTING, &advance); - width += advance >> 16; + /* FIXME: don't bit shift by magic numbers. */ + width += (int)(advance >> 16); } width = MAX2(width, height); /* Fill up to 96% horizontally or vertically. */ - float font_size = MIN3(w, w * 0.96f / width * w, h * 0.96f / height * h); + float font_size = MIN3((float)w, + ((float)w * 0.96f / (float)width * (float)w), + (float)h * 0.96f / (float)height * (float)h); if (font_size < 1 || FT_Set_Char_Size(face, (int)(font_size * 64.0f), 0, 72, 72) != FT_Err_Ok) { /* Sizing can fail for non-scalable fonts. */ @@ -360,8 +362,8 @@ bool BLF_thumb_preview( } /* Horizontally center, line up baselines vertically. */ - int left = (int)((w - (width * (font_size / (float)w))) / 2.0f); - int top = (int)(h * 0.7f); + int left = (int)(((float)w - ((float)width * (font_size / (float)w))) / 2.0f); + int top = (int)((float)h * 0.7f); /* Print out to buffer. */ @@ -381,21 +383,21 @@ bool BLF_thumb_preview( glyph_count++; - for (uint y = 0; y < face->glyph->bitmap.rows; y++) { - int dest_row = (h - y - 1 + face->glyph->bitmap_top - top); + for (int y = 0; y < (int)face->glyph->bitmap.rows; y++) { + int dest_row = (h - y - 1 + (int)face->glyph->bitmap_top - top); if (dest_row >= 0 && dest_row < h) { - for (uint x = 0; x < face->glyph->bitmap.width; x++) { + for (int x = 0; x < (int)face->glyph->bitmap.width; x++) { int dest_col = (x + advance_x + face->glyph->bitmap_left + left); if (dest_col >= 0 && dest_col < w) { - uchar *source = &face->glyph->bitmap.buffer[y * face->glyph->bitmap.width + x]; + uchar *source = &face->glyph->bitmap.buffer[y * (int)face->glyph->bitmap.width + x]; uchar *dest = &buf[dest_row * w * 4 + (dest_col * 4 + 3)]; - *dest = MIN2(*dest + *source, 255); + *dest = (uchar)MIN2(((uint)*dest + (uint)*source), 255u); } } } } - - advance_x += face->glyph->advance.x >> 6; + /* FIXME: arbitrary shift! */ + advance_x += (int)(face->glyph->advance.x >> 6); } FT_Done_Face(face); diff --git a/source/blender/imbuf/intern/thumbs_font.c b/source/blender/imbuf/intern/thumbs_font.c index eb052e3784f..d62216278a2 100644 --- a/source/blender/imbuf/intern/thumbs_font.c +++ b/source/blender/imbuf/intern/thumbs_font.c @@ -11,6 +11,8 @@ #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" +#include "IMB_thumbs.h" /* own include. */ + /* XXX, bad level call */ #include "../../blenfont/BLF_api.h"