core: Improve spacing of device font letters (close #14185)

This commit is contained in:
MrCheeze 2023-11-28 00:41:43 -05:00 committed by Nathan Adams
parent 9e87de1089
commit 0f6dae56b5
23 changed files with 119 additions and 2 deletions

View File

@ -28,6 +28,20 @@ pub fn round_down_to_pixel(t: Twips) -> Twips {
Twips::from_pixels(t.to_pixels().floor())
}
pub fn round_to_pixel(t: Twips) -> Twips {
Twips::from_pixels(t.to_pixels().round())
}
pub fn round_to_pixel_half_even(t: Twips) -> Twips {
let mod2 = t.to_pixels() % 2.0;
let mod2 = if mod2 < 0.0 { mod2 + 2.0 } else { mod2 };
if mod2 <= 0.5 || (mod2 >= 1.0 && mod2 < 1.5) {
Twips::from_pixels(t.to_pixels().floor())
} else {
Twips::from_pixels(t.to_pixels().ceil())
}
}
/// Parameters necessary to evaluate a font.
#[derive(Copy, Clone, Debug)]
pub struct EvalParameters {
@ -356,8 +370,19 @@ impl<'gc> Font<'gc> {
let next_char = next_char.unwrap_or(char::REPLACEMENT_CHARACTER);
advance += self.get_kerning_offset(c, next_char);
}
let twips_advance =
Twips::new((advance.get() as f32 * scale) as i32) + params.letter_spacing;
let twips_advance = if self.font_type() == FontType::Device {
let unspaced_advance =
round_to_pixel(Twips::new((advance.get() as f32 * scale) as i32));
let spaced_advance =
unspaced_advance + round_to_pixel_half_even(params.letter_spacing);
if spaced_advance > Twips::ZERO {
spaced_advance
} else {
unspaced_advance
}
} else {
Twips::new((advance.get() as f32 * scale) as i32) + params.letter_spacing
};
glyph_func(pos, &transform, glyph, twips_advance, x);

View File

@ -0,0 +1,91 @@
_level0.device
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="2" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
51
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="2" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
43
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="2" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
51
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="2" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
94
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="2" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
137
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="3" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
74
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="3" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
45
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="3" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
78
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="3" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
121
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="3" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
164
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="4" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
61
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="4" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
62
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="4" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
95
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="4" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
138
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="4" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
181
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="5" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
60
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="5" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
92
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="5" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
126
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="5" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
169
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="5" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
212
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="6" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
85
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="6" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
108
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="6" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
151
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="6" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
194
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="6" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
237
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="7" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
104
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="7" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
127
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="7" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
170
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="7" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
213
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="7" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
256
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="8" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
126
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="8" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
151
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="8" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
194
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="8" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
237
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="8" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
280
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="9" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
154
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="9" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
179
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="9" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
222
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="9" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
265
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="9" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
308
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="10" COLOR="#000000" LETTERSPACING="-2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
164
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="10" COLOR="#000000" LETTERSPACING="-1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
207
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="10" COLOR="#000000" LETTERSPACING="0" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
250
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="10" COLOR="#000000" LETTERSPACING="1" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
293
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Noto Sans" SIZE="10" COLOR="#000000" LETTERSPACING="2" KERNING="0">THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG</FONT></P></TEXTFORMAT>
336

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
num_frames = 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 KiB

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB