Mercurial > emacs
changeset 111709:4483c6423ad1
shr-color.el (shr-color-visible): Don't bug out if the colour names don't exist.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Thu, 25 Nov 2010 07:46:51 +0000 |
parents | 13061011e6ac |
children | bcb41b2787e8 |
files | lisp/gnus/ChangeLog lisp/gnus/shr-color.el |
diffstat | 2 files changed, 35 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog Thu Nov 25 05:09:25 2010 +0000 +++ b/lisp/gnus/ChangeLog Thu Nov 25 07:46:51 2010 +0000 @@ -1,3 +1,8 @@ +2010-11-25 Lars Magne Ingebrigtsen <larsi@gnus.org> + + * shr-color.el (shr-color-visible): Don't bug out if the colour names + don't exist. + 2010-11-25 Katsumi Yamaoka <yamaoka@jpl.org> * mml.el (mml-preview): Make sure to bind gnus-displaying-mime to nil,
--- a/lisp/gnus/shr-color.el Thu Nov 25 05:09:25 2010 +0000 +++ b/lisp/gnus/shr-color.el Thu Nov 25 07:46:51 2010 +0000 @@ -324,29 +324,36 @@ new background color will not be computed. Only the foreground color will be adapted to be visible on BG." ;; Convert fg and bg to CIE Lab - (let* ((fg-lab (apply 'rgb->lab (rgb->normalize fg))) - (bg-lab (apply 'rgb->lab (rgb->normalize bg))) - ;; Compute color distance using CIE DE 2000 - (fg-bg-distance (color-lab-ciede2000 fg-lab bg-lab)) - ;; Compute luminance distance (substract L component) - (luminance-distance (abs (- (car fg-lab) (car bg-lab))))) - (if (and (>= fg-bg-distance shr-color-visible-distance-min) - (>= luminance-distance shr-color-visible-luminance-min)) - (list bg fg) - ;; Not visible, try to change luminance to make them visible - (let ((Ls (set-minimum-interval (car bg-lab) (car fg-lab) 0 100 - shr-color-visible-luminance-min - fixed-background))) - (unless fixed-background - (setcar bg-lab (car Ls))) - (setcar fg-lab (cadr Ls)) - (list - (if fixed-background - bg - (apply 'format "#%02x%02x%02x" - (mapcar (lambda (x) (* (max (min 1 x) 0) 255)) (apply 'lab->rgb bg-lab)))) - (apply 'format "#%02x%02x%02x" - (mapcar (lambda (x) (* (max (min 1 x) 0) 255)) (apply 'lab->rgb fg-lab)))))))) + (let ((fg-norm (rgb->normalize fg)) + (bg-norm (rgb->normalize bg))) + (if (or (null fg-norm) + (null bg-norm)) + (list bg fg) + (let* ((fg-lab (apply 'rgb->lab fg-norm)) + (bg-lab (apply 'rgb->lab bg-norm)) + ;; Compute color distance using CIE DE 2000 + (fg-bg-distance (color-lab-ciede2000 fg-lab bg-lab)) + ;; Compute luminance distance (substract L component) + (luminance-distance (abs (- (car fg-lab) (car bg-lab))))) + (if (and (>= fg-bg-distance shr-color-visible-distance-min) + (>= luminance-distance shr-color-visible-luminance-min)) + (list bg fg) + ;; Not visible, try to change luminance to make them visible + (let ((Ls (set-minimum-interval (car bg-lab) (car fg-lab) 0 100 + shr-color-visible-luminance-min + fixed-background))) + (unless fixed-background + (setcar bg-lab (car Ls))) + (setcar fg-lab (cadr Ls)) + (list + (if fixed-background + bg + (apply 'format "#%02x%02x%02x" + (mapcar (lambda (x) (* (max (min 1 x) 0) 255)) + (apply 'lab->rgb bg-lab)))) + (apply 'format "#%02x%02x%02x" + (mapcar (lambda (x) (* (max (min 1 x) 0) 255)) + (apply 'lab->rgb fg-lab)))))))))) (provide 'shr-color)