Merge pull request #192 from behdad/jfkthame-stch
[issue 191] Make apply_stch() give a more precise fit
This commit is contained in:
commit
dee0fbf9e2
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue