diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoAppearance01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoAppearance01.kt new file mode 100644 index 00000000..ae6b3193 --- /dev/null +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoAppearance01.kt @@ -0,0 +1,58 @@ +import org.openrndr.application +import org.openrndr.color.ColorRGBa +import org.openrndr.extensions.SingleScreenshot +import org.openrndr.extra.gui.GUI +import org.openrndr.extra.gui.GUIAppearance +import org.openrndr.extra.parameters.* +import org.openrndr.math.Vector2 +import org.openrndr.shape.Circle + +/** + * A simple demonstration of a GUI for drawing some circles + */ +fun main() = application { + program { + // -- this block is for automation purposes only + if (System.getProperty("takeScreenshot") == "true") { + extend(SingleScreenshot()) { + this.outputFile = System.getProperty("screenshotPath") + } + } + + val gui = GUI(GUIAppearance(barWidth = 400)) + gui.compartmentsCollapsedByDefault = false + + + val settings = @Description("Settings") object { + @DoubleParameter("radius", 0.0, 100.0) + var radius = 50.0 + + @Vector2Parameter("position", 0.0, 1.0) + var position = Vector2(0.6, 0.5) + + @ColorParameter("color") + var color = ColorRGBa.PINK + + @DoubleListParameter("radii", 5.0, 30.0) + var radii = mutableListOf(5.0, 6.0, 8.0, 14.0, 20.0, 30.0) + } + gui.add(settings) + extend(gui) + + // note we can only change the visibility after the extend + gui.visible = true + + extend { + // determine visibility through mouse x-coordinate + //gui.visible = mouse.position.x < gui.appearance.barWidth + + drawer.fill = settings.color + drawer.circle(settings.position * drawer.bounds.position(1.0, 1.0), settings.radius) + drawer.circles( + settings.radii.mapIndexed { i, radius -> + Circle(width - 50.0, 60.0 + i * 70.0, radius) + } + ) + } + } +} \ No newline at end of file diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoHide01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoHide01.kt index 85eedf0f..d234b73d 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoHide01.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoHide01.kt @@ -11,17 +11,9 @@ import org.openrndr.shape.Circle */ fun main() = application { program { - // -- this block is for automation purposes only - if (System.getProperty("takeScreenshot") == "true") { - extend(SingleScreenshot()) { - this.outputFile = System.getProperty("screenshotPath") - } - } - val gui = GUI() gui.compartmentsCollapsedByDefault = false - val settings = @Description("Settings") object { @DoubleParameter("radius", 0.0, 100.0) var radius = 50.0 @@ -48,9 +40,9 @@ fun main() = application { drawer.fill = settings.color drawer.circle(settings.position * drawer.bounds.position(1.0, 1.0), settings.radius) drawer.circles( - settings.radii.mapIndexed { i, radius -> - Circle(width - 50.0, 60.0 + i * 70.0, radius) - } + settings.radii.mapIndexed { i, radius -> + Circle(width - 50.0, 60.0 + i * 70.0, radius) + } ) } } diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoOptions01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoOptions01.kt index 53ead58c..d650b92f 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoOptions01.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoOptions01.kt @@ -16,13 +16,6 @@ enum class BackgroundColors { fun main() = application { program { - // -- this block is for automation purposes only - if (System.getProperty("takeScreenshot") == "true") { - extend(SingleScreenshot()) { - this.outputFile = System.getProperty("screenshotPath") - } - } - val gui = GUI() gui.compartmentsCollapsedByDefault = false val settings = @Description("Settings") object { @@ -33,7 +26,7 @@ fun main() = application { gui.add(settings) extend(gui) extend { - when(settings.option) { + when (settings.option) { BackgroundColors.Pink -> drawer.clear(ColorRGBa.PINK) BackgroundColors.Black -> drawer.clear(ColorRGBa.BLACK) BackgroundColors.Yellow -> drawer.clear(ColorRGBa.YELLOW) diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoPresets01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoPresets01.kt index 49566d4c..c98f13c0 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoPresets01.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoPresets01.kt @@ -13,13 +13,6 @@ import org.openrndr.extra.parameters.* */ fun main() = application { program { - // -- this block is for automation purposes only - if (System.getProperty("takeScreenshot") == "true") { - extend(SingleScreenshot()) { - this.outputFile = System.getProperty("screenshotPath") - } - } - val gui = GUI() gui.compartmentsCollapsedByDefault = false @@ -47,8 +40,8 @@ fun main() = application { 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) { + 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) @@ -57,8 +50,8 @@ fun main() = application { } keyboard.keyDown.listen { when (it.name) { - in "0" .. "9" -> { - if(keyboard.pressedKeys.contains("left-shift")) { + in "0".."9" -> { + if (keyboard.pressedKeys.contains("left-shift")) { // 1. Get the current gui state, store it in a list presets[it.name.toInt()] = gui.toObject() } else { diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoSideCanvas01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoSideCanvas01.kt index ec9d4254..50f7f591 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoSideCanvas01.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoSideCanvas01.kt @@ -1,6 +1,7 @@ import org.openrndr.application import org.openrndr.color.ColorRGBa import org.openrndr.extra.gui.GUI +import org.openrndr.extra.gui.GUIAppearance import org.openrndr.extra.parameters.* import org.openrndr.math.Vector2 import org.openrndr.panel.elements.draw @@ -14,14 +15,13 @@ fun main() = application { width = 800 height = 800 windowResizable = true - } + program { - val gui = GUI(baseColor = ColorRGBa.GRAY.shade(0.25)) + val gui = GUI(GUIAppearance(baseColor = ColorRGBa.GRAY.shade(0.25))) gui.compartmentsCollapsedByDefault = false gui.enableSideCanvas = true - val settings = @Description("Settings") object { @DoubleParameter("radius", 0.0, 100.0) var radius = 50.0 diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoSimple01.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoSimple01.kt index 4be8420d..889ed862 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoSimple01.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoSimple01.kt @@ -40,9 +40,9 @@ fun main() = application { drawer.fill = settings.color drawer.circle(settings.position * drawer.bounds.position(1.0, 1.0), settings.radius) drawer.circles( - settings.radii.mapIndexed { i, radius -> - Circle(width - 50.0, 60.0 + i * 70.0, radius) - } + settings.radii.mapIndexed { i, radius -> + Circle(width - 50.0, 60.0 + i * 70.0, radius) + } ) } } diff --git a/orx-jvm/orx-gui/src/demo/kotlin/DemoXYParameter.kt b/orx-jvm/orx-gui/src/demo/kotlin/DemoXYParameter.kt index 1773971c..1d1e77d5 100644 --- a/orx-jvm/orx-gui/src/demo/kotlin/DemoXYParameter.kt +++ b/orx-jvm/orx-gui/src/demo/kotlin/DemoXYParameter.kt @@ -12,22 +12,17 @@ fun main() = application { } program { - // -- this block is for automation purposes only - if (System.getProperty("takeScreenshot") == "true") { - extend(SingleScreenshot()) { - this.outputFile = System.getProperty("screenshotPath") - } - } - val gui = GUI() gui.compartmentsCollapsedByDefault = false val settings = @Description("Settings") object { - @XYParameter("Position", 0.0, 800.0, 0.0, 800.0, - precision = 2, - invertY = false, - showVector = true) - var position: Vector2 = Vector2(0.0,0.0) + @XYParameter( + "Position", 0.0, 800.0, 0.0, 800.0, + precision = 2, + invertY = false, + showVector = true + ) + var position: Vector2 = Vector2(0.0, 0.0) } gui.add(settings) diff --git a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt index b58724e7..7c397e32 100644 --- a/orx-jvm/orx-gui/src/main/kotlin/Gui.kt +++ b/orx-jvm/orx-gui/src/main/kotlin/Gui.kt @@ -72,8 +72,12 @@ private fun setAndPersist(compartmentLabel: String, property: KMutable private val logger = KotlinLogging.logger { } + +class GUIAppearance(val baseColor: ColorRGBa = ColorRGBa.GRAY, val barWidth:Int = 200) + @Suppress("unused", "UNCHECKED_CAST") -class GUI(val baseColor:ColorRGBa = ColorRGBa.GRAY, val defaultStyles: List = defaultStyles()) : Extension { +class GUI(val appearance: GUIAppearance = GUIAppearance(), + val defaultStyles: List = defaultStyles()) : Extension { private var onChangeListener: ((name: String, value: Any?) -> Unit)? = null override var enabled = true @@ -174,7 +178,7 @@ class GUI(val baseColor:ColorRGBa = ColorRGBa.GRAY, val defaultStyles: List descendant(has type "colorpicker-button") { - this.width = 175.px + this.width = (appearance.barWidth-25).px } descendant(has type "slider") { - this.width = 175.px + this.width = (appearance.barWidth-25).px } descendant(has type "button") { - this.width = 175.px + this.width = (appearance.barWidth-25).px } descendant(has type "textfield") { - this.width = 175.px + this.width = (appearance.barWidth-25).px } descendant(has type "toggle") { - this.width = 175.px + this.width = (appearance.barWidth-25).px } descendant(has type "xy-pad") { - this.width = 175.px - this.height = 175.px + this.width = (appearance.barWidth-25).px + this.height = (appearance.barWidth-25).px } descendant(has type listOf( @@ -249,7 +253,7 @@ class GUI(val baseColor:ColorRGBa = ColorRGBa.GRAY, val defaultStyles: List