]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
color-util: make return values of rgb_to_hsv() optional
authorLennart Poettering <lennart@poettering.net>
Fri, 19 Jan 2024 22:59:00 +0000 (23:59 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 23 Jan 2024 15:45:37 +0000 (16:45 +0100)
When we want to tint the bg color we don't care about the hue, we want
to set it ourself after all, hence make the arguments optional, so that
we don't even have to ask for it.

src/shared/color-util.c

index 776445ecfc5753bf53d3a4624517cd7db4538db5..9d714c0fff7fc9587f883dcf957de1bb08c3123b 100644 (file)
@@ -11,35 +11,38 @@ void rgb_to_hsv(double r, double g, double b,
         assert(r >= 0 && r <= 1);
         assert(g >= 0 && g <= 1);
         assert(b >= 0 && b <= 1);
-        assert(ret_h);
-        assert(ret_s);
-        assert(ret_v);
 
         double max_color = fmax(r, fmax(g, b));
         double min_color = fmin(r, fmin(g, b));
         double delta = max_color - min_color;
 
-        *ret_v = max_color * 100.0;
+        if (ret_v)
+                *ret_v = max_color * 100.0;
 
-        if (max_color > 0)
-                *ret_s = delta / max_color * 100.0;
-        else {
-                *ret_s = 0;
-                *ret_h = NAN;
+        if (max_color <= 0) {
+                if (ret_s)
+                        *ret_s = 0;
+                if (ret_h)
+                        *ret_h = NAN;
                 return;
         }
 
-        if (delta > 0) {
-                if (r >= max_color)
-                        *ret_h = 60 * fmod((g - b) / delta, 6);
-                else if (g >= max_color)
-                        *ret_h = 60 * (((b - r) / delta) + 2);
-                else if (b >= max_color)
-                        *ret_h = 60 * (((r - g) / delta) + 4);
-
-                *ret_h = fmod(*ret_h, 360);
-        } else
-                *ret_h = NAN;
+        if (ret_s)
+                *ret_s = delta / max_color * 100.0;
+
+        if (ret_h) {
+                if (delta > 0) {
+                        if (r >= max_color)
+                                *ret_h = 60 * fmod((g - b) / delta, 6);
+                        else if (g >= max_color)
+                                *ret_h = 60 * (((b - r) / delta) + 2);
+                        else if (b >= max_color)
+                                *ret_h = 60 * (((r - g) / delta) + 4);
+
+                        *ret_h = fmod(*ret_h, 360);
+                } else
+                        *ret_h = NAN;
+        }
 }
 
 void hsv_to_rgb(double h, double s, double v,