66 lines
2.0 KiB
Kotlin
66 lines
2.0 KiB
Kotlin
import org.openrndr.KeyModifier
|
|
import org.openrndr.application
|
|
import org.openrndr.color.ColorRGBa
|
|
import org.openrndr.color.mix
|
|
import org.openrndr.extensions.SingleScreenshot
|
|
import org.openrndr.extra.gui.GUI
|
|
import org.openrndr.extra.parameters.*
|
|
|
|
/**
|
|
* Shows how to store and retrieve in-memory gui presets.
|
|
* Keyboard controls:
|
|
* [Left Shift] + [0]..[9] => store current gui values to a preset
|
|
* [0]..[9] => recall a preset
|
|
*/
|
|
fun main() = application {
|
|
program {
|
|
val gui = GUI()
|
|
gui.compartmentsCollapsedByDefault = false
|
|
|
|
val presets = MutableList(10) {
|
|
gui.toObject()
|
|
}
|
|
|
|
val settings = @Description("Settings") object {
|
|
@IntParameter("a", 1, 10)
|
|
var a = 7
|
|
|
|
@IntParameter("b", 1, 10)
|
|
var b = 3
|
|
|
|
@ColorParameter("foreground")
|
|
var foreground = ColorRGBa.fromHex("654062")
|
|
|
|
@ColorParameter("background")
|
|
var background = ColorRGBa.fromHex("ff9c71")
|
|
}
|
|
gui.add(settings)
|
|
extend(gui)
|
|
extend {
|
|
drawer.clear(settings.background)
|
|
drawer.stroke = settings.background
|
|
drawer.fill = settings.foreground
|
|
// Draw a pattern based on modulo
|
|
for (i in 0 until 100) {
|
|
if (i % settings.a == 0 || i % settings.b == 0) {
|
|
val x = (i % 10) * 64.0
|
|
val y = (i / 10) * 48.0
|
|
drawer.rectangle(x, y, 64.0, 48.0)
|
|
}
|
|
}
|
|
}
|
|
keyboard.keyDown.listen {
|
|
when (it.name) {
|
|
in "0".."9" -> {
|
|
if (KeyModifier.SHIFT in it.modifiers) {
|
|
// 1. Get the current gui state, store it in a list
|
|
presets[it.name.toInt()] = gui.toObject()
|
|
} else {
|
|
// 2. Set the gui state
|
|
gui.fromObject(presets[it.name.toInt()])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |