Working example
This commit is contained in:
62
sdl3/ttf/sdl3_textengine.odin
Normal file
62
sdl3/ttf/sdl3_textengine.odin
Normal file
@@ -0,0 +1,62 @@
|
||||
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),
|
||||
)
|
||||
Reference in New Issue
Block a user