File drops

OPENRNDR programs can listen to file drop events. File drop events are generated by a user dragging and releasing one or more file icons onto the program window.

fun main() = application {
    program {
        window.drop.listen {
            println("${it.files.size} files dropped at ${it.position}")
        }
    }
}

The following program displays PNG, JPG or TIF images dropped onto its window. If several files are dropped at once, it displays the first of them that is an image.

fun main() = application {
    program {
        // Create a dummy image
        var img = drawImage(16, 16) {}
        
        window.drop.listen { dropped ->
            val firstImage = dropped.files.firstOrNull {
                File(it).extension.lowercase() in listOf("png", "jpg", "tif")
            }
            
            if (firstImage != null) {
                // Call .destroy() to avoid leaking memory
                img.destroy()
                
                // Then load a new image into img
                img = loadImage(firstImage)
            }
        }
        extend {
            drawer.imageFit(img, drawer.bounds, fitMethod = FitMethod.Contain)
        }
    }
}

By using drawer.imageFit the image is centered and made to fit the available window size.

edit on GitHub