All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jsMain.org.openrndr.ApplicationBuilder.kt Maven / Gradle / Ivy

package org.openrndr

/**
 * Creates and runs a synchronous OPENRNDR application using the provided [ApplicationBuilder].
 * @see the OPENRNDR guide
 */
actual fun application(build: ApplicationBuilder.() -> Unit){
    throw NotImplementedError("Synchronous application is unsupported, use applicationAsync()")
}

/**
 * Creates and runs an asynchronous OPENRNDR application using the provided [ApplicationBuilder].
 * @see the OPENRNDR guide
 */
actual suspend fun applicationAsync(build: ApplicationBuilder.() -> Unit) {
    ApplicationBuilderJS().apply {
        build()
        applicationBase.build(program, configuration).runAsync()
    }
}

@Suppress("DeprecatedCallableAddReplaceWith")
class ApplicationBuilderJS internal constructor() : ApplicationBuilder() {
    override val configuration = Configuration()
    override var program: Program = ProgramImplementation()
    override val applicationBase = applicationBaseFunc?.invoke() ?: error("applicationFunc not set")
    override val displays: List = emptyList()

    override fun configure(init: Configuration.() -> Unit) {
        configuration.init()
    }

    override fun program(init: suspend Program.() -> Unit) : Program {
        program = object : ProgramImplementation() {
            override suspend fun setup() {
                init()
            }
        }
        return program
    }

    @Deprecated("Cannot construct application in an application block.", level = DeprecationLevel.ERROR)
    override fun application(build: ApplicationBuilder.() -> Unit): Nothing = error("Cannot construct application in an application block.")

    @Deprecated("Cannot construct application in an application block.", level = DeprecationLevel.ERROR)
    override fun applicationAsync(build: ApplicationBuilder.() -> Unit): Nothing = error("Cannot construct application in an application block.")

    @Deprecated("Cannot construct program in a program block.", level = DeprecationLevel.ERROR)
    override fun Program.program(init: Program.() -> Unit): Nothing = error("Cannot construct program in a program block.")
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy