891
|
1 import std/unicode
|
|
2
|
|
3 import semicongine
|
|
4
|
895
|
5 var counter = 0
|
|
6 var counterText: Text
|
|
7
|
|
8 proc click(panel: var Panel, buttons: set[MouseButton]) =
|
|
9 if buttons.contains(Mouse1):
|
|
10 counter.inc
|
|
11 if buttons.contains(Mouse3):
|
|
12 counter.dec
|
|
13 counterText.text = $counter
|
|
14 proc enter(panel: var Panel) =
|
|
15 panel.size = newVec2f(0.22, 0.22)
|
|
16 proc leave(panel: var Panel) =
|
|
17 panel.size = newVec2f(0.2, 0.2)
|
891
|
18
|
|
19 proc main() =
|
|
20 # setup engine
|
|
21 var engine = initEngine("Test panels")
|
|
22 engine.initRenderer([])
|
|
23
|
895
|
24 const B = [0'u8, 0'u8, 0'u8, 255'u8]
|
|
25 const T = [0'u8, 0'u8, 0'u8, 0'u8]
|
891
|
26 # build scene
|
895
|
27 #
|
894
|
28 var
|
|
29 font = loadFont("DejaVuSans.ttf", lineHeightPixels = 210'f32)
|
|
30 scene = Scene(name: "main")
|
895
|
31 origin = initPanel(
|
|
32 size = newVec2f(0.02, 0.02),
|
|
33 color = newVec4f(1, 1, 1, 1),
|
|
34 texture = Texture(isGrayscale: false, colorImage: newImage[RGBAPixel](3, 3, [T, B, T, B, B, B, T, B, T]), sampler: NEAREST_SAMPLER),
|
|
35 )
|
|
36 panel = initPanel(
|
|
37 size = newVec2f(0.2, 0.2),
|
|
38 color = newVec4f(1, 0, 0, 0.5),
|
|
39 onMouseDown = click,
|
|
40 onMouseEnter = enter,
|
|
41 onMouseLeave = leave
|
|
42 )
|
894
|
43 help_text = font.initText("""Controls
|
|
44
|
|
45 Horizontal alignment:
|
|
46 F1: Left
|
|
47 F2: Center
|
|
48 F3: Right
|
|
49 Vertical alignment:
|
|
50 F4: Top
|
|
51 F5: Center
|
|
52 F6: Bottom""", scale = 0.0002, position = newVec2f(-0.9, -0.9), horizontalAlignment = Left, verticalAlignment = Top)
|
891
|
53
|
895
|
54 counterText = font.initText($counter, maxLen = 99, scale = 0.0004)
|
|
55
|
|
56 scene.add counterText
|
891
|
57 scene.add panel
|
894
|
58 scene.add help_text
|
|
59 scene.add origin
|
891
|
60 engine.loadScene(scene)
|
|
61
|
|
62 while engine.updateInputs() == Running and not engine.keyIsDown(Escape):
|
|
63 if engine.windowWasResized():
|
|
64 var winSize = engine.getWindow().size
|
|
65 panel.aspect_ratio = winSize[0] / winSize[1]
|
895
|
66 counterText.aspect_ratio = winSize[0] / winSize[1]
|
894
|
67 origin.aspect_ratio = winSize[0] / winSize[1]
|
|
68 help_text.aspect_ratio = winSize[0] / winSize[1]
|
|
69
|
895
|
70 if engine.keyWasPressed(F1):
|
|
71 panel.horizontalAlignment = Left
|
|
72 counterText.horizontalAlignment = Left
|
|
73 elif engine.keyWasPressed(F2):
|
|
74 panel.horizontalAlignment = Center
|
|
75 counterText.horizontalAlignment = Center
|
|
76 elif engine.keyWasPressed(F3):
|
|
77 panel.horizontalAlignment = Right
|
|
78 counterText.horizontalAlignment = Right
|
|
79 elif engine.keyWasPressed(F4):
|
|
80 panel.verticalAlignment = Top
|
|
81 counterText.verticalAlignment = Top
|
|
82 elif engine.keyWasPressed(F5):
|
|
83 panel.verticalAlignment = Center
|
|
84 counterText.verticalAlignment = Center
|
|
85 elif engine.keyWasPressed(F6):
|
|
86 panel.verticalAlignment = Bottom
|
|
87 counterText.verticalAlignment = Bottom
|
|
88
|
|
89 engine.processEventsFor(panel)
|
894
|
90
|
|
91 panel.refresh()
|
895
|
92 counterText.refresh()
|
894
|
93 origin.refresh()
|
|
94 help_text.refresh()
|
891
|
95
|
|
96 engine.renderScene(scene)
|
|
97 engine.destroy()
|
|
98
|
|
99
|
|
100 when isMainModule:
|
|
101 main()
|