From 4ba6d02ab6aef4469cf01f50a6ebe4e085a143a1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 18 Apr 2024 20:59:18 +0530 Subject: [PATCH] Revert "Workaround for fontconfig returning junk in all but the lowest eight bits for FC_INDEX" This reverts commit d2c21ee2973ecda23825b8942989c11caa8193ff. Apparently fontconfig overloads the top 16 bits as "instance index" which is some kind of index for variable fonts? Who knows. fontconfig is a natural disaster. Fixes #7361 --- kitty/fontconfig.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/kitty/fontconfig.c b/kitty/fontconfig.c index 802320294..feb9292f1 100644 --- a/kitty/fontconfig.c +++ b/kitty/fontconfig.c @@ -147,8 +147,6 @@ pyspacing(int val) { #undef S } -static PyObject* -pyindex(long x) { return PyLong_FromLong(x & 0xffff); } static PyObject* pattern_as_dict(FcPattern *pat) { @@ -192,7 +190,7 @@ pattern_as_dict(FcPattern *pat) { I(FC_WIDTH, width) I(FC_SLANT, slant); I(FC_HINT_STYLE, hint_style); - G(int, FcPatternGetInteger, FC_INDEX, pyindex, index); + I(FC_INDEX, index); I(FC_RGBA, subpixel); I(FC_LCD_FILTER, lcdfilter); B(FC_HINTING, hinting); @@ -313,7 +311,6 @@ _native_fc_match(FcPattern *pat, FontConfigFace *ans) { #undef g ans->path = strdup((char*)out); if (!ans->path) { PyErr_NoMemory(); goto end; } - ans->index &= 0xffff; ok = true; end: if (match != NULL) FcPatternDestroy(match); @@ -406,7 +403,7 @@ specialize_font_descriptor(PyObject *base_descriptor, FONTS_DATA_HANDLE fg) { if (pat == NULL) return PyErr_NoMemory(); long face_idx = MAX(0, PyLong_AsLong(idx)); AP(FcPatternAddString, FC_FILE, (const FcChar8*)PyUnicode_AsUTF8(p), "path"); - AP(FcPatternAddInteger, FC_INDEX, face_idx & 0xffff, "index"); + AP(FcPatternAddInteger, FC_INDEX, face_idx, "index"); AP(FcPatternAddDouble, FC_SIZE, fg->font_sz_in_pts, "size"); AP(FcPatternAddDouble, FC_DPI, (fg->logical_dpi_x + fg->logical_dpi_y) / 2.0, "dpi"); ans = _fc_match(pat);