Skip to content

Commit 8e195a3

Browse files
committed
[GPOS] Disable split-kerning
harfbuzz/harfbuzz@88798ee8b
1 parent d214427 commit 8e195a3

File tree

3 files changed

+18
-80
lines changed

3 files changed

+18
-80
lines changed

src/ot/position.rs

Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -237,84 +237,7 @@ impl Apply for PairAdjustment<'_> {
237237
let flags = matrix.value_format_flags();
238238
let len2 = flags.1.len();
239239

240-
// Isolate simple kerning and apply it half to each side.
241-
// Results in better cursor positioning / underline drawing.
242-
if len2 == 0 {
243-
let dir = ctx.buffer.direction;
244-
let mut mask = if dir.is_horizontal() {
245-
ValueFormatFlags::x_advance()
246-
} else {
247-
ValueFormatFlags::y_advance()
248-
};
249-
250-
if dir.is_backward() {
251-
mask |= mask >> 2;
252-
}
253-
254-
mask |= mask << 4;
255-
256-
if (flags.0.bits() & !mask) == 1 {
257-
return bail(ctx, records, len2);
258-
} else {
259-
let mut dummy_pos = GlyphPosition::default();
260-
if records.0.apply_to_pos(ctx, &mut dummy_pos) {
261-
let src = &mut dummy_pos;
262-
let (arr1, arr2) = ctx.buffer.pos.split_at_mut(second_glyph_index);
263-
let dst1 = &mut arr1[first_glyph_index];
264-
let dst2 = &mut arr2[0];
265-
266-
let (
267-
src_advance,
268-
dst1_advance,
269-
dst2_advance,
270-
src_offset,
271-
dst1_offset,
272-
dst2_offset,
273-
) = if dir.is_horizontal() {
274-
(
275-
&mut src.x_advance,
276-
&mut dst1.x_advance,
277-
&mut dst2.x_advance,
278-
&mut src.x_offset,
279-
&mut dst1.x_offset,
280-
&mut dst2.x_offset,
281-
)
282-
} else {
283-
(
284-
&mut src.y_advance,
285-
&mut dst1.y_advance,
286-
&mut dst2.y_advance,
287-
&mut src.y_offset,
288-
&mut dst1.y_offset,
289-
&mut dst2.y_offset,
290-
)
291-
};
292-
293-
let kern = *src_advance;
294-
let kern1 = kern >> 1;
295-
let kern2 = kern - kern1;
296-
297-
if !dir.is_backward() {
298-
*dst1_advance += kern1;
299-
*dst2_advance += kern2;
300-
*dst2_offset += kern2;
301-
} else {
302-
*dst1_advance += kern1;
303-
*dst1_offset += *src_offset - kern2;
304-
*dst2_advance += kern2;
305-
}
306-
307-
let applied_first = kern != 0;
308-
let applied_second = kern != 0;
309-
310-
return success(ctx, applied_first, applied_second, len2);
311-
} else {
312-
return boring(ctx, len2);
313-
}
314-
}
315-
} else {
316-
return bail(ctx, records, len2);
317-
}
240+
return bail(ctx, records, len2);
318241
}
319242
};
320243

tests/shaping/aots.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,21 @@ fn gpos2_2_004() {
696696
);
697697
}
698698

699+
#[test]
700+
fn gpos2_2_005() {
701+
assert_eq!(
702+
shape(
703+
"tests/fonts/aots/gpos2_2_font5.otf",
704+
"\u{0012}\u{0012}\u{0012}\u{0012}",
705+
"--features=\"test\" --single-par --no-clusters --no-glyph-names --ned",
706+
),
707+
"18@-100,0|\
708+
18@1400,0|\
709+
18@2900,0|\
710+
18@4500,0"
711+
);
712+
}
713+
699714
#[test]
700715
fn gpos3_002() {
701716
assert_eq!(

tests/shaping/in_house.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7481,8 +7481,8 @@ fn positioning_features_001() {
74817481
"\u{0041}\u{0056}",
74827482
"",
74837483
),
7484-
"A=0+665|\
7485-
V=1@-40,0+635"
7484+
"A=0+625|\
7485+
V=1+675"
74867486
);
74877487
}
74887488

0 commit comments

Comments
 (0)