diff options
| author | gingerBill <bill@gingerbill.org> | 2025-06-20 09:17:02 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-06-20 09:17:02 +0100 |
| commit | 9a328e1c97c5fa427051182c9deea784323c00ca (patch) | |
| tree | b744d5b4551d3b31fc7b14f957dab6704a441eb4 | |
| parent | c3e9b16d5a5469e0041536f3c646a200be026856 (diff) | |
Use multiple return values where possible
| -rw-r--r-- | vendor/kb_text_shape/kb_text_shape_procs.odin | 116 |
1 files changed, 72 insertions, 44 deletions
diff --git a/vendor/kb_text_shape/kb_text_shape_procs.odin b/vendor/kb_text_shape/kb_text_shape_procs.odin index ab8e885a4..bd598d5c4 100644 --- a/vendor/kb_text_shape/kb_text_shape_procs.odin +++ b/vendor/kb_text_shape/kb_text_shape_procs.odin @@ -18,59 +18,77 @@ import "core:mem" @(default_calling_convention="c", link_prefix="kbts_", require_results) foreign lib { - FontIsValid :: proc(Font: ^font) -> b32 --- - ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- - ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- - PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> b32 --- - SizeOfShapeState :: proc(Font: ^font) -> un --- - - PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- - ResetShapeState :: proc(State: ^shape_state) --- - - ShapeConfig :: proc(Font: ^font, Script: script, Language: language) -> shape_config --- - ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- - ScriptIsComplex :: proc(Script: script) -> b32 --- - - Shape :: proc(State: ^shape_state, Config: ^shape_config, - MainDirection, RunDirection: direction, - Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- - - Cursor :: proc(Direction: direction) -> cursor --- - PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- - BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- - BreakStateIsValid :: proc(State: ^break_state) -> c.int --- - BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- - BreakFlush :: proc(State: ^break_state) --- - Break :: proc(State: ^break_state, Break: ^break_type) -> c.int --- - DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- - CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- - InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- + FontIsValid :: proc(Font: ^font) -> b32 --- + SizeOfShapeState :: proc(Font: ^font) -> un --- + + ResetShapeState :: proc(State: ^shape_state) --- + + ShapeConfig :: proc(Font: ^font, Script: script, Language: language) -> shape_config --- + ShaperIsComplex :: proc(Shaper: shaper) -> b32 --- + ScriptIsComplex :: proc(Script: script) -> b32 --- + + Shape :: proc(State: ^shape_state, Config: ^shape_config, + MainDirection, RunDirection: direction, + Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32) -> c.int --- + + Cursor :: proc(Direction: direction) -> cursor --- + BeginBreak :: proc(State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) --- + BreakStateIsValid :: proc(State: ^break_state) -> b32 --- + BreakAddCodepoint :: proc(State: ^break_state, Codepoint: rune, PositionIncrement: u32, EndOfText: c.int) --- + BreakFlush :: proc(State: ^break_state) --- + Break :: proc(State: ^break_state, Break: ^break_type) -> b32 --- + CodepointToGlyph :: proc(Font: ^font, Codepoint: rune) -> glyph --- + InferScript :: proc(Direction: ^direction, Script: ^script, GlyphScript: script) --- } @(require_results) -PlaceShapeStateFromSlice :: proc "c" (Memory: []byte) -> ^shape_state { - return PlaceShapeState(raw_data(Memory), un(len(Memory))) +PlaceShapeState :: proc "c" (Memory: []byte) -> ^shape_state { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PlaceShapeState :: proc(Address: rawptr, Size: un) -> ^shape_state --- + } + + return kbts_PlaceShapeState(raw_data(Memory), un(len(Memory))) } @(require_results) -DecodeUtf8String :: proc "c" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { - Decode := DecodeUtf8(raw_data(String), len(String)) - Codepoint, SourceCharactersConsumed, Valid = Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid - return +DecodeUtf8 :: proc "contextless" (String: string) -> (Codepoint: rune, SourceCharactersConsumed: u32, Valid: b32) { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_DecodeUtf8 :: proc(Utf8: [^]byte, Length: uint) -> decode --- + } + + Decode := kbts_DecodeUtf8(raw_data(String), len(String)) + return Decode.Codepoint, Decode.SourceCharactersConsumed, Decode.Valid } @(require_results) -ReadFontHeaderFromSlice :: proc "c" (Font: ^font, Data: []byte) -> un { - return ReadFontHeader(Font, raw_data(Data), un(len(Data))) +ReadFontHeader :: proc "c" (Font: ^font, Data: []byte) -> un { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_ReadFontHeader :: proc(Font: ^font, Data: rawptr, Size: un) -> un --- + } + + return kbts_ReadFontHeader(Font, raw_data(Data), un(len(Data))) } @(require_results) -ReadFontDataFromSlice :: proc "c" (Font: ^font, Scratch: []byte) -> un { - return ReadFontData(Font, raw_data(Scratch), un(len(Scratch))) +ReadFontData :: proc "c" (Font: ^font, Scratch: []byte) -> un { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_ReadFontData :: proc(Font: ^font, Scratch: rawptr, ScratchSize: un) -> un --- + } + + return kbts_ReadFontData(Font, raw_data(Scratch), un(len(Scratch))) } @(require_results) -PostReadFontInitializeFromSlice :: proc "c" (Font: ^font, Memory: []byte) -> b32 { - return PostReadFontInitialize(Font, raw_data(Memory), un(len(Memory))) +PostReadFontInitialize :: proc "c" (Font: ^font, Memory: []byte) -> b32 { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PostReadFontInitialize :: proc(Font: ^font, Memory: rawptr, MemorySize: un) -> b32 --- + } + + return kbts_PostReadFontInitialize(Font, raw_data(Memory), un(len(Memory))) } @(require_results) @@ -81,9 +99,9 @@ FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, } copy(ClonedData, Data) - ScratchSize := ReadFontHeaderFromSlice(&Result, ClonedData) + ScratchSize := ReadFontHeader(&Result, ClonedData) Scratch := mem.make_aligned([]byte, ScratchSize, 16, allocator) or_return - MemorySize := ReadFontDataFromSlice(&Result, Scratch) + MemorySize := ReadFontData(&Result, Scratch) Memory := Scratch if MemorySize > ScratchSize { @@ -94,7 +112,7 @@ FontFromMemory :: proc(Data: []byte, allocator: mem.Allocator) -> (Result: font, delete(Memory, allocator) } - _ = PostReadFontInitializeFromSlice(&Result, Memory) + _ = PostReadFontInitialize(&Result, Memory) return } @@ -108,9 +126,19 @@ FreeFont :: proc(Font: ^font, allocator: mem.Allocator) { CreateShapeState :: proc(Font: ^font, allocator: mem.Allocator) -> (Result: ^shape_state, Err: mem.Allocator_Error) { Size := SizeOfShapeState(Font) Memory := mem.make_aligned([]byte, Size, 16, allocator) or_return - Result = PlaceShapeStateFromSlice(Memory) + Result = PlaceShapeState(Memory) return } FreeShapeState :: proc(State: ^shape_state, allocator: mem.Allocator) { free(State, allocator) -}
\ No newline at end of file +} + +@(require_results) +PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph) -> (X, Y: i32) { + @(default_calling_convention="c", require_results) + foreign lib { + kbts_PositionGlyph :: proc(Cursor: ^cursor, Glyph: ^glyph, X, Y: ^i32) --- + } + kbts_PositionGlyph(Cursor, Glyph, &X, &Y) + return +} |