mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-06-19 12:28:30 +02:00
[FT] Prefer downscaling bitmap glyphs to upscaling
Say, you have bitmap strikes for sizes 50ppem and 100ppem. To render at 60ppem, it's much better to downscale the 100ppem bitmap than upscale 50ppem one. Prefer downscaling.
This commit is contained in:
parent
4f00d2344c
commit
a8f1b456db
1 changed files with 12 additions and 3 deletions
|
|
@ -739,6 +739,7 @@ _compute_transform (cairo_ft_font_transform_t *sf,
|
|||
|
||||
if (unscaled && (unscaled->face->face_flags & FT_FACE_FLAG_SCALABLE) == 0) {
|
||||
double min_distance = DBL_MAX;
|
||||
cairo_bool_t magnify = TRUE;
|
||||
int i;
|
||||
int best_i = 0;
|
||||
double best_x_size = 0;
|
||||
|
|
@ -747,10 +748,18 @@ _compute_transform (cairo_ft_font_transform_t *sf,
|
|||
for (i = 0; i < unscaled->face->num_fixed_sizes; i++) {
|
||||
double x_size = unscaled->face->available_sizes[i].y_ppem / 64.;
|
||||
double y_size = unscaled->face->available_sizes[i].y_ppem / 64.;
|
||||
double distance = fabs (y_size - y_scale);
|
||||
double distance = y_size - y_scale;
|
||||
|
||||
if (distance <= min_distance) {
|
||||
min_distance = distance;
|
||||
/*
|
||||
* distance is positive if current strike is larger than desired
|
||||
* size, and negative if smaller.
|
||||
*
|
||||
* We like to prefer down-scaling to upscaling.
|
||||
*/
|
||||
|
||||
if ((magnify && distance >= 0) || fabs (distance) <= min_distance) {
|
||||
magnify = distance < 0;
|
||||
min_distance = abs (distance);
|
||||
best_i = i;
|
||||
best_x_size = x_size;
|
||||
best_y_size = y_size;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue