aboutsummaryrefslogtreecommitdiff
path: root/vendor/kb_text_shape/doc.odin
blob: 685b0d5a0a2b188faffd067ee2b6a33f5c3e2a83 (plain)
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
/*
	Bindings for [[ Jimmy Lefevre's Text Shape ; https://github.com/JimmyLefevre/kb ]] Unicode text segmentation and OpenType shaping.

	Example:
		// Basic
		OdinAllocator := context.allocator

		FontData, _ := os.read_entire_file("myfonts.ttf", OdinAllocator)

		Context := kbts.CreateShapeContext(kbts.AllocatorFromOdinAllocator(&OdinAllocator))
		kbts.ShapePushFontFromMemory(Context, FontData, 0)

		kbts.ShapeBegin(Context, .DONT_KNOW, .DONT_KNOW)
		kbts.ShapeUtf8(Context, "Let's shape something!", .CODEPOINT_INDEX)
		kbts.ShapeEnd(Context)

		CursorX, CursorY: c.int = 0, 0
		for Run in kbts.ShapeRun(Context) {
			Run := Run
			for Glyph in kbts.GlyphIteratorNext(&Run.Glyphs) {
				GlyphX := CursorX + Glyph.OffsetX
				GlyphY := CursorY + Glyph.OffsetY

				DisplayGlyph(Glyph.Id, GlyphX, GlyphY)

				CursorX += Glyph.AdvanceX
				CursorY += Glyph.AdvanceY
			}
		}

	Example:
		// Font collections
		OdinAllocator := context.allocator

		FontData, _ := os.read_entire_file("myfonts.ttf", OdinAllocator)
		Font := kbts.FontFromMemory(FontData, 0, kbts.AllocatorFromOdinAllocator(&OdinAllocator))

		_ = kbts.ShapePushFont(Context, &Font)

		FontCount := kbts.FontCount(FontData)
		for FontIndex in 1..<FontCount {
			kbts.ShapePushFontFromMemory(Context, FontData, FontIndex)
		}

	Example:
		kbts.ShapeBegin(Context, .DONT_KNOW, .DONT_KNOW)

		kbts.ShapePushFeature(Context, .kern, 0)
		kbts.ShapeUtf8(Context, "Without kerning", .CODEPOINT_INDEX)
		_ = kbts.ShapePopFeature(Context, .kern)

		kbts.ShapeUtf8(Context, "With kerning", .CODEPOINT_INDEX)

		kbts.ShapeEnd(Context)

*/
package vendor_kb_text_shape