diff --git a/orx-no-clear/README.md b/orx-no-clear/README.md index 3428b040..6de33c33 100644 --- a/orx-no-clear/README.md +++ b/orx-no-clear/README.md @@ -20,33 +20,35 @@ fun main() = application { } ``` -#### Usage with a Lambda Expression Parameter -Optionally, the static backdrop may be initialised by passing a custom code block to the `NoClear()` function. +#### Usage with additional configuration +Optionally, a static `backdrop` may be setup by providing custom code. - Example 1. Customising the backdrop with an image ```kotlin -val img = loadImage("file:data\\myImage.png") -val bgImage = { +extend(NoClear()) { + val img = loadImage("data\\backdrop.png") + backdrop = { drawer.image(img, 0.0, 0.0, width * 1.0, height * 1.0) } -extend(NoClear(bgImage)) +} ``` - Example 2. Customising the backdrop with a checker-board pattern ```kotlin -val bgBoard = { - 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) +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) + } } } } } -extend(NoClear(bgBoard)) ``` 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 941ff43f..9a187282 100644 --- a/orx-no-clear/src/main/kotlin/NoClear.kt +++ b/orx-no-clear/src/main/kotlin/NoClear.kt @@ -9,10 +9,15 @@ import org.openrndr.draw.isolated import org.openrndr.draw.renderTarget import org.openrndr.math.Matrix44 -class NoClear(val block: (() -> Unit)? = null): Extension { +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 if (renderTarget == null || renderTarget?.width != program.width || renderTarget?.height != program.height) { @@ -29,7 +34,7 @@ class NoClear(val block: (() -> Unit)? = null): Extension { renderTarget?.let { drawer.withTarget(it) { background(program.backgroundColor ?: ColorRGBa.TRANSPARENT) - block?.invoke() + backdrop?.invoke() // draw custom backdrop } } }