aboutsummaryrefslogtreecommitdiff
path: root/vendor
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2025-06-20 09:17:02 +0100
committergingerBill <bill@gingerbill.org>2025-06-20 09:17:02 +0100
commit9a328e1c97c5fa427051182c9deea784323c00ca (patch)
treeb744d5b4551d3b31fc7b14f957dab6704a441eb4 /vendor
parentc3e9b16d5a5469e0041536f3c646a200be026856 (diff)
Use multiple return values where possible
Diffstat (limited to 'vendor')
-rw-r--r--vendor/kb_text_shape/kb_text_shape_procs.odin116
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
+}