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())
|
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.
|
/// Parameters necessary to evaluate a font.
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
pub struct EvalParameters {
|
pub struct EvalParameters {
|
||||||
|
@ -356,8 +370,19 @@ impl<'gc> Font<'gc> {
|
||||||
let next_char = next_char.unwrap_or(char::REPLACEMENT_CHARACTER);
|
let next_char = next_char.unwrap_or(char::REPLACEMENT_CHARACTER);
|
||||||
advance += self.get_kerning_offset(c, next_char);
|
advance += self.get_kerning_offset(c, next_char);
|
||||||
}
|
}
|
||||||
let twips_advance =
|
let twips_advance = if self.font_type() == FontType::Device {
|
||||||
Twips::new((advance.get() as f32 * scale) as i32) + params.letter_spacing;
|
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);
|
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 |