core: Improve spacing of device font letters (close #14185)
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
num_frames = 1
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 187 KiB |
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 360 KiB After Width: | Height: | Size: 359 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 328 KiB After Width: | Height: | Size: 327 KiB |
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 214 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |