From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Drew Adams" Newsgroups: gmane.emacs.devel Subject: RE: color.el Date: Sat, 19 Feb 2011 16:17:19 -0800 Message-ID: <1F6E522A72D94273AA3506D14EC941BC@us.oracle.com> References: <87sjvjj2mz.fsf@stupidchicken.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_000B_01CBD050.7C2435A0" X-Trace: dough.gmane.org 1298161118 20195 80.91.229.12 (20 Feb 2011 00:18:38 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 20 Feb 2011 00:18:38 +0000 (UTC) Cc: emacs-devel@gnu.org To: "'Chong Yidong'" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Feb 20 01:18:34 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Pqx0B-0001eF-Rk for ged-emacs-devel@m.gmane.org; Sun, 20 Feb 2011 01:18:33 +0100 Original-Received: from localhost ([127.0.0.1]:53220 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pqx0A-0002jw-RX for ged-emacs-devel@m.gmane.org; Sat, 19 Feb 2011 19:18:14 -0500 Original-Received: from [140.186.70.92] (port=45368 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pqx05-0002hA-6H for emacs-devel@gnu.org; Sat, 19 Feb 2011 19:18:10 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pqx03-0005hg-DN for emacs-devel@gnu.org; Sat, 19 Feb 2011 19:18:09 -0500 Original-Received: from rcsinet10.oracle.com ([148.87.113.121]:52010) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pqx02-0005ha-Vz for emacs-devel@gnu.org; Sat, 19 Feb 2011 19:18:07 -0500 Original-Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by rcsinet10.oracle.com (Switch-3.4.2/Switch-3.4.2) with ESMTP id p1K0I3lo002955 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 20 Feb 2011 00:18:05 GMT Original-Received: from acsmt355.oracle.com (acsmt355.oracle.com [141.146.40.155]) by acsinet15.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id p1K03nnR001129; Sun, 20 Feb 2011 00:18:03 GMT Original-Received: from abhmt016.oracle.com by acsmt354.oracle.com with ESMTP id 1070404201298161042; Sat, 19 Feb 2011 16:17:22 -0800 Original-Received: from dradamslap1 (/10.159.34.67) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 19 Feb 2011 16:17:21 -0800 X-Mailer: Microsoft Office Outlook 11 In-Reply-To: <87sjvjj2mz.fsf@stupidchicken.com> Thread-Index: AcvQY3aUF8OWdRFSRmOWwxPoatdeyQAGswsQ X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5994 X-Source-IP: acsmt355.oracle.com [141.146.40.155] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4D605DBB.00AC:SCFMA4539814,ss=1,fgs=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 148.87.113.121 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:136249 Archived-At: This is a multi-part message in MIME format. ------=_NextPart_000_000B_01CBD050.7C2435A0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit > Thanks. I'll start applying some parts of the patch shortly, but here > are a few points worth discussing: > > 1. Renaming color-rgb->hsv to color-rgb-to-hsv, etc. > > The latter is a bit more in line with other Emacs Lisp function > names, though we do have a few named "X->Y". > > Any thoughts from Emacs developers? I am not sure myself. I applied the renamings for the following reasons, but you can choose whatever names you like: a. There is already another function `color-rgb-to-hsv', in `facemenu.el'. As I said, I did not send a patch for `facemenu.el'. Presumably that function as well as `read-color' would be removed from `facemenu.el' in favor of those functions in `color.el'. (You might also consider moving `list-colors-display' to `color.el'.) b. There was one of the *->* functions that was not in fact a *-to-* function: `color-rgb->normalize'. IOW, it probably should not have followed the same naming convention. I renamed it to `color-rgb-normalize', not to `color-rgb-to-normalize'. (When the name includes *-to-* it is arguably easier to see it as a conversion function.) c. The hexrgb.el functions that were merged follow the *-to-* naming convention. d. Only two more characters are needed for *-to-* than for *->*, and the former is more readable, IMO - clear to anyone without wondering what the meaning of -> might be. e. There are many, many *-to-* functions in Emacs, and many (most?) of them represent conversions of some kind. On the other hand, the only *->* functions in Emacs are the internal functions `compilation--*->*' and `completion-pcm--pattern->regex', in all of which I think the `->' represents essentially field selection, not format or data conversion. Yes, those are all relatively minor reasons, but they are the reasons behind the names used. > 2. Returning HUE in [0,1], rather than radians, by default. > > If we do this, I'd rather not add a separate *-radians function; we > should just decide on whether Emacs should represent hue > as [0,1], as radians, or as [0,360], and use that everywhere. The code I sent does not use [0,360] or radians. It uses decimal [0,1] for hue just as for all the other color components (red, green, blue, saturation, value). It uses the same units and ranges for component inputs and outputs, as well as for all component types. In practice, both [0,360] and [0,1] are common representations for hue, depending somewhat on the emphasis wrt use. But [0,255] is also common for RGB - and even for HSV. [0,360] is not used for any component other than hue, AFAIK. I don't see a problem with having two different functions that return these two kinds of values, for that reason: convenience for different uses. I have used the `hexrgb.el' version of RGB-to-HSV for a long time and find that it handles corner cases well. I can't vouch for the radians version provided. That function is not used in the rest of the `color.el' code - I don't know if it has been used in any Emacs code yet. (Note: I meant to also add a FIXME/TODO? comment for that radians version: the acceptable input RGB values need to be described. They are apparently [0,255], not [0,1].) In my own use I've found using decimal numbers for all components, and for both input and output values, to be convenient. Same kind of number, same range [0,1], for everything. Simple. That is easily interpreted by users (e.g. as percentages), easily incremented etc. in the same way over and over, and so on. That's to be contrasted with sometimes using [0,255] for RGB input; sometimes using [0,1] for RGB input; using [0,1] for S and V; and using [0,360] for H. And you will notice that no conversions have yet been provided by the `color-lab.el' code for radian HSV or HSL to RGB (see the FIXME/TODO? comments I added for that). Which RGB units and range would be used for the output of such functions - [0,1] or [0,255]? The interpretation of hue as an angle around a color cone or color wheel is fine for explaining things but is not always so useful in practice (e.g. GUI's). Look, for instance, at these typical color editors from the Wikipedia page describing HSV and HSL: http://en.wikipedia.org/wiki/File:Hsl-hsv-colorpickers.svg. Even though the explanation of hue that accompanies that illustration (on the HSV/HSL page) shows a color cone to introduce the concepts, this illustration indicates that in practice GUIs often use the same unit and range for all HSV components. As another commonly used example, see the attached screenshot of the color editor used in MS Word - it uses [0,255] for each component, for both RGB and HSL. (On the other hand, both Gimp and Photoshop use [0,360] for hue.) > For what it's worth, the Gimp, the Java color library, and the > Eclipse API all use [0,360]. Maybe we should do follow suit. Any > objections? I would object, but perhaps that doesn't count. ;-) IMO, Occam's razor argues for using the same units and ranges for all components and for both input and output. Unless a user is really thinking in terms of a color cone or color wheel, there is little reason to employ 0-360 or radians, IMO. Percentage is sensible enough to users. (That's so even though it is true that 0% hue = 100% hue - just as 0 deg = 360 deg and 0 rad = 2 pi rad.) And using the same units and ranges for input and output facilitates iteration and chaining. > 3. The functions for incrementing color components don't look very > useful to me. Surely it's simple enough for a Lisp program to > increment a member of a list. Is there any real world example of a > program using this part of hexrgb? The input and output are both RGB triplets, so you can apply the functions iteratively. Since such string triplets are used directly by Emacs for faces and frame parameter values, you can iteratively adjust those values directly. Staying within RGB triplets is quite handy, including wrt wraparound (F->0, 0->F) and wrt feedback for users. I use those increment functions in `doremi-frm.el' for defining commands that repeatedly increment various color components of different objects (faces, frame fg/bg). For example, command `doremi-face-fg+' lets a user incrementally change the foreground color of a given face - s?he can switch the color component (r,g,b,h,s,v) to be incremented at any time, and s?he can change the increment size at any time. There are other, similar such Do Re Mi commands. Those command definitions build on other `doremi-frm.el' functions, which in turn build on the `hexrgb-increment-*' functions. http://www.emacswiki.org/emacs/doremi-frm.el ------=_NextPart_000_000B_01CBD050.7C2435A0 Content-Type: image/png; name="throw-MS-Word-color-editor.PNG" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="throw-MS-Word-color-editor.PNG" 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 ------=_NextPart_000_000B_01CBD050.7C2435A0--