unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: David Kastrup <dak@gnu.org>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: face colors on 256 colors terminals
Date: Thu, 07 Apr 2005 12:23:10 +0200	[thread overview]
Message-ID: <x58y3uyjg1.fsf@lola.goethe.zz> (raw)
In-Reply-To: <200504070514.j375EBAH009933@scanner2.ics.uci.edu> (Dan Nicolaescu's message of "Wed, 06 Apr 2005 22:14:08 -0700")

Dan Nicolaescu <dann@ics.uci.edu> writes:

> David Kastrup <dak@gnu.org> writes:
>
>   > I am certain I am missing the context, but is this really
>   > related to the #RRGGBB notation in any manner?  It really looks
>   > awful to me if white gets defined as #ff00ff00ff00, so I'd like
>   > to be as bothersome as to be grateful for some factual
>   > reassurance that we are indeed catering here for a real instead
>   > of a perceived problem, and that the fix in that manner is the
>   > right thing to do.
>
> Well,  there patch has 3 parts. 
>
> Part1:
> The patch to xterm-register-default-colors changes the way the 8bit
> R/G/B values are computed for a 256 color xterm to match what the
> xterm currently does. This part should be correct and
> non-controversial.

Ok.

> Part2:
> xterm-rgb-convert-to-16bit converts an 8bit color value (say Y) to a 16bit
> color. As we discussed, the result can either be Y0 or YY.
> My empirical testing show that there's no visible difference between
> the two. 

If by "visible" you mean "undiscernible by the unadorned eye as long
as no gamma correction is applied", sure.  If by "visible" you mean
"undiscernible by the computer so that the heuristic-mask image
property has a chance of working with an explicit color", we are
talking something entirely different here.

man Xcolor:

[...]

STRUCTURES
	The XColor structure contains:

	typedef struct {
		unsigned long pixel; /* pixel value */
		unsigned short red, green, blue; /* rgb values */
		char flags;         /* DoRed, DoGreen, DoBlue */ 
		char pad;
	} XColor;

	The red, green, and blue values are always in the range 0 to
	65535 inclusive, independent of the number of bits actually
	used in the display hardware.  The server scales these
	values down to the range used by the hardware.  Black is
	represented by (0,0,0),  and white is represented by
	(65535,65535,65535).  In some functions, the flags member
        ^^^^^^^^^^^^^^^^^^^
	controls which of the red, green, and blue members is used
	and can be the inclusive OR of zero or more of DoRed,
	DoGreen, and  DoBlue.

I think it would be appropriate to use the same algorithm as
XParseColor would use on rgb:rrrr/gggg/bbbb: this is explicitly
described as the sort of scaled type that is also in the XColor manual
page.

The XColor manual page explicitly deprecates #rgb notation.

You can also look into

<URL:http://cvs.freedesktop.org/xorg/xc/lib/X11/XRGB.c?view=markup>

to see how they convert colors there.

To quote:

void
_XcmsResolveColor(
    XcmsCCC ccc,
    XcmsColor *pXcmsColor)
/*
 *	DESCRIPTION
 *	    Uses the X Server ResolveColor() algorithm to
 *	    modify values to closest values supported by hardware.
 *	    Old algorithm simply masked low-order bits.  The new algorithm
 *	    has the effect of replicating significant bits into lower order
 *	    bits in order to stretch the hardware value into all 16 bits.
 *
 *	    On a display with N-bit DACs, the "hardware" color is computed as:
 *
 *	    ((unsignedlong)(ClientValue >> (16-N)) * 0xFFFF) / ((1 << N) - 1)
 *		
 *
 *	RETURNS
 *		void.
 */

Now I can't promise that this is the absolutely canonical file for
this functionality: it is what I came across first when trying to
browse the X11 CVS.  It is likely that there are more relevant files
around.  If anybody has the X11 source on his computer, it would
appear that grepping for ResolveColor might be a good idae.

> Part3:
> color-name-rgb-alist contains the colors in rgb.txt converted to
> 16bit. It should use the same conversion as
> xterm-rgb-convert-to-16bit.

I think it should deliver the same results as XParseColor does, right?

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

  reply	other threads:[~2005-04-07 10:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-06  8:17 face colors on 256 colors terminals Dan Nicolaescu
2005-04-06 17:23 ` Eli Zaretskii
2005-04-06 17:36   ` David Kastrup
2005-04-06 17:46     ` Eli Zaretskii
2005-04-06 18:03       ` David Kastrup
2005-04-06 18:26     ` Dan Nicolaescu
2005-04-07 20:43     ` James Cloos
2005-04-08  1:17       ` Dan Nicolaescu
2005-04-08 10:52         ` Eli Zaretskii
2005-04-08 15:13           ` Dan Nicolaescu
2005-04-09  8:06             ` Eli Zaretskii
2005-04-06 17:52   ` Dan Nicolaescu
     [not found]     ` <01c53aea$Blat.v2.4$16ee4740@zahav.net.il>
2005-04-06 23:50       ` Dan Nicolaescu
2005-04-07  0:22         ` David Kastrup
2005-04-07  3:58           ` Eli Zaretskii
2005-04-07  5:14           ` Dan Nicolaescu
2005-04-07 10:23             ` David Kastrup [this message]
2005-04-08  1:13               ` Dan Nicolaescu
2005-04-07  3:55         ` Eli Zaretskii
     [not found]   ` <200504062134.j36LY8AH022227@scanner2.ics.uci.edu>
2005-04-07  3:53     ` Eli Zaretskii
2005-04-07 18:27       ` Dan Nicolaescu
2005-04-08 10:54         ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=x58y3uyjg1.fsf@lola.goethe.zz \
    --to=dak@gnu.org \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).