63 lines
1.3 KiB
Odin
63 lines
1.3 KiB
Odin
package sdl3_ttf
|
|
|
|
import "core:c"
|
|
import SDL "vendor:sdl3"
|
|
|
|
DrawCommand :: enum c.int {
|
|
NOOP,
|
|
FILL,
|
|
COPY,
|
|
}
|
|
|
|
FillOperation :: struct {
|
|
cmd: DrawCommand,
|
|
rect: SDL.Rect,
|
|
}
|
|
|
|
CopyOperation :: struct {
|
|
cmd: DrawCommand,
|
|
text_offset: c.int,
|
|
glyph_font: ^Font,
|
|
glyph_index: u32,
|
|
src: SDL.Rect,
|
|
dst: SDL.Rect,
|
|
reserved: rawptr,
|
|
}
|
|
|
|
DrawOperation :: struct #raw_union {
|
|
cmd: DrawCommand,
|
|
fill: FillOperation,
|
|
copy: CopyOperation,
|
|
}
|
|
|
|
TextLayout :: struct {}
|
|
|
|
TextData :: struct {
|
|
font: ^Font,
|
|
color: SDL.FColor,
|
|
needs_layout_update: bool,
|
|
layout: ^TextLayout,
|
|
x, y: c.int,
|
|
w, h: c.int,
|
|
num_ops: c.int,
|
|
ops: [^]DrawOperation `fmt:"v,num_ops"`,
|
|
num_clusters: c.int,
|
|
clusters: [^]SubString `fmt:"v,num_clusters"`,
|
|
props: SDL.PropertiesID,
|
|
needs_engine_update: bool,
|
|
engine: ^TextEngine,
|
|
engine_text: rawptr,
|
|
}
|
|
|
|
TextEngine :: struct {
|
|
version: u32,
|
|
userdata: rawptr,
|
|
CreateText: proc "c" (userdata: rawptr, text: ^Text) -> bool,
|
|
DestroyText: proc "c" (userdata: rawptr, Textext: ^Text),
|
|
}
|
|
|
|
#assert(
|
|
(size_of(TextEngine) == 16 && size_of(rawptr) == 4) ||
|
|
(size_of(TextEngine) == 32 && size_of(rawptr) == 8),
|
|
)
|