Revert the change to use rendered bitmap width to calculate cell width
Instead if the bitmap is up to two pixels wider than the cell width simply crop on the right. Fixes #352
This commit is contained in:
parent
94d248d812
commit
ce85382c68
@ -278,12 +278,8 @@ 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);
|
||||||
// We actually render the bitmap and get its width even though this is very slow, because
|
if (load_glyph(self, glyph_index, FT_LOAD_DEFAULT)) {
|
||||||
// there are fonts for which the horizontal advance is incorrect, see https://github.com/kovidgoyal/kitty/issues/352
|
ans = MAX(ans, (unsigned int)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f));
|
||||||
if (load_glyph(self, glyph_index, FT_LOAD_RENDER)) {
|
|
||||||
unsigned int horizontal_advance = (unsigned int)ceilf((float)self->face->glyph->metrics.horiAdvance / 64.f);
|
|
||||||
ans = MAX(ans, self->face->glyph->bitmap.width);
|
|
||||||
ans = MAX(ans, horizontal_advance);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ans;
|
return ans;
|
||||||
@ -328,7 +324,6 @@ typedef struct {
|
|||||||
unsigned int factor, right_edge;
|
unsigned int factor, right_edge;
|
||||||
} ProcessedBitmap;
|
} ProcessedBitmap;
|
||||||
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
trim_borders(ProcessedBitmap *ans, size_t extra) {
|
trim_borders(ProcessedBitmap *ans, size_t extra) {
|
||||||
bool column_has_text = false;
|
bool column_has_text = false;
|
||||||
@ -358,9 +353,13 @@ render_bitmap(Face *self, int glyph_id, ProcessedBitmap *ans, unsigned int cell_
|
|||||||
ans->rows = bitmap->rows;
|
ans->rows = bitmap->rows;
|
||||||
ans->pixel_mode = bitmap->pixel_mode;
|
ans->pixel_mode = bitmap->pixel_mode;
|
||||||
if (ans->width > max_width) {
|
if (ans->width > max_width) {
|
||||||
size_t extra = bitmap->width - max_width;
|
size_t extra = ans->width - max_width;
|
||||||
if (italic && extra < cell_width / 2) {
|
if (italic && extra < cell_width / 2) {
|
||||||
trim_borders(ans, extra);
|
trim_borders(ans, extra);
|
||||||
|
} else if (extra == 2 && num_cells == 1) {
|
||||||
|
// there exist fonts that have bitmaps just a couple of pixels
|
||||||
|
// wider than their advances, rather than rescale, which looks
|
||||||
|
// bad, we just crop the bitmap on the right. See https://github.com/kovidgoyal/kitty/issues/352
|
||||||
} else if (rescale && self->is_scalable && extra > 1) {
|
} else if (rescale && self->is_scalable && extra > 1) {
|
||||||
FT_F26Dot6 char_width = self->char_width, char_height = self->char_height;
|
FT_F26Dot6 char_width = self->char_width, char_height = self->char_height;
|
||||||
float ar = (float)max_width / (float)bitmap->width;
|
float ar = (float)max_width / (float)bitmap->width;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user