forked from gen2brain/raylib-go
/
text.go
166 lines (149 loc) · 5.18 KB
/
text.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package rl
/*
#include "raylib.h"
#include <stdlib.h>
*/
import "C"
import "unsafe"
// cptr returns C pointer
func (c *CharInfo) cptr() *C.CharInfo {
return (*C.CharInfo)(unsafe.Pointer(c))
}
// cptr returns C pointer
func (s *Font) cptr() *C.Font {
return (*C.Font)(unsafe.Pointer(s))
}
// GetFontDefault - Get the default Font
func GetFontDefault() Font {
ret := C.GetFontDefault()
v := newFontFromPointer(unsafe.Pointer(&ret))
return v
}
// LoadFont - Load a Font image into GPU memory (VRAM)
func LoadFont(fileName string) Font {
cfileName := C.CString(fileName)
defer C.free(unsafe.Pointer(cfileName))
ret := C.LoadFont(cfileName)
v := newFontFromPointer(unsafe.Pointer(&ret))
return v
}
// LoadFontEx - Load Font from file with extended parameters
func LoadFontEx(fileName string, fontSize int32, fontChars *int32, charsCount int32) Font {
cfileName := C.CString(fileName)
defer C.free(unsafe.Pointer(cfileName))
cfontSize := (C.int)(fontSize)
cfontChars := (*C.int)(unsafe.Pointer(fontChars))
ccharsCount := (C.int)(charsCount)
ret := C.LoadFontEx(cfileName, cfontSize, cfontChars, ccharsCount)
v := newFontFromPointer(unsafe.Pointer(&ret))
return v
}
// LoadFontFromImage - Loads an Image font file (XNA style)
func LoadFontFromImage(image Image, key Color, firstChar int32) Font {
cimage := image.cptr()
ckey := key.cptr()
cfirstChar := (C.int)(firstChar)
ret := C.LoadFontFromImage(*cimage, *ckey, cfirstChar)
v := newFontFromPointer(unsafe.Pointer(&ret))
return v
}
// LoadFontData - Load font data for further use
func LoadFontData(fileName string, fontSize int32, fontChars *int32, charsCount, typ int32) *CharInfo {
cfileName := C.CString(fileName)
defer C.free(unsafe.Pointer(cfileName))
cfontSize := (C.int)(fontSize)
cfontChars := (*C.int)(unsafe.Pointer(fontChars))
ccharsCount := (C.int)(charsCount)
ctype := (C.int)(typ)
ret := C.LoadFontData(cfileName, cfontSize, cfontChars, ccharsCount, ctype)
v := newCharInfoFromPointer(unsafe.Pointer(&ret))
return &v
}
// UnloadFont - Unload Font from GPU memory (VRAM)
func UnloadFont(font Font) {
cfont := font.cptr()
C.UnloadFont(*cfont)
}
// DrawText - Draw text (using default font)
func DrawText(text string, posX int32, posY int32, fontSize int32, color Color) {
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
cposX := (C.int)(posX)
cposY := (C.int)(posY)
cfontSize := (C.int)(fontSize)
ccolor := color.cptr()
C.DrawText(ctext, cposX, cposY, cfontSize, *ccolor)
}
// DrawTextEx - Draw text using Font and additional parameters
func DrawTextEx(font Font, text string, position Vector2, fontSize float32, spacing float32, tint Color) {
cfont := font.cptr()
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
cposition := position.cptr()
cfontSize := (C.float)(fontSize)
cspacing := (C.float)(spacing)
ctint := tint.cptr()
C.DrawTextEx(*cfont, ctext, *cposition, cfontSize, cspacing, *ctint)
}
// DrawTextRec - Draw text using font inside rectangle limits
func DrawTextRec(font Font, text string, rec Rectangle, fontSize, spacing float32, wordWrap bool, tint Color) {
cfont := font.cptr()
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
crec := rec.cptr()
cfontSize := (C.float)(fontSize)
cspacing := (C.float)(spacing)
cwordWrap := (C.bool)(wordWrap)
ctint := tint.cptr()
C.DrawTextRec(*cfont, ctext, *crec, cfontSize, cspacing, cwordWrap, *ctint)
}
// DrawTextRecEx - Draw text using font inside rectangle limits with support for text selection
func DrawTextRecEx(font Font, text string, rec Rectangle, fontSize, spacing float32, wordWrap bool, tint Color, selectStart, selectLength int32, selectText, selectBack Color) {
cfont := font.cptr()
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
crec := rec.cptr()
cfontSize := (C.float)(fontSize)
cspacing := (C.float)(spacing)
cwordWrap := (C.bool)(wordWrap)
ctint := tint.cptr()
cselectStart := (C.int)(selectStart)
cselectLength := (C.int)(selectLength)
cselectText := selectText.cptr()
cselectBack := selectBack.cptr()
C.DrawTextRecEx(*cfont, ctext, *crec, cfontSize, cspacing, cwordWrap, *ctint, cselectStart, cselectLength, *cselectText, *cselectBack)
}
// MeasureText - Measure string width for default font
func MeasureText(text string, fontSize int32) int32 {
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
cfontSize := (C.int)(fontSize)
ret := C.MeasureText(ctext, cfontSize)
v := (int32)(ret)
return v
}
// MeasureTextEx - Measure string size for Font
func MeasureTextEx(font Font, text string, fontSize float32, spacing float32) Vector2 {
cfont := font.cptr()
ctext := C.CString(text)
defer C.free(unsafe.Pointer(ctext))
cfontSize := (C.float)(fontSize)
cspacing := (C.float)(spacing)
ret := C.MeasureTextEx(*cfont, ctext, cfontSize, cspacing)
v := newVector2FromPointer(unsafe.Pointer(&ret))
return v
}
// GetGlyphIndex - Returns index position for a unicode character on spritefont
func GetGlyphIndex(font Font, character int32) int32 {
cfont := font.cptr()
ccharacter := (C.int)(character)
ret := C.GetGlyphIndex(*cfont, ccharacter)
v := (int32)(ret)
return v
}
// DrawFPS - Shows current FPS
func DrawFPS(posX int32, posY int32) {
cposX := (C.int)(posX)
cposY := (C.int)(posY)
C.DrawFPS(cposX, cposY)
}