From 67c33b53a3bbd358b8c8205ad756e0e1a15c450e Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 31 Jul 2025 12:35:45 -0500 Subject: [PATCH] cyclable text macro for SimpleWindow --- simplewindow-test/source/PlayState.kiss | 6 ++++++ src/kiss_flixel/SimpleWindowTools.kiss | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/simplewindow-test/source/PlayState.kiss b/simplewindow-test/source/PlayState.kiss index c1e5ecf..d5637fc 100644 --- a/simplewindow-test/source/PlayState.kiss +++ b/simplewindow-test/source/PlayState.kiss @@ -1,3 +1,5 @@ +(loadFrom "kiss-flixel" "src/kiss_flixel/SimpleWindowTools.kiss") + (import flixel.FlxState) (import flixel.text.FlxText) (import kiss_flixel.Log) @@ -50,6 +52,10 @@ onDeselect ->_ (print "$letter deselected")))) + (prop &mut cycleIdx 0) + (prop cycle (for i (range 10) (* i "*"))) + (makeCycleText window cycleIdx "Counter" cycle) + (window.makeTextV2 "{tab} Back" (object onClick ->:Void _ diff --git a/src/kiss_flixel/SimpleWindowTools.kiss b/src/kiss_flixel/SimpleWindowTools.kiss index 153e315..bc2985f 100644 --- a/src/kiss_flixel/SimpleWindowTools.kiss +++ b/src/kiss_flixel/SimpleWindowTools.kiss @@ -1,3 +1,4 @@ +// TODO these evaluate args multiple times. withEvalOnce can't be used, because it strips the type annotations in the typeCase (defMacro makeToggleText [window v label on off &opt objArgs] (unless objArgs (set objArgs [])) `(.makeTextV2 ,window (+ ,label ": " (if ,v ,on ,off)) @@ -8,4 +9,16 @@ (set ,v (not ,v)) (set text.text (+ ,label ": " (if ,v ,on ,off)))) (never otherwise)) + ,@objArgs))) + +(defMacro makeCycleText [window idxV label values &opt objArgs] + (unless objArgs (set objArgs [])) + `(.makeTextV2 ,window (+ ,label ": " (nth ,values ,idxV)) + (object + onClick ->self + (typeCase [self] + ([:FlxText text] + (set ,idxV (% (+ ,idxV 1) .length ,values)) + (set text.text (+ ,label ": " (nth ,values ,idxV)))) + (never otherwise)) ,@objArgs))) \ No newline at end of file