From d7a87ed5083a93532c61a5087b8288a586f96308 Mon Sep 17 00:00:00 2001 From: SpaiR Date: Sat, 23 Jan 2021 21:19:13 +0200 Subject: [PATCH] [API] Add ImColor#hslToColor methods --- .../src/main/java/imgui/ImColor.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/imgui-binding/src/main/java/imgui/ImColor.java b/imgui-binding/src/main/java/imgui/ImColor.java index 0014852..5c257a1 100644 --- a/imgui-binding/src/main/java/imgui/ImColor.java +++ b/imgui-binding/src/main/java/imgui/ImColor.java @@ -45,4 +45,65 @@ public final class ImColor { Integer.parseInt(hex.substring(7, 9), 16) ); } + + public static int hslToColor(final int h, final int s, final int l) { + return hslToColor(h, s, l, 1); + } + + public static int hslToColor(final int h, final int s, final int l, final float a) { + return hslToColor(h / 360f, s / 100f, l / 100f, a); + } + + public static int hslToColor(final float h, final float s, final float l) { + return hslToColor(h, s, l, 1); + } + + public static int hslToColor(final float h, final float s, final float l, final float a) { + final float q; + final float p; + final float r; + final float g; + final float b; + + // Achromatic + if (s == 0) { + r = l; + g = l; + b = l; + } else { + q = l < 0.5 ? (l * (1 + s)) : (l + s - l * s); + p = 2 * l - q; + r = hue2rgb(p, q, h + 1.0f / 3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1.0f / 3); + } + + return floatToColor(r, g, b, a); + } + + private static float hue2rgb(final float p, final float q, final float hue) { + float h = hue; + + if (h < 0) { + h += 1; + } + + if (h > 1) { + h -= 1; + } + + if (6 * h < 1) { + return p + ((q - p) * 6 * h); + } + + if (2 * h < 1) { + return q; + } + + if (3 * h < 2) { + return p + ((q - p) * 6 * ((2.0f / 3.0f) - h)); + } + + return p; + } }