Files
ab_glyph_rasterizer
adler
adler32
andrew
bitflags
bytemuck
byteorder
calloop
cfg_if
color_quant
crc32fast
crossbeam_channel
crossbeam_deque
crossbeam_epoch
crossbeam_utils
deflate
dlib
downcast_rs
draw_state
either
event_loop
float
fnv
gfx
gfx_core
gfx_device_gl
gfx_gl
gfx_graphics
gfx_texture
gif
gl
glutin
api
platform
platform_impl
glutin_egl_sys
glutin_glx_sys
glutin_window
graphics
glyph_cache
graphics_api_version
image
codecs
bmp
hdr
ico
jpeg
pnm
tga
webp
imageops
io
math
utils
input
instant
interpolation
iovec
jpeg_decoder
lazy_static
lazycell
libc
unix
libloading
lock_api
log
maybe_uninit
memchr
memmap2
memoffset
miniz_oxide
mio
deprecated
net
sys
mio_extras
net2
nix
net
sys
nom
bits
branch
bytes
character
combinator
multi
number
sequence
num_cpus
num_integer
num_iter
num_rational
num_traits
once_cell
osmesa_sys
owned_ttf_parser
parking_lot
parking_lot_core
percent_encoding
piston
piston_window
png
proc_macro2
quote
raw_window_handle
rayon
collections
compile_fail
iter
chain.rschunks.rscloned.rscopied.rsempty.rsenumerate.rsextend.rsfilter.rsfilter_map.rsfind.rsflat_map.rsflat_map_iter.rsflatten.rsflatten_iter.rsfold.rsfor_each.rsfrom_par_iter.rsinspect.rsinterleave.rsinterleave_shortest.rsintersperse.rslen.rsmap.rsmap_with.rsmod.rsmultizip.rsnoop.rsonce.rspanic_fuse.rspar_bridge.rspositions.rsproduct.rsreduce.rsrepeat.rsrev.rsskip.rssplitter.rsstep_by.rssum.rstake.rstry_fold.rstry_reduce.rstry_reduce_with.rsunzip.rsupdate.rswhile_some.rszip.rszip_eq.rs
slice
rayon_core
compile_fail
join
scope
sleep
spawn
thread_pool
read_color
rusttype
same_file
scoped_threadpool
scoped_tls
scopeguard
serde
de
private
ser
serde_derive
shader_version
shaders_graphics2d
shared_library
slab
smallvec
smithay_client_toolkit
data_device
primary_selection
seat
shell
shm
window
spin_sleep
syn
attr.rsawait.rsbigint.rsbuffer.rscustom_keyword.rscustom_punctuation.rsdata.rsderive.rsdiscouraged.rserror.rsexport.rsexpr.rsext.rsfile.rsgenerics.rsgroup.rsident.rsitem.rslib.rslifetime.rslit.rslookahead.rsmac.rsmacros.rsop.rsparse.rsparse_macro_input.rsparse_quote.rspat.rspath.rsprint.rspunctuated.rsreserved.rssealed.rsspan.rsspanned.rsstmt.rsthread.rstoken.rstt.rsty.rsverbatim.rswhitespace.rs
texture
tiff
ttf_parser
tables
unicode_xid
vecmath
viewport
walkdir
wayland_client
wayland_commons
wayland_cursor
wayland_egl
wayland_protocols
wayland_sys
weezl
window
winit
platform
platform_impl
linux
wayland
event_loop
seat
keyboard
pointer
text_input
touch
window
x11
x11_dl
xcursor
xdg
xml
reader
parser
writer
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
// https://docs.microsoft.com/en-us/typography/opentype/spec/vorg use crate::GlyphId; use crate::parser::{Stream, FromData, LazyArray16}; #[derive(Clone, Copy)] struct VertOriginYMetrics { glyph_index: GlyphId, vert_origin_y: i16, } impl FromData for VertOriginYMetrics { const SIZE: usize = 4; #[inline] fn parse(data: &[u8]) -> Option<Self> { let mut s = Stream::new(data); Some(VertOriginYMetrics { glyph_index: s.read()?, vert_origin_y: s.read()?, }) } } #[derive(Clone, Copy)] pub struct Table<'a> { default_y: i16, origins: LazyArray16<'a, VertOriginYMetrics>, } impl<'a> Table<'a> { pub fn parse(data: &'a [u8]) -> Option<Self> { let mut s = Stream::new(data); let version: u32 = s.read()?; if version != 0x00010000 { return None; } let default_y: i16 = s.read()?; let count: u16 = s.read()?; let origins = s.read_array16(count)?; Some(Table { default_y, origins, }) } pub fn glyph_y_origin(&self, glyph_id: GlyphId) -> i16 { self.origins.binary_search_by(|m| m.glyph_index.cmp(&glyph_id)) .map(|(_, m)| m.vert_origin_y) .unwrap_or(self.default_y) } }