Merge pull request #192 from behdad/jfkthame-stch

[issue 191] Make apply_stch() give a more precise fit
This commit is contained in:
Behdad Esfahbod 2015-12-07 10:44:08 +01:00
commit dee0fbf9e2
1 changed files with 14 additions and 1 deletions

View File

@ -542,7 +542,18 @@ apply_stch (const hb_ot_shape_plan_t *plan,
hb_position_t w_remaining = w_total - w_fixed - overlap; hb_position_t w_remaining = w_total - w_fixed - overlap;
if (sign * w_remaining > sign * w_repeating && sign * w_repeating > 0) if (sign * w_remaining > sign * w_repeating && sign * w_repeating > 0)
n_copies = (sign * w_remaining + sign * w_repeating / 4) / (sign * w_repeating) - 1; n_copies = (sign * w_remaining) / (sign * w_repeating) - 1;
/* See if we can improve the fit by adding an extra repeat and squeezing them together a bit. */
hb_position_t extra_repeat_overlap = 0;
hb_position_t shortfall = sign * w_remaining - sign * w_repeating * (n_copies + 1);
if (shortfall > 0)
{
++n_copies;
hb_position_t excess = (n_copies + 1) * sign * w_repeating - sign * w_remaining;
if (excess > 0)
extra_repeat_overlap = excess / (n_copies * n_repeating);
}
if (step == MEASURE) if (step == MEASURE)
{ {
@ -568,6 +579,8 @@ apply_stch (const hb_ot_shape_plan_t *plan,
for (unsigned int n = 0; n < repeat; n++) for (unsigned int n = 0; n < repeat; n++)
{ {
x_offset -= extents.width; x_offset -= extents.width;
if (n > 0)
x_offset += extra_repeat_overlap;
pos[k - 1].x_offset = x_offset; pos[k - 1].x_offset = x_offset;
/* Append copy. */ /* Append copy. */
--j; --j;