* Proposal: Windows Control Panel Colors
@ 2003-06-03 22:48 Michael Mauger
2003-06-03 23:40 ` Miles Bader
2003-06-05 23:29 ` Jason Rumney
0 siblings, 2 replies; 9+ messages in thread
From: Michael Mauger @ 2003-06-03 22:48 UTC (permalink / raw)
The following patch is intended to make NT Emacs more attractive. The
first portion of the patch adds the colors found on the Windows
control panel to the `w32-color-map'; the second portion of the patch
modifies some of the standard Emacs faces to use these colors under
w32. The result is that Emacs displays major frame components in
colors similar to the colors used in other applications. Menus and
scroll bars already follow the Windows theme because they use standard
Windows controls.
This functionality is needed in Windows because Windows lacks the Xrdb
color mapping capability that permits X11 applications to enforce this
type of uniform appearance across applications.
The colors added to the color map are named using the logical color
names in the registry prefixed with "W32". The list of color names
has been pretty constant across versions of Windows. I use this patch
on Win2K and Win98 without problems. The following is the list of
colors added under Win2k:
W32ActiveBorder
W32ActiveTitle
W32AppWorkSpace
W32Background
W32ButtonAlternateFace
W32ButtonDkShadow
W32ButtonFace
W32ButtonHilight
W32ButtonLight
W32ButtonShadow
W32ButtonText
W32GradientActiveTitle
W32GradientInactiveTitle
W32GrayText
W32Hilight
W32HilightText
W32HotTrackingColor
W32InactiveBorder
W32InactiveTitle
W32InactiveTitleText
W32InfoText
W32InfoWindow
W32Menu
W32MenuText
W32Scrollbar
W32TitleText
W32Window
W32WindowFrame
W32WindowText
The colors are stored under HKEY_CURRENT_USER\Control Panel\Colors in
the registry.
The Emacs faces that are modified are:
mode-line
bg: W32GradientActiveTitle
fg: W32ActiveTitleText
mode-line-inactive
bg: W32GradientInactiveTitle
fg: W32InactiveTitleText
toolbar
bg: W32Menu
fg: W32MenuText
region
bg: W32Hilight
fg: W32HilightText
Other possibilities include tooltip (W32InfoWindow/W32InfoText)
To see the impact of this patch you can view the following web page:
<http://www.geocities.com/mmaug/emacs/cpanel-emacs.html>
Use M-x list-colors-display to see the added colors.
If it's decided that this patch should be included, please check it
in. (I don't have access to do so, and I have submitted my copyright
assignment to GNU.)
Here's the patch:
Index: emacs/src/w32fns.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32fns.c,v
retrieving revision 1.216
diff -u -b -r1.216 w32fns.c
--- emacs/src/w32fns.c 24 May 2003 22:05:34 -0000 1.216
+++ emacs/src/w32fns.c 2 Jun 2003 04:24:32 -0000
@@ -1025,6 +1025,57 @@
return (cmap);
}
+#define W32_CPANEL_COLOR_PREFIX "W32"
+#define W32_CPANEL_COLOR_PREFIX_LEN ((sizeof W32_CPANEL_COLOR_PREFIX)-1)
+
+void
+w32_cpanel_colors (pcmap)
+ Lisp_Object* pcmap;
+{
+ HKEY hkey;
+
+ /* Lookup under the current user or local machine. */
+ if (RegOpenKeyEx (HKEY_CURRENT_USER, "Control Panel\\Colors", 0,
+ KEY_READ, &hkey) == ERROR_SUCCESS
+ || RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Control Panel\\Colors", 0,
+ KEY_READ, &hkey) == ERROR_SUCCESS)
+ {
+ DWORD dwIndex;
+ CHAR achName[256 + W32_CPANEL_COLOR_PREFIX_LEN];
+ DWORD cName;
+ char achRGB[64];
+ DWORD cRGB;
+ int red, green, blue;
+
+ strcpy(achName, W32_CPANEL_COLOR_PREFIX);
+
+ /* Enumerate each key and add its name and color to the color map
+ with the color name prefix. */
+ for (dwIndex = 0;
+ cName = ((sizeof achName) / (sizeof achName[0]))
+ - W32_CPANEL_COLOR_PREFIX_LEN,
+ cRGB = sizeof achRGB,
+ RegEnumValue(hkey, dwIndex,
+ (LPTSTR) achName + W32_CPANEL_COLOR_PREFIX_LEN,
+ (LPDWORD) &cName,
+ NULL, NULL,
+ (LPBYTE) achRGB, (LPDWORD) &cRGB) == ERROR_SUCCESS;
+ ++dwIndex)
+ {
+ if (sscanf (achRGB, " %u %u %u", &red, &green, &blue) == 3)
+ {
+ *pcmap = Fcons (Fcons (build_string (achName),
+ make_number (RGB (red, green, blue))),
+ *pcmap);
+ }
+ }
+
+ RegCloseKey (hkey);
+ }
+
+ return;
+}
+
Lisp_Object
w32_to_x_color (rgb)
Lisp_Object rgb;
@@ -6773,6 +6828,8 @@
}
if (NILP (Vw32_color_map))
Vw32_color_map = Fw32_default_color_map ();
+
+ w32_cpanel_colors (&Vw32_color_map);
if (! NILP (xrm_string))
xrm_option = (unsigned char *) SDATA (xrm_string);
Index: emacs/lisp/faces.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/faces.el,v
retrieving revision 1.279
diff -u -b -r1.279 faces.el
--- emacs/lisp/faces.el 28 May 2003 11:17:33 -0000 1.279
+++ emacs/lisp/faces.el 2 Jun 2003 04:26:50 -0000
@@ -1800,9 +1800,13 @@
(defface mode-line
- '((((type x w32 mac) (class color))
+ '((((type x mac) (class color))
:box (:line-width -1 :style released-button)
:background "grey75" :foreground "black")
+ (((type w32))
+ :box (:line-width -1 :style released-button)
+ :background "W32GradientActiveTitle"
+ :foreground "W32TitleText")
(t
:inverse-video t))
"Basic mode line face for selected window."
@@ -1813,11 +1817,15 @@
(defface mode-line-inactive
'((t
:inherit mode-line)
- (((type x w32 mac) (background light) (class color))
+ (((type w32))
+ :box (:line-width -1 :color "W32InactiveTitle" :style nil)
+ :background "W32GradientInactiveTitle"
+ :foreground "W32InactiveTitleText")
+ (((type x mac) (background light) (class color))
:weight light
:box (:line-width -1 :color "grey75" :style nil)
:foreground "grey20" :background "grey90")
- (((type x w32 mac) (background dark) (class color))
+ (((type x mac) (background dark) (class color))
:weight light
:box (:line-width -1 :color "grey40" :style nil)
:foreground "grey80" :background "grey30"))
@@ -1868,9 +1876,12 @@
(defface tool-bar
- '((((type x w32 mac) (class color))
+ '((((type x mac) (class color))
:box (:line-width 1 :style released-button)
:background "grey75" :foreground "black")
+ (((type w32))
+ :box nil
+ :background "W32Menu" :foreground "W32MenuText")
(((type x) (class mono))
:box (:line-width 1 :style released-button)
:background "grey" :foreground "black")
@@ -1896,6 +1907,8 @@
:background "blue" :foreground "white")
(((type tty) (class mono))
:inverse-video t)
+ (((type w32))
+ :background "W32Hilight" :foreground "W32HilightText")
(((class color) (background dark))
:background "blue3")
(((class color) (background light))
--
Michael Mauger
http://www.geocities.com/mmaug/
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-03 22:48 Proposal: Windows Control Panel Colors Michael Mauger
@ 2003-06-03 23:40 ` Miles Bader
2003-06-04 0:28 ` Michael Mauger
2003-06-05 23:29 ` Jason Rumney
1 sibling, 1 reply; 9+ messages in thread
From: Miles Bader @ 2003-06-03 23:40 UTC (permalink / raw)
Cc: emacs-devel
Having a white-on-baby-blue mode-line by default seems likely to be an
unpopular change... Isn't there a better windows color that could be used
for the mode-line?
-Miles
--
Occam's razor split hairs so well, I bought the whole argument!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-03 23:40 ` Miles Bader
@ 2003-06-04 0:28 ` Michael Mauger
2003-06-04 4:09 ` Miles Bader
2003-06-04 7:11 ` Jason Rumney
0 siblings, 2 replies; 9+ messages in thread
From: Michael Mauger @ 2003-06-04 0:28 UTC (permalink / raw)
Cc: emacs-devel
In practice it's not too bad -- your eye filters the common color used to
identify active windows/subwindows. In isolation, the mode-line may
appear too harsh, but in the context of other windows its not bad at all.
In an application supporting MDI, each subwindow would use this same
color on its title bar.
The most logical alternative to W32GradientActiveTitle would be to use
W32ActiveTitle. (Active titles fade from the ActiveTitle color to the
GradientActiveTitle color.) I chose GradientActiveTitle because it
generally is a subtler color.
--- Miles Bader <miles@gnu.org> wrote:
> Having a white-on-baby-blue mode-line by default seems likely to be an
> unpopular change... Isn't there a better windows color that could be
> used
> for the mode-line?
>
> -Miles
> --
> Occam's razor split hairs so well, I bought the whole argument!
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-04 0:28 ` Michael Mauger
@ 2003-06-04 4:09 ` Miles Bader
2003-06-04 7:11 ` Jason Rumney
1 sibling, 0 replies; 9+ messages in thread
From: Miles Bader @ 2003-06-04 4:09 UTC (permalink / raw)
Cc: emacs-devel
Michael Mauger <mmaug@yahoo.com> writes:
> The most logical alternative to W32GradientActiveTitle would be to use
> W32ActiveTitle. (Active titles fade from the ActiveTitle color to the
> GradientActiveTitle color.) I chose GradientActiveTitle because it
> generally is a subtler color.
What color is W32ActiveTitle in the default theme?
-Miles
--
Saa, shall we dance? (from a dance-class advertisement)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-04 0:28 ` Michael Mauger
2003-06-04 4:09 ` Miles Bader
@ 2003-06-04 7:11 ` Jason Rumney
1 sibling, 0 replies; 9+ messages in thread
From: Jason Rumney @ 2003-06-04 7:11 UTC (permalink / raw)
Cc: Miles Bader
Michael Mauger <mmaug@yahoo.com> writes:
> The most logical alternative to W32GradientActiveTitle would be to use
> W32ActiveTitle. (Active titles fade from the ActiveTitle color to the
> GradientActiveTitle color.) I chose GradientActiveTitle because it
> generally is a subtler color.
Gradient's are only supported in recent versions of Windows. The
defaults need to be colors that exist in Windows 95 and NT 4.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-03 22:48 Proposal: Windows Control Panel Colors Michael Mauger
2003-06-03 23:40 ` Miles Bader
@ 2003-06-05 23:29 ` Jason Rumney
1 sibling, 0 replies; 9+ messages in thread
From: Jason Rumney @ 2003-06-05 23:29 UTC (permalink / raw)
Cc: emacs-devel
Michael Mauger <mmaug@yahoo.com> writes:
> the second portion of the patch modifies some of the standard Emacs
> faces to use these colors under w32. The result is that Emacs
> displays major frame components in colors similar to the colors used
> in other applications.
I decided to implement this in the X Resource emulation code in
w32reg.c, rather than in faces.el. This makes it act more like
System default X resources (including honoring any future
command-line option to ignore resources).
^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <usmqpy2it.fsf@jasonrumney.net>]
* Re: Proposal: Windows Control Panel Colors
[not found] <usmqpy2it.fsf@jasonrumney.net>
@ 2003-06-04 21:33 ` Michael Mauger
2003-06-04 23:00 ` Jason Rumney
0 siblings, 1 reply; 9+ messages in thread
From: Michael Mauger @ 2003-06-04 21:33 UTC (permalink / raw)
--- Jason Rumney <jasonr@gnu.org> wrote:
> Michael Mauger <mmaug@yahoo.com> writes:
>
> > My original implementation didn't add the colors to the
> `w32-color-map'
> > --instead it translated the color name to a COLORREF in
> `x_to_w32_color'
> > and handled the Gradient colors specially by falling back to the base
> > title colors. The current implementation could be modified to add
> the
> > two Gradient colors to the color map if they don't exist in the
> Registry.
> >
> > The other option would be to just default `mode-line' and
> > `mode-line-inactive' to use `W32ActiveTitle' and `W32InactiveTitle'
> as
> > background colors respectively. I don't think that this looks as
> good
> > when the Gradient colors are available. But that is purely
> subjective...
>
> Having looked at your screenshots, I don't think the titlebar colors
> (especially gradient ones, which can be low contrast compared with the
> title font color) are suited for the modeline. The modeline is more
> analogous to the status area of Windows applications than a title bar.
> It may be better to leave it as now, or maybe use W32Menu for active
> modeline and calculate some intermediate value between the active
> modeline color and background color for inactive modelines.
>
I don't entirely agree, since the mode-line does contain the only
identifying information about the window (granted, with lots
of status info as well). I guess the issue is far more subjective
than I thought. I'm probably more aware of the color issues
because my Win98 machine has its desktop theme changed frequently
(my kids love finding new colors and fonts for the window chrome).
Can we get agreement on the first part of the patch (i.e., loading
the Windows control panel colors onto `w32-color-map') and leave
the second portion of the patch (i.e., mapping specific faces to
use the the control panel colors) off? That way, those of us who
wish to use the control panel colors can, by customizing the faces,
but the current defaults can stand.
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-04 21:33 ` Michael Mauger
@ 2003-06-04 23:00 ` Jason Rumney
2003-06-05 13:54 ` Michael Mauger
0 siblings, 1 reply; 9+ messages in thread
From: Jason Rumney @ 2003-06-04 23:00 UTC (permalink / raw)
Cc: emacs-devel
Michael Mauger <mmaug@yahoo.com> writes:
> Can we get agreement on the first part of the patch (i.e., loading
> the Windows control panel colors onto `w32-color-map') and leave
> the second portion of the patch (i.e., mapping specific faces to
> use the the control panel colors) off? That way, those of us who
> wish to use the control panel colors can, by customizing the faces,
> but the current defaults can stand.
My only concern with the effect of your patch is basing the modeline
face on titlebar colors. The rest of the changes do not seem likely to
cause complaints.
As far as the implementation details go, I'd like to rewrite the patch
to comply with GNU coding guidelines and reduce the complexity of the
for statement. Also, I think it would be better to use a more generic
prefix so we can have some commonality if the same thing is done on
other platforms (it may be useful for GTK, Mac and maybe even CDE
users to be able to use color names that correspond to the system
settings rather than physical colors).
If you'd like to contribute to Emacs in future, it may be worth it for
you to make these changes and arrange the neccesary copyright assignments.
Otherwise I will try to do it over the next few days.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Proposal: Windows Control Panel Colors
2003-06-04 23:00 ` Jason Rumney
@ 2003-06-05 13:54 ` Michael Mauger
0 siblings, 0 replies; 9+ messages in thread
From: Michael Mauger @ 2003-06-05 13:54 UTC (permalink / raw)
Cc: emacs-devel
--- Jason Rumney <jasonr@gnu.org> wrote:
>
> As far as the implementation details go, I'd like to rewrite the patch
> to comply with GNU coding guidelines and reduce the complexity of the
> for statement. Also, I think it would be better to use a more generic
> prefix so we can have some commonality if the same thing is done on
> other platforms (it may be useful for GTK, Mac and maybe even CDE
> users to be able to use color names that correspond to the system
> settings rather than physical colors).
>
> If you'd like to contribute to Emacs in future, it may be worth it for
> you to make these changes and arrange the neccesary copyright
> assignments.
> Otherwise I will try to do it over the next few days.
>
I have submitted my copyright assignment related to changes I
proposed for sql-mode. I don't think that the paperwork has
been processed yet.
I do intend to contribute to Emacs in the future and would be
willing to make refinements to the code I provided. If you
can give me a more concrete concept of what you think should
be done to make this more useful, I'd be happy to pursue it.
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2003-06-05 23:29 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-03 22:48 Proposal: Windows Control Panel Colors Michael Mauger
2003-06-03 23:40 ` Miles Bader
2003-06-04 0:28 ` Michael Mauger
2003-06-04 4:09 ` Miles Bader
2003-06-04 7:11 ` Jason Rumney
2003-06-05 23:29 ` Jason Rumney
[not found] <usmqpy2it.fsf@jasonrumney.net>
2003-06-04 21:33 ` Michael Mauger
2003-06-04 23:00 ` Jason Rumney
2003-06-05 13:54 ` Michael Mauger
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).