branch: externals/modus-themes
commit d0f1537f95ff8aed5c1e7a82024567fb4c586d2e
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>

    Implement modus-themes-color-warm-p because color-distance fails to do what 
I assumed
---
 modus-themes.el | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/modus-themes.el b/modus-themes.el
index 015c95f7e0..b8119926a5 100644
--- a/modus-themes.el
+++ b/modus-themes.el
@@ -7546,6 +7546,20 @@ inclusive."
                      #'color-darken-name)))
     (funcall fn color percent)))
 
+;; NOTE 2025-11-25: I used to rely on `color-distance', thinking that
+;; it would do the right thing here:
+;;
+;;     (> (color-distance color "#ff0000") (color-distance color "#0000ff"))
+;;
+;; But my understanding of "warm" versus "cold" is simple, so better
+;; do it my way.
+(defun modus-themes-color-warm-p (color)
+  "Return non-nil if COLOR is warm.
+A warm color has more contribution from the red and green channels of
+light than from the green and blue."
+  (pcase-let ((`(,r ,g ,b) (color-name-to-rgb color)))
+    (> (+ r g) (+ g b))))
+
 (defun modus-themes-color-is-warm-or-cool-p (color fallback-preference)
   "Return `warm' or `cool' for COLOR depending on its value.
 A warm color is closer to red than to blue.  If COLOR is neutral, then

Reply via email to