From 9b691e04c4e374f6a2e468a55236519a0c94db95 Mon Sep 17 00:00:00 2001 From: Ricardo Matias Date: Mon, 18 Nov 2019 10:11:26 +0100 Subject: [PATCH] Create Palette extension --- orx-palette/README.md | 106 +++ orx-palette/build.gradle | 5 + orx-palette/src/main/kotlin/ColorUtils.kt | 34 + orx-palette/src/main/kotlin/PaletteStudio.kt | 220 ++++++ .../palette/collections/collection-1.json | 602 +++++++++++++++ .../palette/collections/collection-2.json | 695 +++++++++++++++++ .../palette/collections/collection-3.json | 702 ++++++++++++++++++ settings.gradle | 3 +- 8 files changed, 2366 insertions(+), 1 deletion(-) create mode 100644 orx-palette/README.md create mode 100644 orx-palette/build.gradle create mode 100644 orx-palette/src/main/kotlin/ColorUtils.kt create mode 100644 orx-palette/src/main/kotlin/PaletteStudio.kt create mode 100644 orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-1.json create mode 100644 orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-2.json create mode 100644 orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-3.json diff --git a/orx-palette/README.md b/orx-palette/README.md new file mode 100644 index 00000000..11004fe5 --- /dev/null +++ b/orx-palette/README.md @@ -0,0 +1,106 @@ +# orx-palette + +An extension that helps managing a palette of colors. Includes 300 palettes organized in 3 collections gathered from different sources. + +## Usage + +```kotlin +import org.openrndr.extra.palette.PaletteStudio + +val paletteStudio = PaletteStudio( + loadDefault = true, // Loads the first collection of palettes. [default -> true] + sortBy = PaletteStudio.SortBy.DARKEST, // Sorts the colors by luminance. [default -> PaletteStudio.SortBy.NO_SORTING] + collection = PaletteStudio.Collections.TWO, // Chooses which collection to load [default -> Collections.ONE] + colorCountConstraint = 3 // Constraints the number of colors in the palette [default -> 0] +) + +// The choice of the background and foreground colors is based on contrast ratios +drawer.background(paletteStudio.background) +drawer.stroke = paletteStudio.foreground + +val randomPaletteColor = Random.pick(paletteStudio.colors!!) +val randomColorExcludingBackground = Random.pick(paletteStudio.colors2!!) + +// grabs a random palette from the collection +paletteStudio.randomPalette() + +// randomizes the order of the colors in the palette +paletteStudio.randomize() + +// changes the collection of palettes +paletteStudio.changeCollection(PaletteStudio.Collections.TWO) + +// load your own from a JSON file with a structure of Array> +paletteStudio.loadExternal("data/palette-autumn.json") +``` + +### Keybindings + +Keybindings for getting a random palette (`l`) and randomizing (`k`) one can be set easily by declaring inside the `program`: +```kotlin +val paletteStudio = PaletteStudio() + +extend(paletteStudio) +``` + +## Example + +```kotlin +fun main() = application { + configure { + title = "Palette" + width = 720 + height = 720 + } + program { + val colors = mutableListOf() + + fun fillColors() { + for (n in 0..36) { + when(n) { + 12 -> paletteStudio.changeCollection(PaletteStudio.Collections.TWO) + 24 -> paletteStudio.changeCollection(PaletteStudio.Collections.THREE) + } + + val color = Random.pick(paletteStudio.colors!!) + + colors.add(color) + } + } + + keyboard.keyDown.listen { + if (it.name == "c") { + colors.clear() + fillColors() + } + } + + fillColors() + + extend() { + drawer.background(paletteStudio.background) + + val size = 120.0 + val radius = size / 2.0 + + for (x in 0 until 6) { + for (y in 0 until 6) { + val index = x + y * 6 + val color = colors[index] + val x = size * x + val y = size * y + + drawer.fill = color + drawer.stroke = color + + if (index <= 11 || index > 23) { + drawer.circle(x + radius, y + radius, radius) + } else { + drawer.rectangle(x, y, size, size) + } + } + } + } + } +} +``` diff --git a/orx-palette/build.gradle b/orx-palette/build.gradle new file mode 100644 index 00000000..0d0cc5a8 --- /dev/null +++ b/orx-palette/build.gradle @@ -0,0 +1,5 @@ +dependencies { + compile "com.google.code.gson:gson:2.8.6" + implementation project(":orx-noise") +} + diff --git a/orx-palette/src/main/kotlin/ColorUtils.kt b/orx-palette/src/main/kotlin/ColorUtils.kt new file mode 100644 index 00000000..1d2f55db --- /dev/null +++ b/orx-palette/src/main/kotlin/ColorUtils.kt @@ -0,0 +1,34 @@ +package org.openrndr.extra.palette + +import org.openrndr.color.ColorRGBa +import org.openrndr.color.Linearity + +// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef +internal fun getLuminance(color: ColorRGBa): Double = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b + +// see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef +internal fun getContrast(colorA: ColorRGBa, colorB: ColorRGBa): Double { + val l1 = getLuminance(colorA) + val l2 = getLuminance(colorB) + + return if (l1 > l2) (l1 + 0.05) / (l2 + 0.05) else (l2 + 0.05) / (l1 + 0.05); +} + +// TODO(ricardomatias) Remove this when 0.3.36 is released +internal fun fromHex(hex: String): ColorRGBa { + val parsedHex = hex.replace("#", "") + val len = parsedHex.length + val mult = len / 3 + + val colors = (0..2).map { idx -> + var c = parsedHex.substring(idx * mult, (idx + 1) * mult) + + c = if (len == 3) c + c else c + + Integer.valueOf(c, 16) + } + + val (r, g, b) = colors + + return ColorRGBa(r / 255.0, g / 255.0, b / 255.0, 1.0, Linearity.SRGB) +} \ No newline at end of file diff --git a/orx-palette/src/main/kotlin/PaletteStudio.kt b/orx-palette/src/main/kotlin/PaletteStudio.kt new file mode 100644 index 00000000..99a38b84 --- /dev/null +++ b/orx-palette/src/main/kotlin/PaletteStudio.kt @@ -0,0 +1,220 @@ +package org.openrndr.extra.palette + +import mu.KotlinLogging +import com.google.gson.GsonBuilder +import org.openrndr.Extension +import org.openrndr.Keyboard +import org.openrndr.Program +import org.openrndr.extra.noise.Random +import org.openrndr.color.ColorRGBa +import org.openrndr.color.ColorRGBa.Companion.BLACK +import org.openrndr.color.ColorRGBa.Companion.GREEN +import org.openrndr.color.ColorRGBa.Companion.PINK +import org.openrndr.color.ColorRGBa.Companion.RED +import org.openrndr.color.ColorRGBa.Companion.WHITE +import org.openrndr.color.ColorRGBa.Companion.YELLOW +import org.openrndr.resourceUrl +import java.io.File +import java.net.URL +import kotlin.math.max +import kotlin.math.min + +internal val logger = KotlinLogging.logger {} + +internal typealias Colors = List + +data class Palette( + val background: ColorRGBa, + val foreground: ColorRGBa, + val colors: Colors, + val colors2: Colors +) + +internal val defaultPalette: Palette = Palette( + BLACK, + PINK, + listOf(BLACK, PINK, YELLOW, RED, GREEN), + listOf(PINK, YELLOW, RED, GREEN) +) + +internal fun getCollPath(n: String) = URL(resourceUrl("/org/openrndr/extra/palette/collections/collection-$n.json")) + +class PaletteStudio( + loadDefault: Boolean = true, + val sortBy: SortBy = SortBy.NO_SORTING, + collection: Collections = Collections.ONE, + val colorCountConstraint: Int = 0 +) : Extension { + var palettes: MutableList> = mutableListOf() + var palette: Palette = defaultPalette + + private var paletteIndex: Int = 0 + + enum class SortBy { + NO_SORTING, DARKEST, BRIGHTEST + } + + enum class Collections { + ONE, TWO, THREE + } + + private val collectionsResource = mapOf( + Collections.ONE to getCollPath("1"), + Collections.TWO to getCollPath("2"), + Collections.THREE to getCollPath("3") + ) + + var background: ColorRGBa = defaultPalette.background + get() { + return palette.background + } + var foreground: ColorRGBa = defaultPalette.foreground + get() { + return palette.foreground + } + var colors: Colors = defaultPalette.colors + get() { + return palette.colors + } + var colors2: Colors = defaultPalette.colors2 + get() { + return palette.colors2 + } + + init { + if (loadDefault) { + loadCollection(collection) + } + } + + private fun loadCollection(newCollection: Collections) { + val collectionPath: URL = collectionsResource[newCollection]!! + + palettes = mutableListOf() + + loadFromURL(collectionPath) + + val choice = Random.pick(palettes) + + palette = createPalette(choice) + paletteIndex = palettes.indexOf(choice) + } + + private fun load(contents: String) { + try { + val gson = GsonBuilder().create() + + val clipData = gson.fromJson( + contents, Array>::class.java + ).toList() + + for (p in clipData) { + val palette = mutableListOf() + + for (colorStr in p.toList()) { + val colorInt = fromHex(colorStr) + + palette.add(colorInt) + } + + palettes.add(palette) + } + } catch (ex: Exception) { + logger.error(ex) { "Error: Could not load palettes" } + logger.info { "Only JSON files with Array> structure can be loaded using this method" } + } + } + + private fun loadFromURL(url: URL): Unit = load(url.readText()) + + private fun createPalette(colors: MutableList) : Palette { + when(sortBy) { + SortBy.DARKEST -> { + val darkest = Comparator { c1: ColorRGBa, c2: ColorRGBa -> (getLuminance(c1) - getLuminance(c2)).toInt() } + colors.sortWith(darkest) + } + SortBy.BRIGHTEST -> { + val brightest = Comparator { c1: ColorRGBa, c2: ColorRGBa -> (getLuminance(c2) - getLuminance(c1)).toInt() } + colors.sortWith(brightest) + } + SortBy.NO_SORTING -> {} + } + + val background = colors.first() + + val foreground = colors + .takeLast(colors.size - 1) + .map { getContrast(background, it) to it } + .maxBy { it.first }!! + .second + + var constraint = colors.size + var constraint2 = colors.size + + if (colorCountConstraint > 0 && colorCountConstraint < colors.size) { + constraint = colorCountConstraint + constraint2 = colorCountConstraint + 1 + } + + val colors1 = colors.slice(0 until constraint) + val colors2 = colors.slice(1 until constraint2) + + return Palette(background, foreground, colors1, colors2) + } + + fun loadExternal(filePath: String) { + palettes = mutableListOf() + + load(File(filePath).readText()) + + val choice = Random.pick(palettes) + + palette = createPalette(choice) + paletteIndex = palettes.indexOf(choice) + } + + fun select(index: Int = 0) { + paletteIndex = max(min(index, palettes.size - 1), 0) + palette = createPalette(palettes[paletteIndex]) + } + + fun getIndex(): Int { + return paletteIndex + } + + fun randomize() { + palette = createPalette(Random.pick(palette.colors, count = palette.colors.size)) + } + + fun randomPalette() { + val comparison = palette.colors.toMutableList() + val colors= Random.pick(palettes, comparison) as MutableList + + paletteIndex = palettes.indexOf(colors) + palette = createPalette(colors) + } + + fun changeCollection(newCollection: Collections) { + loadCollection(newCollection) + } + + private fun registerKeybindings(keyboard: Keyboard) { + keyboard.keyDown.listen { + if (it.name == "l") { + randomPalette() + } + if (it.name == "k") { + randomize() + } + } + } + + /* + * EXTENSION + */ + override var enabled: Boolean = true + + override fun setup(program: Program) { + registerKeybindings(program.keyboard) + } +} \ No newline at end of file diff --git a/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-1.json b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-1.json new file mode 100644 index 00000000..e1bb58fb --- /dev/null +++ b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-1.json @@ -0,0 +1,602 @@ +[ + [ + "#222831", + "#393e46", + "#00adb5", + "#eeeeee" + ], + [ + "#f9ed69", + "#f08a5d", + "#b83b5e", + "#6a2c70" + ], + [ + "#f38181", + "#fce38a", + "#eaffd0", + "#95e1d3" + ], + [ + "#08d9d6", + "#252a34", + "#ff2e63", + "#eaeaea" + ], + [ + "#364f6b", + "#3fc1c9", + "#f5f5f5", + "#fc5185" + ], + [ + "#a8d8ea", + "#aa96da", + "#fcbad3", + "#ffffd2" + ], + [ + "#e3fdfd", + "#cbf1f5", + "#a6e3e9", + "#71c9ce" + ], + [ + "#e4f9f5", + "#30e3ca", + "#11999e", + "#40514e" + ], + [ + "#ffc7c7", + "#ffe2e2", + "#f6f6f6", + "#8785a2" + ], + [ + "#48466d", + "#3d84a8", + "#46cdcf", + "#abedd8" + ], + [ + "#f9f7f7", + "#dbe2ef", + "#3f72af", + "#112d4e" + ], + [ + "#00b8a9", + "#f8f3d4", + "#f6416c", + "#ffde7d" + ], + [ + "#2b2e4a", + "#e84545", + "#903749", + "#53354a" + ], + [ + "#e23e57", + "#88304e", + "#522546", + "#311d3f" + ], + [ + "#212121", + "#323232", + "#0d7377", + "#14ffec" + ], + [ + "#ffcfdf", + "#fefdca", + "#e0f9b5", + "#a5dee5" + ], + [ + "#ffb6b9", + "#fae3d9", + "#bbded6", + "#61c0bf" + ], + [ + "#a8e6cf", + "#dcedc1", + "#ffd3b6", + "#ffaaa5" + ], + [ + "#defcf9", + "#cadefc", + "#c3bef0", + "#cca8e9" + ], + [ + "#ffc8c8", + "#ff9999", + "#444f5a", + "#3e4149" + ], + [ + "#3ec1d3", + "#f6f7d7", + "#ff9a00", + "#ff165d" + ], + [ + "#6fe7dd", + "#3490de", + "#6639a6", + "#521262" + ], + [ + "#f67280", + "#c06c84", + "#6c5b7b", + "#355c7d" + ], + [ + "#2d4059", + "#ea5455", + "#f07b3f", + "#ffd460" + ], + [ + "#8ef6e4", + "#9896f1", + "#d59bf6", + "#edb1f1" + ], + [ + "#bad7df", + "#ffe2e2", + "#f6f6f6", + "#99ddcc" + ], + [ + "#384259", + "#f73859", + "#7ac7c4", + "#c4edde" + ], + [ + "#a1eafb", + "#fdfdfd", + "#ffcef3", + "#cabbe9" + ], + [ + "#dcedc2", + "#ffd3b5", + "#ffaaa6", + "#ff8c94" + ], + [ + "#303841", + "#00adb5", + "#eeeeee", + "#ff5722" + ], + [ + "#2a363b", + "#e84a5f", + "#ff847c", + "#fecea8" + ], + [ + "#f85f73", + "#fbe8d3", + "#928a97", + "#283c63" + ], + [ + "#f0f5f9", + "#c9d6df", + "#52616b", + "#1e2022" + ], + [ + "#07689f", + "#a2d5f2", + "#fafafa", + "#ff7e67" + ], + [ + "#00e0ff", + "#74f9ff", + "#a6fff2", + "#e8ffe8" + ], + [ + "#cefff1", + "#ace7ef", + "#a6acec", + "#a56cc1" + ], + [ + "#7effdb", + "#b693fe", + "#8c82fc", + "#ff9de2" + ], + [ + "#a9eee6", + "#fefaec", + "#f9a1bc", + "#625772" + ], + [ + "#15b7b9", + "#10ddc2", + "#f5f5f5", + "#f57170" + ], + [ + "#dff4f3", + "#dde7f2", + "#b9bbdf", + "#878ecd" + ], + [ + "#ebfffa", + "#c6fce5", + "#6ef3d6", + "#0dceda" + ], + [ + "#0c056d", + "#590d82", + "#b61aae", + "#f25d9c" + ], + [ + "#f7fbfc", + "#d6e6f2", + "#b9d7ea", + "#769fcd" + ], + [ + "#a8e6cf", + "#fdffab", + "#ffd3b6", + "#ffaaa5" + ], + [ + "#1fab89", + "#62d2a2", + "#9df3c4", + "#d7fbe8" + ], + [ + "#303a52", + "#574b90", + "#9e579d", + "#fc85ae" + ], + [ + "#99e1e5", + "#f3e8cb", + "#f2c6b4", + "#fbafaf" + ], + [ + "#d4a5a5", + "#ffecda", + "#f9ffea", + "#a6d0e4" + ], + [ + "#303841", + "#3a4750", + "#d72323", + "#eeeeee" + ], + [ + "#fcefee", + "#fccde2", + "#fc5c9c", + "#c5e3f6" + ], + [ + "#fef0ff", + "#d6c8ff", + "#c79ecf", + "#7e6bc4" + ], + [ + "#393232", + "#4d4545", + "#8d6262", + "#ed8d8d" + ], + [ + "#fffcca", + "#55e9bc", + "#11d3bc", + "#537780" + ], + [ + "#283149", + "#404b69", + "#f73859", + "#dbedf3" + ], + [ + "#11cbd7", + "#c6f1e7", + "#f0fff3", + "#fa4659" + ], + [ + "#27296d", + "#5e63b6", + "#a393eb", + "#f5c7f7" + ], + [ + "#fafafa", + "#e8f1f5", + "#005691", + "#004a7c" + ], + [ + "#155263", + "#ff6f3c", + "#ff9a3c", + "#ffc93c" + ], + [ + "#ff6464", + "#ff8264", + "#ffaa64", + "#fff5a5" + ], + [ + "#e0fcff", + "#90f2ff", + "#6eb6ff", + "#7098da" + ], + [ + "#c7f5fe", + "#fcc8f8", + "#eab4f8", + "#f3f798" + ], + [ + "#233142", + "#455d7a", + "#f95959", + "#e3e3e3" + ], + [ + "#ffa5a5", + "#ffffc2", + "#c8e7ed", + "#bfcfff" + ], + [ + "#4d606e", + "#3fbac2", + "#d3d4d8", + "#f5f5f5" + ], + [ + "#a9eee6", + "#fefaec", + "#f38181", + "#625772" + ], + [ + "#3a0088", + "#930077", + "#e61c5d", + "#ffbd39" + ], + [ + "#adf7d1", + "#95e8d7", + "#7dace4", + "#8971d0" + ], + [ + "#9ddcdc", + "#fff4e1", + "#ffebb7", + "#e67a7a" + ], + [ + "#66bfbf", + "#eaf6f6", + "#fcfefe", + "#f76b8a" + ], + [ + "#c7f3ff", + "#fdc7ff", + "#ffdcf5", + "#f2f4c3" + ], + [ + "#00204a", + "#005792", + "#00bbf0", + "#d9faff" + ], + [ + "#c8f4de", + "#a4e5d9", + "#66c6ba", + "#649dad" + ], + [ + "#253b6e", + "#1f5f8b", + "#1891ac", + "#d2ecf9" + ], + [ + "#a7efe9", + "#7fdfd4", + "#fbe1b6", + "#fbac91" + ], + [ + "#2a363b", + "#e84a5f", + "#ff847b", + "#fecea8" + ], + [ + "#f5eee6", + "#f3d7ca", + "#e6a4b4", + "#c86b85" + ], + [ + "#f8b595", + "#f67280", + "#c06c84", + "#6c5b7c" + ], + [ + "#ffd9e8", + "#de95ba", + "#7f4a88", + "#4a266a" + ], + [ + "#700961", + "#b80d57", + "#e03e36", + "#ff7c38" + ], + [ + "#dff5f2", + "#87dfd6", + "#46b7b9", + "#2f9296" + ], + [ + "#f69d9d", + "#ffeab6", + "#fdffba", + "#c0ffc2" + ], + [ + "#35477d", + "#6c5b7b", + "#c06c84", + "#f67280" + ], + [ + "#fbf0f0", + "#dfd3d3", + "#b8b0b0", + "#7c7575" + ], + [ + "#f6f6f6", + "#d6e4f0", + "#1e56a0", + "#163172" + ], + [ + "#fb929e", + "#ffdfdf", + "#fff6f6", + "#aedefc" + ], + [ + "#e4fffe", + "#a4f6f9", + "#ff99fe", + "#ba52ed" + ], + [ + "#071a52", + "#086972", + "#17b978", + "#a7ff83" + ], + [ + "#a1d9ff", + "#ca82f8", + "#ed93cb", + "#f2bbbb" + ], + [ + "#7a08fa", + "#a82ffc", + "#c264fe", + "#f8ecfd" + ], + [ + "#e7e6e1", + "#f7f6e7", + "#c1c0b9", + "#537791" + ], + [ + "#222831", + "#393e46", + "#00adb5", + "#00fff5" + ], + [ + "#f06868", + "#fab57a", + "#edf798", + "#80d6ff" + ], + [ + "#f4f7f7", + "#aacfd0", + "#79a8a9", + "#1f4e5f" + ], + [ + "#a6e4e7", + "#f9f9f9", + "#ebcbae", + "#8f8787" + ], + [ + "#fa4659", + "#feffe4", + "#a3de83", + "#2eb872" + ], + [ + "#f47c7c", + "#f7f48b", + "#a1de93", + "#70a1d7" + ], + [ + "#ffffc1", + "#ffd2a5", + "#ffa8b8", + "#d988bc" + ], + [ + "#f8b195", + "#f67280", + "#c06c84", + "#355c7d" + ], + [ + "#f4f7f7", + "#aacfd0", + "#5da0a2", + "#34495e" + ], + [ + "#29c6cd", + "#f6e4c4", + "#fea386", + "#f19584" + ] +] diff --git a/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-2.json b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-2.json new file mode 100644 index 00000000..3b79ac8f --- /dev/null +++ b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-2.json @@ -0,0 +1,695 @@ +[ + [ + "#69d2e7", + "#a7dbd8", + "#e0e4cc", + "#f38630", + "#fa6900" + ], + [ + "#fe4365", + "#fc9d9a", + "#f9cdad", + "#c8c8a9", + "#83af9b" + ], + [ + "#ecd078", + "#d95b43", + "#c02942", + "#542437", + "#53777a" + ], + [ + "#556270", + "#4ecdc4", + "#c7f464", + "#ff6b6b", + "#c44d58" + ], + [ + "#774f38", + "#e08e79", + "#f1d4af", + "#ece5ce", + "#c5e0dc" + ], + [ + "#e8ddcb", + "#cdb380", + "#036564", + "#033649", + "#031634" + ], + [ + "#490a3d", + "#bd1550", + "#e97f02", + "#f8ca00", + "#8a9b0f" + ], + [ + "#594f4f", + "#547980", + "#45ada8", + "#9de0ad", + "#e5fcc2" + ], + [ + "#00a0b0", + "#6a4a3c", + "#cc333f", + "#eb6841", + "#edc951" + ], + [ + "#e94e77", + "#d68189", + "#c6a49a", + "#c6e5d9", + "#f4ead5" + ], + [ + "#3fb8af", + "#7fc7af", + "#dad8a7", + "#ff9e9d", + "#ff3d7f" + ], + [ + "#d9ceb2", + "#948c75", + "#d5ded9", + "#7a6a53", + "#99b2b7" + ], + [ + "#ffffff", + "#cbe86b", + "#f2e9e1", + "#1c140d", + "#cbe86b" + ], + [ + "#efffcd", + "#dce9be", + "#555152", + "#2e2633", + "#99173c" + ], + [ + "#343838", + "#005f6b", + "#008c9e", + "#00b4cc", + "#00dffc" + ], + [ + "#413e4a", + "#73626e", + "#b38184", + "#f0b49e", + "#f7e4be" + ], + [ + "#ff4e50", + "#fc913a", + "#f9d423", + "#ede574", + "#e1f5c4" + ], + [ + "#99b898", + "#fecea8", + "#ff847c", + "#e84a5f", + "#2a363b" + ], + [ + "#655643", + "#80bca3", + "#f6f7bd", + "#e6ac27", + "#bf4d28" + ], + [ + "#00a8c6", + "#40c0cb", + "#f9f2e7", + "#aee239", + "#8fbe00" + ], + [ + "#351330", + "#424254", + "#64908a", + "#e8caa4", + "#cc2a41" + ], + [ + "#554236", + "#f77825", + "#d3ce3d", + "#f1efa5", + "#60b99a" + ], + [ + "#5d4157", + "#838689", + "#a8caba", + "#cad7b2", + "#ebe3aa" + ], + [ + "#8c2318", + "#5e8c6a", + "#88a65e", + "#bfb35a", + "#f2c45a" + ], + [ + "#fad089", + "#ff9c5b", + "#f5634a", + "#ed303c", + "#3b8183" + ], + [ + "#ff4242", + "#f4fad2", + "#d4ee5e", + "#e1edb9", + "#f0f2eb" + ], + [ + "#f8b195", + "#f67280", + "#c06c84", + "#6c5b7b", + "#355c7d" + ], + [ + "#d1e751", + "#ffffff", + "#000000", + "#4dbce9", + "#26ade4" + ], + [ + "#1b676b", + "#519548", + "#88c425", + "#bef202", + "#eafde6" + ], + [ + "#5e412f", + "#fcebb6", + "#78c0a8", + "#f07818", + "#f0a830" + ], + [ + "#bcbdac", + "#cfbe27", + "#f27435", + "#f02475", + "#3b2d38" + ], + [ + "#452632", + "#91204d", + "#e4844a", + "#e8bf56", + "#e2f7ce" + ], + [ + "#eee6ab", + "#c5bc8e", + "#696758", + "#45484b", + "#36393b" + ], + [ + "#f0d8a8", + "#3d1c00", + "#86b8b1", + "#f2d694", + "#fa2a00" + ], + [ + "#2a044a", + "#0b2e59", + "#0d6759", + "#7ab317", + "#a0c55f" + ], + [ + "#f04155", + "#ff823a", + "#f2f26f", + "#fff7bd", + "#95cfb7" + ], + [ + "#b9d7d9", + "#668284", + "#2a2829", + "#493736", + "#7b3b3b" + ], + [ + "#b3cc57", + "#ecf081", + "#ffbe40", + "#ef746f", + "#ab3e5b" + ], + [ + "#bbbb88", + "#ccc68d", + "#eedd99", + "#eec290", + "#eeaa88" + ], + [ + "#a3a948", + "#edb92e", + "#f85931", + "#ce1836", + "#009989" + ], + [ + "#aab3ab", + "#c4cbb7", + "#ebefc9", + "#eee0b7", + "#e8caaf" + ], + [ + "#300030", + "#480048", + "#601848", + "#c04848", + "#f07241" + ], + [ + "#e8d5b7", + "#0e2430", + "#fc3a51", + "#f5b349", + "#e8d5b9" + ], + [ + "#67917a", + "#170409", + "#b8af03", + "#ccbf82", + "#e33258" + ], + [ + "#607848", + "#789048", + "#c0d860", + "#f0f0d8", + "#604848" + ], + [ + "#b6d8c0", + "#c8d9bf", + "#dadabd", + "#ecdbbc", + "#fedcba" + ], + [ + "#ab526b", + "#bca297", + "#c5ceae", + "#f0e2a4", + "#f4ebc3" + ], + [ + "#a8e6ce", + "#dcedc2", + "#ffd3b5", + "#ffaaa6", + "#ff8c94" + ], + [ + "#3e4147", + "#fffedf", + "#dfba69", + "#5a2e2e", + "#2a2c31" + ], + [ + "#fc354c", + "#29221f", + "#13747d", + "#0abfbc", + "#fcf7c5" + ], + [ + "#cc0c39", + "#e6781e", + "#c8cf02", + "#f8fcc1", + "#1693a7" + ], + [ + "#a7c5bd", + "#e5ddcb", + "#eb7b59", + "#cf4647", + "#524656" + ], + [ + "#1c2130", + "#028f76", + "#b3e099", + "#ffeaad", + "#d14334" + ], + [ + "#edebe6", + "#d6e1c7", + "#94c7b6", + "#403b33", + "#d3643b" + ], + [ + "#dad6ca", + "#1bb0ce", + "#4f8699", + "#6a5e72", + "#563444" + ], + [ + "#5c323e", + "#a82743", + "#e15e32", + "#c0d23e", + "#e5f04c" + ], + [ + "#fdf1cc", + "#c6d6b8", + "#987f69", + "#e3ad40", + "#fcd036" + ], + [ + "#230f2b", + "#f21d41", + "#ebebbc", + "#bce3c5", + "#82b3ae" + ], + [ + "#b9d3b0", + "#81bda4", + "#b28774", + "#f88f79", + "#f6aa93" + ], + [ + "#3a111c", + "#574951", + "#83988e", + "#bcdea5", + "#e6f9bc" + ], + [ + "#5e3929", + "#cd8c52", + "#b7d1a3", + "#dee8be", + "#fcf7d3" + ], + [ + "#1c0113", + "#6b0103", + "#a30006", + "#c21a01", + "#f03c02" + ], + [ + "#000000", + "#9f111b", + "#b11623", + "#292c37", + "#cccccc" + ], + [ + "#382f32", + "#ffeaf2", + "#fcd9e5", + "#fbc5d8", + "#f1396d" + ], + [ + "#e3dfba", + "#c8d6bf", + "#93ccc6", + "#6cbdb5", + "#1a1f1e" + ], + [ + "#f6f6f6", + "#e8e8e8", + "#333333", + "#990100", + "#b90504" + ], + [ + "#1b325f", + "#9cc4e4", + "#e9f2f9", + "#3a89c9", + "#f26c4f" + ], + [ + "#a1dbb2", + "#fee5ad", + "#faca66", + "#f7a541", + "#f45d4c" + ], + [ + "#951f2b", + "#f5f4d7", + "#e0dfb1", + "#a5a36c", + "#535233" + ], + [ + "#5e9fa3", + "#dcd1b4", + "#fab87f", + "#f87e7b", + "#b05574" + ], + [ + "#c1b398", + "#605951", + "#fbeec2", + "#61a6ab", + "#accec0" + ], + [ + "#8dccad", + "#988864", + "#fea6a2", + "#f9d6ac", + "#ffe9af" + ], + [ + "#2d2d29", + "#215a6d", + "#3ca2a2", + "#92c7a3", + "#dfece6" + ], + [ + "#413d3d", + "#040004", + "#c8ff00", + "#fa023c", + "#4b000f" + ], + [ + "#ffefd3", + "#fffee4", + "#d0ecea", + "#9fd6d2", + "#8b7a5e" + ], + [ + "#eff3cd", + "#b2d5ba", + "#61ada0", + "#248f8d", + "#605063" + ], + [ + "#f8edd1", + "#d88a8a", + "#474843", + "#9d9d93", + "#c5cfc6" + ], + [ + "#cfffdd", + "#b4dec1", + "#5c5863", + "#a85163", + "#ff1f4c" + ], + [ + "#ff003c", + "#ff8a00", + "#fabe28", + "#88c100", + "#00c176" + ], + [ + "#9dc9ac", + "#fffec7", + "#f56218", + "#ff9d2e", + "#919167" + ], + [ + "#046d8b", + "#309292", + "#2fb8ac", + "#93a42a", + "#ecbe13" + ], + [ + "#a8a7a7", + "#cc527a", + "#e8175d", + "#474747", + "#363636" + ], + [ + "#4e395d", + "#827085", + "#8ebe94", + "#ccfc8e", + "#dc5b3e" + ], + [ + "#f38a8a", + "#55443d", + "#a0cab5", + "#cde9ca", + "#f1edd0" + ], + [ + "#a70267", + "#f10c49", + "#fb6b41", + "#f6d86b", + "#339194" + ], + [ + "#4d3b3b", + "#de6262", + "#ffb88c", + "#ffd0b3", + "#f5e0d3" + ], + [ + "#4e4d4a", + "#353432", + "#94ba65", + "#2790b0", + "#2b4e72" + ], + [ + "#ffedbf", + "#f7803c", + "#f54828", + "#2e0d23", + "#f8e4c1" + ], + [ + "#0ca5b0", + "#4e3f30", + "#fefeeb", + "#f8f4e4", + "#a5b3aa" + ], + [ + "#fffbb7", + "#a6f6af", + "#66b6ab", + "#5b7c8d", + "#4f2958" + ], + [ + "#edf6ee", + "#d1c089", + "#b3204d", + "#412e28", + "#151101" + ], + [ + "#9d7e79", + "#ccac95", + "#9a947c", + "#748b83", + "#5b756c" + ], + [ + "#fcfef5", + "#e9ffe1", + "#cdcfb7", + "#d6e6c3", + "#fafbe3" + ], + [ + "#9cddc8", + "#bfd8ad", + "#ddd9ab", + "#f7af63", + "#633d2e" + ], + [ + "#aaff00", + "#ffaa00", + "#ff00aa", + "#aa00ff", + "#00aaff" + ], + [ + "#30261c", + "#403831", + "#36544f", + "#1f5f61", + "#0b8185" + ], + [ + "#d1313d", + "#e5625c", + "#f9bf76", + "#8eb2c5", + "#615375" + ], + [ + "#805841", + "#dcf7f3", + "#fffcdd", + "#ffd8d8", + "#f5a2a2" + ], + [ + "#73c8a9", + "#dee1b6", + "#e1b866", + "#bd5532", + "#373b44" + ] +] diff --git a/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-3.json b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-3.json new file mode 100644 index 00000000..f0912e4e --- /dev/null +++ b/orx-palette/src/main/resources/org/openrndr/extra/palette/collections/collection-3.json @@ -0,0 +1,702 @@ +[ + [ + "#247ba0", + "#70c1b3", + "#b2dbbf", + "#f3ffbd", + "#ff1654" + ], + [ + "#05668d", + "#028090", + "#00a896", + "#02c39a", + "#f0f3bd" + ], + [ + "#011627", + "#fdfffc", + "#2ec4b6", + "#e71d36", + "#ff9f1c" + ], + [ + "#e63946", + "#f1faee", + "#a8dadc", + "#457b9d", + "#1d3557" + ], + [ + "#ffcdb2", + "#ffb4a2", + "#e5989b", + "#b5838d", + "#6d6875" + ], + [ + "#50514f", + "#f25f5c", + "#ffe066", + "#247ba0", + "#70c1b3" + ], + [ + "#264653", + "#2a9d8f", + "#e9c46a", + "#f4a261", + "#e76f51" + ], + [ + "#1a535c", + "#4ecdc4", + "#f7fff7", + "#ff6b6b", + "#ffe66d" + ], + [ + "#2b2d42", + "#8d99ae", + "#edf2f4", + "#ef233c", + "#d90429" + ], + [ + "#ffffff", + "#84dcc6", + "#a5ffd6", + "#ffa69e", + "#ff686b" + ], + [ + "#ffffff", + "#00171f", + "#003459", + "#007ea7", + "#00a8e8" + ], + [ + "#d8e2dc", + "#ffe5d9", + "#ffcad4", + "#f4acb7", + "#9d8189" + ], + [ + "#fe938c", + "#e6b89c", + "#ead2ac", + "#9cafb7", + "#4281a4" + ], + [ + "#5bc0eb", + "#fde74c", + "#9bc53d", + "#e55934", + "#fa7921" + ], + [ + "#ed6a5a", + "#f4f1bb", + "#9bc1bc", + "#5ca4a9", + "#e6ebe0" + ], + [ + "#ef476f", + "#ffd166", + "#06d6a0", + "#118ab2", + "#073b4c" + ], + [ + "#0b132b", + "#1c2541", + "#3a506b", + "#5bc0be", + "#6fffe9" + ], + [ + "#bce784", + "#5dd39e", + "#348aa7", + "#525174", + "#513b56" + ], + [ + "#003049", + "#d62828", + "#f77f00", + "#fcbf49", + "#eae2b7" + ], + [ + "#000000", + "#14213d", + "#fca311", + "#e5e5e5", + "#ffffff" + ], + [ + "#9c89b8", + "#f0a6ca", + "#efc3e6", + "#f0e6ef", + "#b8bedd" + ], + [ + "#e8e9f3", + "#cecece", + "#a6a6a8", + "#272635", + "#b1e5f2" + ], + [ + "#defffc", + "#e2e4f6", + "#e7c8dd", + "#dbafc1", + "#86626e" + ], + [ + "#a31621", + "#fcf7f8", + "#ced3dc", + "#4e8098", + "#90c2e7" + ], + [ + "#04080f", + "#507dbc", + "#a1c6ea", + "#bbd1ea", + "#dae3e5" + ], + [ + "#b8b8d1", + "#5b5f97", + "#ffc145", + "#fffffb", + "#ff6b6c" + ], + [ + "#2a2b2a", + "#706c61", + "#f8f4e3", + "#e5446d", + "#ff8966" + ], + [ + "#eae0cc", + "#c9ada1", + "#a0a083", + "#798478", + "#4d6a6d" + ], + [ + "#092327", + "#0b5351", + "#00a9a5", + "#4e8098", + "#90c2e7" + ], + [ + "#fcd0a1", + "#b1b695", + "#53917e", + "#63535b", + "#6d1a36" + ], + [ + "#161925", + "#23395b", + "#406e8e", + "#8ea8c3", + "#cbf7ed" + ], + [ + "#124e78", + "#f0f0c9", + "#f2bb05", + "#d74e09", + "#6e0e0a" + ], + [ + "#bbdef0", + "#00a6a6", + "#efca08", + "#f49f0a", + "#f08700" + ], + [ + "#ef798a", + "#f7a9a8", + "#7d82b8", + "#613f75", + "#e5c3d1" + ], + [ + "#75dddd", + "#508991", + "#172a3a", + "#004346", + "#09bc8a" + ], + [ + "#363537", + "#ef2d56", + "#ed7d3a", + "#8cd867", + "#2fbf71" + ], + [ + "#8c1c13", + "#bf4342", + "#e7d7c1", + "#a78a7f", + "#735751" + ], + [ + "#fb3640", + "#605f5e", + "#1d3461", + "#1f487e", + "#247ba0" + ], + [ + "#eac435", + "#345995", + "#e40066", + "#03cea4", + "#fb4d3d" + ], + [ + "#f1e8b8", + "#f9e784", + "#e58f65", + "#d05353", + "#191919" + ], + [ + "#1a1423", + "#3d314a", + "#684756", + "#96705b", + "#ab8476" + ], + [ + "#4c5760", + "#93a8ac", + "#d7ceb2", + "#a59e8c", + "#66635b" + ], + [ + "#292f36", + "#4ecdc4", + "#f7fff7", + "#ff6b6b", + "#ffe66d" + ], + [ + "#540d6e", + "#ee4266", + "#ffd23f", + "#3bceac", + "#0ead69" + ], + [ + "#c9cba3", + "#ffe1a8", + "#e26d5c", + "#723d46", + "#472d30" + ], + [ + "#ffa69e", + "#faf3dd", + "#b8f2e6", + "#aed9e0", + "#5e6472" + ], + [ + "#1b998b", + "#2d3047", + "#fffd82", + "#ff9b71", + "#e84855" + ], + [ + "#1be7ff", + "#6eeb83", + "#e4ff1a", + "#e8aa14", + "#ff5714" + ], + [ + "#f0b67f", + "#fe5f55", + "#d6d1b1", + "#c7efcf", + "#eef5db" + ], + [ + "#d3f8e2", + "#e4c1f9", + "#f694c1", + "#ede7b1", + "#a9def9" + ], + [ + "#fbfbf2", + "#e5e6e4", + "#cfd2cd", + "#a6a2a2", + "#847577" + ], + [ + "#6699cc", + "#fff275", + "#ff8c42", + "#ff3c38", + "#a23e48" + ], + [ + "#f8ffe5", + "#06d6a0", + "#1b9aaa", + "#ef476f", + "#ffc43d" + ], + [ + "#220901", + "#621708", + "#941b0c", + "#bc3908", + "#f6aa1c" + ], + [ + "#e0fbfc", + "#c2dfe3", + "#9db4c0", + "#5c6b73", + "#253237" + ], + [ + "#353535", + "#3c6e71", + "#ffffff", + "#d9d9d9", + "#284b63" + ], + [ + "#2d3142", + "#bfc0c0", + "#ffffff", + "#ef8354", + "#4f5d75" + ], + [ + "#ff5e5b", + "#d8d8d8", + "#ffffea", + "#00cecb", + "#ffed66" + ], + [ + "#ffbe0b", + "#fb5607", + "#ff006e", + "#8338ec", + "#3a86ff" + ], + [ + "#b8d8ba", + "#d9dbbc", + "#fcddbc", + "#ef959d", + "#69585f" + ], + [ + "#0b132b", + "#1c2541", + "#3a506b", + "#5bc0be", + "#ffffff" + ], + [ + "#faf3dd", + "#c8d5b9", + "#8fc0a9", + "#68b0ab", + "#4a7c59" + ], + [ + "#f4f1de", + "#e07a5f", + "#3d405b", + "#81b29a", + "#f2cc8f" + ], + [ + "#edeec9", + "#dde7c7", + "#bfd8bd", + "#98c9a3", + "#77bfa3" + ], + [ + "#64a6bd", + "#90a8c3", + "#ada7c9", + "#d7b9d5", + "#f4cae0" + ], + [ + "#4c5454", + "#ff715b", + "#ffffff", + "#1ea896", + "#523f38" + ], + [ + "#495867", + "#577399", + "#bdd5ea", + "#f7f7ff", + "#fe5f55" + ], + [ + "#ff4e00", + "#8ea604", + "#f5bb00", + "#ec9f05", + "#bf3100" + ], + [ + "#36213e", + "#554971", + "#63768d", + "#8ac6d0", + "#b8f3ff" + ], + [ + "#a9e5bb", + "#fcf6b1", + "#f7b32b", + "#f72c25", + "#2d1e2f" + ], + [ + "#bfc3ba", + "#a9aca9", + "#60495a", + "#3f3244", + "#2f2235" + ], + [ + "#fe5f55", + "#f0b67f", + "#d6d1b1", + "#c7efcf", + "#eef5db" + ], + [ + "#033f63", + "#28666e", + "#7c9885", + "#b5b682", + "#fedc97" + ], + [ + "#0d1321", + "#1d2d44", + "#3e5c76", + "#748cab", + "#f0ebd8" + ], + [ + "#773344", + "#e3b5a4", + "#f5e9e2", + "#0b0014", + "#d44d5c" + ], + [ + "#52489c", + "#4062bb", + "#59c3c3", + "#ebebeb", + "#f45b69" + ], + [ + "#283d3b", + "#197278", + "#edddd4", + "#c44536", + "#772e25" + ], + [ + "#000000", + "#2f4550", + "#586f7c", + "#b8dbd9", + "#f4f4f9" + ], + [ + "#565264", + "#706677", + "#a6808c", + "#ccb7ae", + "#d6cfcb" + ], + [ + "#4f000b", + "#720026", + "#ce4257", + "#ff7f51", + "#ff9b54" + ], + [ + "#fcfcfc", + "#f7567c", + "#fffae3", + "#99e1d9", + "#5d576b" + ], + [ + "#d7263d", + "#f46036", + "#2e294e", + "#1b998b", + "#c5d86d" + ], + [ + "#fffcf2", + "#ccc5b9", + "#403d39", + "#252422", + "#eb5e28" + ], + [ + "#0fa3b1", + "#d9e5d6", + "#eddea4", + "#f7a072", + "#ff9b42" + ], + [ + "#ff6700", + "#ebebeb", + "#c0c0c0", + "#3a6ea5", + "#004e98" + ], + [ + "#dd6e42", + "#e8dab2", + "#4f6d7a", + "#c0d6df", + "#eaeaea" + ], + [ + "#102542", + "#f87060", + "#cdd7d6", + "#b3a394", + "#ffffff" + ], + [ + "#320a28", + "#511730", + "#8e443d", + "#cb9173", + "#e0d68a" + ], + [ + "#0a1128", + "#001f54", + "#034078", + "#1282a2", + "#fefcfb" + ], + [ + "#ffc09f", + "#ffee93", + "#fcf5c7", + "#a0ced9", + "#adf7b6" + ], + [ + "#086788", + "#07a0c3", + "#f0c808", + "#fff1d0", + "#dd1c1a" + ], + [ + "#97f9f9", + "#a4def9", + "#c1e0f7", + "#cfbae1", + "#c59fc9" + ], + [ + "#ffe74c", + "#ff5964", + "#ffffff", + "#38618c", + "#35a7ff" + ], + [ + "#eca400", + "#eaf8bf", + "#006992", + "#27476e", + "#001d4a" + ], + [ + "#0d0630", + "#18314f", + "#384e77", + "#8bbeb2", + "#e6f9af" + ], + [ + "#272727", + "#fed766", + "#009fb7", + "#696773", + "#eff1f3" + ], + [ + "#533a71", + "#6184d8", + "#50c5b7", + "#9cec5b", + "#f0f465" + ], + [ + "#3a2e39", + "#1e555c", + "#f4d8cd", + "#edb183", + "#f15152" + ], + [ + "#ddd8c4", + "#a3c9a8", + "#84b59f", + "#69a297", + "#50808e" + ], + [ + "#11151c", + "#212d40", + "#364156", + "#7d4e57", + "#d66853" + ] +] \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 96fe2a44..72c3bc66 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,9 +17,10 @@ include 'orx-camera', 'orx-obj-loader', 'orx-olive', 'orx-osc', + 'orx-palette', 'orx-poisson-fill', 'orx-shader-phrases', - 'orx-kinect-common', + 'orx-kinect-common', 'orx-kinect-v1', 'orx-kinect-v1-natives-linux-x64', 'orx-kinect-v1-natives-macos',