mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-25 17:52:02 +02:00
Fix regression in handling zero cells caused by refactoring
This commit is contained in:
@@ -97,7 +97,7 @@ fallback_font(Cell *cell) {
|
|||||||
}
|
}
|
||||||
if (get_fallback_font == NULL || i == (sizeof(fallback_fonts)/sizeof(fallback_fonts[0])-1)) return &missing_font;
|
if (get_fallback_font == NULL || i == (sizeof(fallback_fonts)/sizeof(fallback_fonts[0])-1)) return &missing_font;
|
||||||
Py_UCS4 buf[10];
|
Py_UCS4 buf[10];
|
||||||
size_t n = cell_as_unicode(cell, true, buf);
|
size_t n = cell_as_unicode(cell, true, buf, ' ');
|
||||||
PyObject *face = PyObject_CallFunction(get_fallback_font, "NOO", PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, n), bold ? Py_True : Py_False, italic ? Py_True : Py_False);
|
PyObject *face = PyObject_CallFunction(get_fallback_font, "NOO", PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, n), bold ? Py_True : Py_False, italic ? Py_True : Py_False);
|
||||||
if (face == NULL) { PyErr_Print(); return &missing_font; }
|
if (face == NULL) { PyErr_Print(); return &missing_font; }
|
||||||
if (face == Py_None) { Py_DECREF(face); return &missing_font; }
|
if (face == Py_None) { Py_DECREF(face); return &missing_font; }
|
||||||
|
|||||||
@@ -153,8 +153,8 @@ get_load_flags(int hinting, int hintstyle, int base) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
load_glyph(Face *self, int glyph_index) {
|
load_glyph(Face *self, int glyph_index, int load_type) {
|
||||||
int flags = get_load_flags(self->hinting, self->hintstyle, FT_LOAD_RENDER);
|
int flags = get_load_flags(self->hinting, self->hintstyle, load_type);
|
||||||
int error = FT_Load_Glyph(self->face, glyph_index, flags);
|
int error = FT_Load_Glyph(self->face, glyph_index, flags);
|
||||||
if (error) { set_freetype_error("Failed to load glyph, with error:", error); Py_CLEAR(self); return false; }
|
if (error) { set_freetype_error("Failed to load glyph, with error:", error); Py_CLEAR(self); return false; }
|
||||||
return true;
|
return true;
|
||||||
@@ -165,7 +165,7 @@ calc_cell_width(Face *self) {
|
|||||||
unsigned int ans = 0;
|
unsigned int ans = 0;
|
||||||
for (char_type i = 32; i < 128; i++) {
|
for (char_type i = 32; i < 128; i++) {
|
||||||
int glyph_index = FT_Get_Char_Index(self->face, i);
|
int glyph_index = FT_Get_Char_Index(self->face, i);
|
||||||
if (load_glyph(self, glyph_index)) {
|
if (load_glyph(self, glyph_index, FT_LOAD_DEFAULT)) {
|
||||||
ans = MAX(ans, (unsigned long)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f));
|
ans = MAX(ans, (unsigned long)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,9 +166,9 @@ text_at(Line* self, Py_ssize_t xval) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
cell_as_unicode(Cell *cell, bool include_cc, Py_UCS4 *buf) {
|
cell_as_unicode(Cell *cell, bool include_cc, Py_UCS4 *buf, char_type zero_char) {
|
||||||
size_t n = 1;
|
size_t n = 1;
|
||||||
buf[0] = cell->ch;
|
buf[0] = cell->ch ? cell->ch : zero_char;
|
||||||
if (include_cc) {
|
if (include_cc) {
|
||||||
char_type cc = cell->cc;
|
char_type cc = cell->cc;
|
||||||
Py_UCS4 cc1 = cc & CC_MASK, cc2;
|
Py_UCS4 cc1 = cc & CC_MASK, cc2;
|
||||||
@@ -191,9 +191,8 @@ unicode_in_range(Line *self, index_type start, index_type limit, bool include_cc
|
|||||||
char_type ch = self->cells[i].ch;
|
char_type ch = self->cells[i].ch;
|
||||||
if (ch == 0) {
|
if (ch == 0) {
|
||||||
if (previous_width == 2) { previous_width = 0; continue; };
|
if (previous_width == 2) { previous_width = 0; continue; };
|
||||||
ch = ' ';
|
|
||||||
}
|
}
|
||||||
n += cell_as_unicode(self->cells + i, include_cc, buf + n);
|
n += cell_as_unicode(self->cells + i, include_cc, buf + n, ' ');
|
||||||
previous_width = self->cells[i].attrs & WIDTH_MASK;
|
previous_width = self->cells[i].attrs & WIDTH_MASK;
|
||||||
}
|
}
|
||||||
return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, n);
|
return PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buf, n);
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ index_type line_url_start_at(Line *self, index_type x);
|
|||||||
index_type line_url_end_at(Line *self, index_type x);
|
index_type line_url_end_at(Line *self, index_type x);
|
||||||
index_type line_as_ansi(Line *self, Py_UCS4 *buf, index_type buflen);
|
index_type line_as_ansi(Line *self, Py_UCS4 *buf, index_type buflen);
|
||||||
unsigned int line_length(Line *self);
|
unsigned int line_length(Line *self);
|
||||||
size_t cell_as_unicode(Cell *cell, bool include_cc, Py_UCS4 *buf);
|
size_t cell_as_unicode(Cell *cell, bool include_cc, Py_UCS4 *buf, char_type);
|
||||||
PyObject* unicode_in_range(Line *self, index_type start, index_type limit, bool include_cc, char leading_char);
|
PyObject* unicode_in_range(Line *self, index_type start, index_type limit, bool include_cc, char leading_char);
|
||||||
|
|
||||||
void linebuf_init_line(LineBuf *, index_type);
|
void linebuf_init_line(LineBuf *, index_type);
|
||||||
|
|||||||
Reference in New Issue
Block a user