Mercurial > games > semicongine
comparison tests/test_font.nim @ 418:009d93d69170
add: correct version of text-alignment, and a few improvments
| author | Sam <sam@basx.dev> |
|---|---|
| date | Sun, 28 Jan 2024 21:26:39 +0700 |
| parents | b032768df631 |
| children | 91e018270832 |
comparison
equal
deleted
inserted
replaced
| 417:b032768df631 | 418:009d93d69170 |
|---|---|
| 1 import std/unicode | 1 import std/unicode |
| 2 | 2 |
| 3 import semicongine | 3 import semicongine |
| 4 | |
| 4 | 5 |
| 5 proc main() = | 6 proc main() = |
| 6 # setup engine | 7 # setup engine |
| 7 var engine = initEngine("Test fonts") | 8 var engine = initEngine("Test fonts") |
| 8 engine.initRenderer([]) | 9 engine.initRenderer([]) |
| 9 | 10 |
| 10 # build scene | 11 # build scene |
| 11 var scene = Scene(name: "main") | 12 var scene = Scene(name: "main") |
| 12 # var font = loadFont("DejaVuSans.ttf", lineHeightPixels=90'f32, charset="abcdefghijklmnopqrstuvwxyz ".toRunes) | 13 # var font = loadFont("DejaVuSans.ttf", lineHeightPixels=90'f32, charset="abcdefghijklmnopqrstuvwxyz ".toRunes) |
| 13 var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 250'f32) | 14 var font = loadFont("DejaVuSans.ttf", lineHeightPixels = 210'f32) |
| 14 var textbox = initText(32, font, "_", color = newVec4f(1, 0, 0, 1)) | 15 var main_text = font.initText("", 32, color = newVec4f(1, 0.15, 0.15, 1), scale = 0.001) |
| 15 let fontscale = 0.001 | 16 var help_text = font.initText("""Controls |
| 16 scene.add textbox | 17 |
| 17 textbox.mesh.transform = scale(fontscale, fontscale) | 18 Horizontal alignment: |
| 19 F1: Left | |
| 20 F2: Center | |
| 21 F3: Right | |
| 22 Vertical alignment: | |
| 23 F4: Top | |
| 24 F5: Center | |
| 25 F6: Bottom""", scale = 0.0001, position = newVec2f(0, 0), horizontalAlignment = Left, verticalAlignment = Top) | |
| 26 scene.add main_text | |
| 27 scene.add help_text | |
| 18 engine.loadScene(scene) | 28 engine.loadScene(scene) |
| 19 | 29 |
| 20 let cursor = Rune('_') | |
| 21 while engine.updateInputs() == Running and not engine.keyIsDown(Escape): | 30 while engine.updateInputs() == Running and not engine.keyIsDown(Escape): |
| 22 if engine.windowWasResized(): | 31 if engine.windowWasResized(): |
| 23 var winSize = engine.getWindow().size | 32 var winSize = engine.getWindow().size |
| 24 textbox.mesh.transform = scale(fontscale * (winSize[1] / winSize[0]), fontscale) | 33 main_text.aspect_ratio = winSize[0] / winSize[1] |
| 25 if textbox.text.len < textbox.maxLen - 1: | 34 help_text.aspect_ratio = winSize[0] / winSize[1] |
| 35 help_text.position = newVec2f(-0.99, -0.99) | |
| 36 | |
| 37 # add character | |
| 38 if main_text.text.len < main_text.maxLen - 1: | |
| 26 for c in [Key.A, Key.B, Key.C, Key.D, Key.E, Key.F, Key.G, Key.H, Key.I, | 39 for c in [Key.A, Key.B, Key.C, Key.D, Key.E, Key.F, Key.G, Key.H, Key.I, |
| 27 Key.J, Key.K, Key.L, Key.M, Key.N, Key.O, Key.P, Key.Q, Key.R, Key.S, | 40 Key.J, Key.K, Key.L, Key.M, Key.N, Key.O, Key.P, Key.Q, Key.R, Key.S, |
| 28 Key.T, Key.U, Key.V, Key.W, Key.X, Key.Y, Key.Z]: | 41 Key.T, Key.U, Key.V, Key.W, Key.X, Key.Y, Key.Z]: |
| 29 if engine.keyWasPressed(c): | 42 if engine.keyWasPressed(c): |
| 30 if engine.keyIsDown(ShiftL) or engine.keyIsDown(ShiftR): | 43 if engine.keyIsDown(ShiftL) or engine.keyIsDown(ShiftR): |
| 31 textbox.text = textbox.text[0 ..< ^1] & ($c).toRunes & cursor | 44 main_text.text = main_text.text & ($c).toRunes |
| 32 else: | 45 else: |
| 33 textbox.text = textbox.text[0 ..< ^1] & ($c).toRunes[0].toLower() & cursor | 46 main_text.text = main_text.text & ($c).toRunes[0].toLower() |
| 34 if engine.keyWasPressed(Enter): | 47 if engine.keyWasPressed(Enter): |
| 35 textbox.text = textbox.text[0 ..< ^1] & Rune('\n') & cursor | 48 main_text.text = main_text.text & Rune('\n') |
| 36 if engine.keyWasPressed(Space): | 49 if engine.keyWasPressed(Space): |
| 37 textbox.text = textbox.text[0 ..< ^1] & Rune(' ') & cursor | 50 main_text.text = main_text.text & Rune(' ') |
| 38 if engine.keyWasPressed(Backspace) and textbox.text.len > 1: | 51 |
| 39 textbox.text = textbox.text[0 ..< ^2] & cursor | 52 # remove character |
| 53 if engine.keyWasPressed(Backspace) and main_text.text.len > 0: | |
| 54 main_text.text = main_text.text[0 ..< ^1] | |
| 55 | |
| 56 # alignemtn with F-keys | |
| 57 if engine.keyWasPressed(F1): main_text.horizontalAlignment = Left | |
| 58 elif engine.keyWasPressed(F2): main_text.horizontalAlignment = Center | |
| 59 elif engine.keyWasPressed(F3): main_text.horizontalAlignment = Right | |
| 60 elif engine.keyWasPressed(F4): main_text.verticalAlignment = Top | |
| 61 elif engine.keyWasPressed(F5): main_text.verticalAlignment = Center | |
| 62 elif engine.keyWasPressed(F6): main_text.verticalAlignment = Bottom | |
| 63 | |
| 64 main_text.text = main_text.text & Rune('_') | |
| 65 main_text.refresh() | |
| 66 main_text.text = main_text.text[0 ..< ^1] | |
| 67 help_text.refresh() | |
| 40 engine.renderScene(scene) | 68 engine.renderScene(scene) |
| 41 engine.destroy() | 69 engine.destroy() |
| 42 | 70 |
| 43 | 71 |
| 44 when isMainModule: | 72 when isMainModule: |
