diff --git a/orx-no-clear/README.md b/orx-no-clear/README.md index 0f6923f2..6de33c33 100644 --- a/orx-no-clear/README.md +++ b/orx-no-clear/README.md @@ -5,17 +5,50 @@ OPENRNDR does not support natively. #### Usage -``` -class NoClearProgram: Program() { - - override fun setup() { +```kotlin +fun main() = application { + configure { + title = "NoClearProgram" + } + program { backgroundColor = ColorRGBa.PINK extend(NoClear()) - } - - override fun draw() { - drawer.circle(Math.cos(seconds) * width / 2.0 + width / 2.0, Math.sin(seconds * 0.24) * height / 2.0 + height / 2.0, 20.0) + extend { + drawer.circle(Math.cos(seconds) * width / 2.0 + width / 2.0, Math.sin(seconds * 0.24) * height / 2.0 + height / 2.0, 20.0) + } } } - ``` + +#### Usage with additional configuration +Optionally, a static `backdrop` may be setup by providing custom code. + +- Example 1. Customising the backdrop with an image +```kotlin +extend(NoClear()) { + val img = loadImage("data\\backdrop.png") + backdrop = { + drawer.image(img, 0.0, 0.0, width * 1.0, height * 1.0) + } +} +``` + +- Example 2. Customising the backdrop with a checker-board pattern +```kotlin +extend(NoClear()) { + backdrop = { + val xw = width / 8.0 + val yh = height / 8.0 + drawer.fill = ColorRGBa.RED + (0..7).forEach { row -> + (0..7).forEach { col -> + if ((row + col) % 2 == 0) { + drawer.rectangle(row * xw, col * yh, xw, yh) + } + } + } + } +} +``` + +NB! any submitted _lambda expression_ must be valid within the `renderTarget` context. \ No newline at end of file diff --git a/orx-no-clear/src/main/kotlin/NoClear.kt b/orx-no-clear/src/main/kotlin/NoClear.kt index 1663a3d9..9a187282 100644 --- a/orx-no-clear/src/main/kotlin/NoClear.kt +++ b/orx-no-clear/src/main/kotlin/NoClear.kt @@ -13,6 +13,10 @@ class NoClear : Extension { override var enabled: Boolean = true private var renderTarget: RenderTarget? = null + /** + * code-block to draw an optional custom backdrop + */ + var backdrop: (() -> Unit)? = null override fun beforeDraw(drawer: Drawer, program: Program) { if (program.width > 0 && program.height > 0) { // only if the window is not minimised @@ -30,6 +34,7 @@ class NoClear : Extension { renderTarget?.let { drawer.withTarget(it) { background(program.backgroundColor ?: ColorRGBa.TRANSPARENT) + backdrop?.invoke() // draw custom backdrop } } }