diff old_tests/test_panel.nim @ 1227:4d97cfc4888b

merge
author sam <sam@basx.dev>
date Wed, 17 Jul 2024 23:45:43 +0700
parents 6360c8d17ce0
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/old_tests/test_panel.nim	Wed Jul 17 23:45:43 2024 +0700
@@ -0,0 +1,99 @@
+import std/unicode
+
+import semicongine
+
+var counter = 0
+var counterText: Text
+
+proc click(panel: var Panel, buttons: set[MouseButton]) =
+  if buttons.contains(Mouse1):
+    counter.inc
+  if buttons.contains(Mouse3):
+    counter.dec
+  counterText.text = $counter
+proc enter(panel: var Panel) =
+  panel.mesh.transform = panel.mesh.transform * Scale(1.05, 1.05)
+  panel.color = NewVec4f(1, 0, 0, 0.3)
+proc leave(panel: var Panel) =
+  panel.mesh.transform = panel.mesh.transform * Scale(1 / 1.05, 1 / 1.05)
+  panel.color = NewVec4f(1, 0, 0, 0.5)
+
+proc main() =
+  # setup engine
+  var engine = InitEngine("Test panels")
+  engine.InitRenderer([])
+
+  const B = [0'u8, 0'u8, 0'u8, 255'u8]
+  const T = [0'u8, 0'u8, 0'u8, 0'u8]
+  # build scene
+  #
+  var
+    font = LoadFont("DejaVuSans.ttf", lineHeightPixels = 210'f32)
+    scene = Scene(name: "main")
+    origin = InitPanel(
+      transform = Scale(0.005, 0.005),
+      color = NewVec4f(1, 1, 1, 1),
+      texture = Texture(isGrayscale: false, colorImage: NewImage[RGBAPixel](3, 3, [T, B, T, B, B, B, T, B, T]), sampler: NEAREST_SAMPLER),
+    )
+    button = InitPanel(
+      transform = Translate(0.2, 0.1) * Scale(0.3, 0.1),
+      color = NewVec4f(1, 0, 0, 0.5),
+      onMouseDown = click,
+      onMouseEnter = enter,
+      onMouseLeave = leave
+    )
+    help_text = font.InitText("""Controls
+
+Horizontal alignment:
+  F1: Left
+  F2: Center
+  F3: Right
+Vertical alignment:
+  F4: Top
+  F5: Center
+  F6: Bottom
+Mouse:
+  Left click: Increase counter
+  Right click: Decrease counter""".toRunes, horizontalAlignment = Left, verticalAlignment = Top, transform = Translate(-0.9, -0.9) * Scale(0.0002, 0.0002))
+
+  counterText = font.InitText(($counter).toRunes, maxLen = 99, transform = Translate(0.2, 0.1) * Scale(0.0004, 0.0004))
+
+  scene.Add counterText
+  scene.Add button
+  scene.Add help_text
+  scene.Add origin
+  engine.LoadScene(scene)
+
+  while engine.UpdateInputs() and not KeyIsDown(Escape):
+    if KeyWasPressed(F1):
+      button.horizontalAlignment = Left
+      counterText.horizontalAlignment = Left
+    elif KeyWasPressed(F2):
+      button.horizontalAlignment = Center
+      counterText.horizontalAlignment = Center
+    elif KeyWasPressed(F3):
+      button.horizontalAlignment = Right
+      counterText.horizontalAlignment = Right
+    elif KeyWasPressed(F4):
+      button.verticalAlignment = Top
+      counterText.verticalAlignment = Top
+    elif KeyWasPressed(F5):
+      button.verticalAlignment = Center
+      counterText.verticalAlignment = Center
+    elif KeyWasPressed(F6):
+      button.verticalAlignment = Bottom
+      counterText.verticalAlignment = Bottom
+
+    engine.ProcessEvents(button)
+
+    button.Refresh()
+    counterText.Refresh()
+    origin.Refresh()
+    help_text.Refresh()
+
+    engine.RenderScene(scene)
+  engine.Destroy()
+
+
+when isMainModule:
+  main()