unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: Emacs 22.1 Windows ClearType Support
       [not found] <A69AA663CE9BBC44AE1DA72483DE15DE09AACFEB@HQ-MAIL3.ptcnet.ptc.com>
@ 2007-11-22 21:39 ` Jason Rumney
  2007-11-22 21:43 ` Juanma Barranquero
  2007-11-23  4:35 ` Richard Stallman
  2 siblings, 0 replies; 10+ messages in thread
From: Jason Rumney @ 2007-11-22 21:39 UTC (permalink / raw)
  To: Emacs Devel

Ng, Andrew wrote:
> I have been having a go at fixing up the issues related to ClearType in
> Emacs 22.1.
>   

I have requested an assignment or disclaimer for this change.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
       [not found] <A69AA663CE9BBC44AE1DA72483DE15DE09AACFEB@HQ-MAIL3.ptcnet.ptc.com>
  2007-11-22 21:39 ` Jason Rumney
@ 2007-11-22 21:43 ` Juanma Barranquero
  2007-11-22 21:55   ` Drew Adams
  2007-11-22 21:58   ` Jason Rumney
  2007-11-23  4:35 ` Richard Stallman
  2 siblings, 2 replies; 10+ messages in thread
From: Juanma Barranquero @ 2007-11-22 21:43 UTC (permalink / raw)
  To: Ng, Andrew; +Cc: bug-gnu-emacs, Emacs Devel

On Nov 22, 2007 4:51 PM, Ng, Andrew <anng@ptc.com> wrote:

> I have been having a go at fixing up the issues related to ClearType in
> Emacs 22.1.
>
> I think I have pretty much sorted out the major issues and everything
> appears to work fine now. I've tried as much as possible not to alter
> the non-ClearType code path.
>
> I've also added an environment variable "EMACS_CLEARTYPE". If present
> this will disable ClearType if its value is 0 and will enable ClearType
> if its value is non-zero. Otherwise, ClearType is enabled according to
> the system settings.
>
> I've attached a patch file for my changes.
>
> Thank you.
>
> Regards,
>
> Andrew Ng

Here's the patch, adapted to the current trunk.

             Juanma


Index: src/dispnew.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/dispnew.c,v
retrieving revision 1.398
diff -u -r1.398 dispnew.c
--- src/dispnew.c	21 Nov 2007 03:46:31 -0000	1.398
+++ src/dispnew.c	22 Nov 2007 21:27:53 -0000
@@ -4525,9 +4525,7 @@
 		 taken care of by draw_glyphs.  */
 	      if (overlapping_glyphs_p
 		  && i > 0
-		  && i < current_row->used[TEXT_AREA]
-		  && (current_row->used[TEXT_AREA]
-		      != desired_row->used[TEXT_AREA]))
+		  && i < current_row->used[TEXT_AREA])
 		{
 		  int left, right;

Index: src/w32fns.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32fns.c,v
retrieving revision 1.307
diff -u -r1.307 w32fns.c
--- src/w32fns.c	14 Nov 2007 17:33:36 -0000	1.307
+++ src/w32fns.c	22 Nov 2007 21:23:32 -0000
@@ -4571,6 +4571,8 @@
     int codepage;
     int i;

+    const char *env;
+
     if (!fontname || !x_to_w32_font (fontname, &lf))
       return (NULL);

@@ -4582,7 +4584,12 @@
            ended up with. */
       return NULL;

-    lf.lfQuality = DEFAULT_QUALITY;
+#ifndef CLEARTYPE_QUALITY
+#define CLEARTYPE_QUALITY 5
+#endif
+
+    env = getenv ("EMACS_CLEARTYPE");
+    lf.lfQuality = env ? (atoi (env) ? CLEARTYPE_QUALITY :
ANTIALIASED_QUALITY) : DEFAULT_QUALITY;

     font = (XFontStruct *) xmalloc (sizeof (XFontStruct));
     bzero (font, sizeof (*font));
Index: src/w32term.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32term.c,v
retrieving revision 1.276
diff -u -r1.276 w32term.c
--- src/w32term.c	9 Nov 2007 12:19:55 -0000	1.276
+++ src/w32term.c	22 Nov 2007 21:33:15 -0000
@@ -948,7 +948,7 @@
 #endif
 	  if (cleartype_active)
 	    {
-	      /* Cleartype antialiasing causes characters to overhang
+	      /* Cleartype antialiasing can cause characters to overhang
 		 by a pixel on each side compared with what GetCharABCWidths
 		 reports.  */
 	      char_widths.abcA -= 1;
@@ -1086,7 +1086,8 @@
       if (((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH) != 0)
           /* Some fonts (eg DBCS fonts) are marked as fixed width even
              though they contain characters of different widths. */
-          || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth))
+          || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth)
+          || cleartype_active)
 	{
 	  /* Font is not fixed pitch, so cache per_char info for the
              ASCII characters.  It would be much more work, and probably
@@ -1483,9 +1484,42 @@
 w32_compute_glyph_string_overhangs (s)
      struct glyph_string *s;
 {
-  /* TODO: Windows does not appear to have a method for
-     getting this info without getting the ABC widths for each
-     individual character and working it out manually. */
+  if (s->cmp == NULL
+      && s->first_glyph->type == CHAR_GLYPH
+      && s->nchars > 0)
+    {
+      XFontStruct *font = s->font;
+      const int    font_type = s->first_glyph->font_type;
+
+      wchar_t  *ws = s->char2b;
+      const int nc = s->nchars;
+      int       i, pos, mn, mx;
+      if (nc == 1)
+        {
+          XCharStruct *pcm = w32_per_char_metric (font, ws, font_type);
+
+          s->right_overhang = pcm->rbearing > pcm->width ?
pcm->rbearing - pcm->width : 0;
+          s->left_overhang  = pcm->lbearing < 0 ? -pcm->lbearing : 0;
+          return;
+        }
+
+      pos = mn = mx = 0;
+      for (i = 0; i < nc; ++i, ++ws)
+        {
+          XCharStruct *pcm = w32_per_char_metric (font, ws, font_type);
+
+          const int rp = pos + pcm->rbearing;
+          const int lp = pos + pcm->lbearing;
+
+          if (rp > mx) mx = rp;
+          if (lp < mn) mn = lp;
+
+          pos += pcm->width;
+        }
+
+      s->right_overhang = mx > pos ? mx - pos : 0;
+      s->left_overhang  = mn < 0 ? -mn : 0;
+    }
 }


@@ -1582,7 +1616,7 @@
 x_draw_glyph_string_foreground (s)
      struct glyph_string *s;
 {
-  int i, x;
+  int i, x, ct_clear = 0;
   HFONT old_font;

   /* If first glyph of S has a left box line, start drawing the text
@@ -1595,6 +1629,11 @@

   if (s->for_overlaps || (s->background_filled_p && s->hl != DRAW_CURSOR))
     SetBkMode (s->hdc, TRANSPARENT);
+  else if (cleartype_active)
+    {
+      ct_clear = 1;
+      SetBkMode (s->hdc, TRANSPARENT);
+    }
   else
     SetBkMode (s->hdc, OPAQUE);

@@ -1632,6 +1671,21 @@
           char1b[i] = XCHAR2B_BYTE2 (&s->char2b[i]);

       /* Draw text with TextOut and friends. */
+      if (ct_clear)
+        {
+          HBRUSH hb;
+          RECT   r;
+
+          r.left = x;
+          r.top  = s->y;
+          r.right  = x + s->background_width;
+          r.bottom = s->y + s->height;
+
+          hb = CreateSolidBrush (s->gc->background);
+          FillRect (s->hdc, &r, hb);
+          DeleteObject (hb);
+        }
+
       w32_text_out (s, x, s->ybase - boff, s->char2b, s->nchars);

       if (s->face->overstrike)
@@ -6292,7 +6346,7 @@
   w32_destroy_fringe_bitmap,
   w32_per_char_metric,
   w32_encode_char,
-  NULL, /* w32_compute_glyph_string_overhangs */
+  w32_compute_glyph_string_overhangs,
   x_draw_glyph_string,
   w32_define_frame_cursor,
   w32_clear_frame_area,
@@ -6592,6 +6646,8 @@
     UINT smoothing_type;
     BOOL smoothing_enabled;

+    const char *env;
+
     /* If using proportional scroll bars, ensure handle is at least 5 pixels;
        otherwise use the fixed height.  */
     vertical_scroll_bar_min_handle = 5;
@@ -6617,11 +6673,13 @@
        the char metric calculations which adds extra pixels to
        compensate for the "sub-pixels" that are not counted by the
        system APIs. */
+    env = getenv ("EMACS_CLEARTYPE");
     cleartype_active =
-      SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &smoothing_enabled, 0)
-      && smoothing_enabled
-      && SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0, &smoothing_type, 0)
-      && smoothing_type == FE_FONTSMOOTHINGCLEARTYPE;
+      env ? (atoi (env) != 0) :
+      (SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &smoothing_enabled, 0)
+       && smoothing_enabled
+       && SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0,
&smoothing_type, 0)
+       && smoothing_type == FE_FONTSMOOTHINGCLEARTYPE);
   }
 }




^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: Emacs 22.1 Windows ClearType Support
  2007-11-22 21:43 ` Juanma Barranquero
@ 2007-11-22 21:55   ` Drew Adams
  2007-11-22 22:06     ` Jason Rumney
  2007-11-22 21:58   ` Jason Rumney
  1 sibling, 1 reply; 10+ messages in thread
From: Drew Adams @ 2007-11-22 21:55 UTC (permalink / raw)
  To: Juanma Barranquero, Ng, Andrew; +Cc: Emacs Devel

I haven't followed the problems reported with ClearType. But IIUC this patch lets you turn ClearType on and off from within Emacs, using an environment variable. If so, that's good.

I find that ClearType is great with Emacs on Windows, but if it presents problems in particular contexts (e.g. particular fonts or whatever), then perhaps it would be worth having a toggle command to flip it?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
  2007-11-22 21:43 ` Juanma Barranquero
  2007-11-22 21:55   ` Drew Adams
@ 2007-11-22 21:58   ` Jason Rumney
  2007-11-22 22:07     ` Juanma Barranquero
  1 sibling, 1 reply; 10+ messages in thread
From: Jason Rumney @ 2007-11-22 21:58 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: bug-gnu-emacs, Ng, Andrew, Emacs Devel

Juanma Barranquero wrote:
> Here's the patch, adapted to the current trunk.
>   

Thanks, but we would want to install this in EMACS_22_RELEASE, or not at
all. When emacs-unicode-2 gets merged with the trunk, then there is a
completely new font backend which already has the Cleartype problems
mostly fixed (mostly, because the cursor is still being drawn with the
old font code, but that will be fixed before Emacs 23 is released).







^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
  2007-11-22 21:55   ` Drew Adams
@ 2007-11-22 22:06     ` Jason Rumney
  2007-11-22 22:24       ` Ng, Andrew
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Rumney @ 2007-11-22 22:06 UTC (permalink / raw)
  To: Drew Adams; +Cc: Juanma Barranquero, Ng, Andrew, Emacs Devel

Drew Adams wrote:
> I haven't followed the problems reported with ClearType. But IIUC this patch lets you turn ClearType on and off from within Emacs, using an environment variable. If so, that's good.
>
> I find that ClearType is great with Emacs on Windows, but if it presents problems in particular contexts (e.g. particular fonts or whatever), then perhaps it would be worth having a toggle command to flip it?
>   
The new font backend in emacs-unicode-2 lets you override antialiasing
on a case by case basis for each font. I think an environment variable
is the wrong solution for Emacs, and if the patch really fixes the
problems, then any option is unnecessary.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
  2007-11-22 21:58   ` Jason Rumney
@ 2007-11-22 22:07     ` Juanma Barranquero
  0 siblings, 0 replies; 10+ messages in thread
From: Juanma Barranquero @ 2007-11-22 22:07 UTC (permalink / raw)
  To: Jason Rumney; +Cc: bug-gnu-emacs, Ng, Andrew, Emacs Devel

On Nov 22, 2007 10:58 PM, Jason Rumney <jasonr@gnu.org> wrote:

> Thanks, but we would want to install this in EMACS_22_RELEASE, or not at
> all.

OK; here's against EMACS_22_BASE.

             Juanma


Index: src/dispnew.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/dispnew.c,v
retrieving revision 1.392.2.1
diff -u -r1.392.2.1 dispnew.c
--- src/dispnew.c	25 Jul 2007 05:15:58 -0000	1.392.2.1
+++ src/dispnew.c	22 Nov 2007 22:00:45 -0000
@@ -4522,9 +4522,7 @@
 		 taken care of by draw_glyphs.  */
 	      if (overlapping_glyphs_p
 		  && i > 0
-		  && i < current_row->used[TEXT_AREA]
-		  && (current_row->used[TEXT_AREA]
-		      != desired_row->used[TEXT_AREA]))
+		  && i < current_row->used[TEXT_AREA])
 		{
 		  int left, right;

Index: src/w32fns.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32fns.c,v
retrieving revision 1.288.2.10
diff -u -r1.288.2.10 w32fns.c
--- src/w32fns.c	15 Nov 2007 09:33:33 -0000	1.288.2.10
+++ src/w32fns.c	22 Nov 2007 22:00:45 -0000
@@ -4545,6 +4545,8 @@
     int codepage;
     int i;

+    const char *env;
+
     if (!fontname || !x_to_w32_font (fontname, &lf))
       return (NULL);

@@ -4556,7 +4558,12 @@
            ended up with. */
       return NULL;

-    lf.lfQuality = DEFAULT_QUALITY;
+#ifndef CLEARTYPE_QUALITY
+#define CLEARTYPE_QUALITY 5
+#endif
+
+    env = getenv ("EMACS_CLEARTYPE");
+    lf.lfQuality = env ? (atoi (env) ? CLEARTYPE_QUALITY :
ANTIALIASED_QUALITY) : DEFAULT_QUALITY;

     font = (XFontStruct *) xmalloc (sizeof (XFontStruct));
     bzero (font, sizeof (*font));
Index: src/w32term.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/w32term.c,v
retrieving revision 1.259.2.6
diff -u -r1.259.2.6 w32term.c
--- src/w32term.c	1 Nov 2007 03:45:35 -0000	1.259.2.6
+++ src/w32term.c	22 Nov 2007 22:00:45 -0000
@@ -903,7 +903,7 @@
 #endif
 	  if (cleartype_active)
 	    {
-	      /* Cleartype antialiasing causes characters to overhang
+	      /* Cleartype antialiasing can cause characters to overhang
 		 by a pixel on each side compared with what GetCharABCWidths
 		 reports.  */
 	      char_widths.abcA -= 1;
@@ -1041,7 +1041,8 @@
       if (((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH) != 0)
           /* Some fonts (eg DBCS fonts) are marked as fixed width even
              though they contain characters of different widths. */
-          || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth))
+          || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth)
+          || cleartype_active)
 	{
 	  /* Font is not fixed pitch, so cache per_char info for the
              ASCII characters.  It would be much more work, and probably
@@ -1437,9 +1438,42 @@
 w32_compute_glyph_string_overhangs (s)
      struct glyph_string *s;
 {
-  /* TODO: Windows does not appear to have a method for
-     getting this info without getting the ABC widths for each
-     individual character and working it out manually. */
+  if (s->cmp == NULL
+      && s->first_glyph->type == CHAR_GLYPH
+      && s->nchars > 0)
+    {
+      XFontStruct *font = s->font;
+      const int    font_type = s->first_glyph->font_type;
+
+      wchar_t  *ws = s->char2b;
+      const int nc = s->nchars;
+      int       i, pos, mn, mx;
+      if (nc == 1)
+        {
+          XCharStruct *pcm = w32_per_char_metric (font, ws, font_type);
+
+          s->right_overhang = pcm->rbearing > pcm->width ?
pcm->rbearing - pcm->width : 0;
+          s->left_overhang  = pcm->lbearing < 0 ? -pcm->lbearing : 0;
+          return;
+        }
+
+      pos = mn = mx = 0;
+      for (i = 0; i < nc; ++i, ++ws)
+        {
+          XCharStruct *pcm = w32_per_char_metric (font, ws, font_type);
+
+          const int rp = pos + pcm->rbearing;
+          const int lp = pos + pcm->lbearing;
+
+          if (rp > mx) mx = rp;
+          if (lp < mn) mn = lp;
+
+          pos += pcm->width;
+        }
+
+      s->right_overhang = mx > pos ? mx - pos : 0;
+      s->left_overhang  = mn < 0 ? -mn : 0;
+    }
 }


@@ -1536,7 +1570,7 @@
 x_draw_glyph_string_foreground (s)
      struct glyph_string *s;
 {
-  int i, x;
+  int i, x, ct_clear = 0;
   HFONT old_font;

   /* If first glyph of S has a left box line, start drawing the text
@@ -1549,6 +1583,11 @@

   if (s->for_overlaps || (s->background_filled_p && s->hl != DRAW_CURSOR))
     SetBkMode (s->hdc, TRANSPARENT);
+  else if (cleartype_active)
+    {
+      ct_clear = 1;
+      SetBkMode (s->hdc, TRANSPARENT);
+    }
   else
     SetBkMode (s->hdc, OPAQUE);

@@ -1586,6 +1625,21 @@
           char1b[i] = XCHAR2B_BYTE2 (&s->char2b[i]);

       /* Draw text with TextOut and friends. */
+      if (ct_clear)
+        {
+          HBRUSH hb;
+          RECT   r;
+
+          r.left = x;
+          r.top  = s->y;
+          r.right  = x + s->background_width;
+          r.bottom = s->y + s->height;
+
+          hb = CreateSolidBrush (s->gc->background);
+          FillRect (s->hdc, &r, hb);
+          DeleteObject (hb);
+        }
+
       w32_text_out (s, x, s->ybase - boff, s->char2b, s->nchars);

       if (s->face->overstrike)
@@ -6357,7 +6411,7 @@
   w32_destroy_fringe_bitmap,
   w32_per_char_metric,
   w32_encode_char,
-  NULL, /* w32_compute_glyph_string_overhangs */
+  w32_compute_glyph_string_overhangs,
   x_draw_glyph_string,
   w32_define_frame_cursor,
   w32_clear_frame_area,
@@ -6455,6 +6509,8 @@
     UINT smoothing_type;
     BOOL smoothing_enabled;

+    const char *env;
+
     /* If using proportional scroll bars, ensure handle is at least 5 pixels;
        otherwise use the fixed height.  */
     vertical_scroll_bar_min_handle = 5;
@@ -6480,11 +6536,13 @@
        the char metric calculations which adds extra pixels to
        compensate for the "sub-pixels" that are not counted by the
        system APIs. */
+    env = getenv ("EMACS_CLEARTYPE");
     cleartype_active =
-      SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &smoothing_enabled, 0)
-      && smoothing_enabled
-      && SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0, &smoothing_type, 0)
-      && smoothing_type == FE_FONTSMOOTHINGCLEARTYPE;
+      env ? (atoi (env) != 0) :
+      (SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &smoothing_enabled, 0)
+       && smoothing_enabled
+       && SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0,
&smoothing_type, 0)
+       && smoothing_type == FE_FONTSMOOTHINGCLEARTYPE);
   }
 }




^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: Emacs 22.1 Windows ClearType Support
  2007-11-22 22:06     ` Jason Rumney
@ 2007-11-22 22:24       ` Ng, Andrew
  2007-11-22 22:47         ` Drew Adams
  0 siblings, 1 reply; 10+ messages in thread
From: Ng, Andrew @ 2007-11-22 22:24 UTC (permalink / raw)
  To: Jason Rumney, Drew Adams; +Cc: Juanma Barranquero, Emacs Devel

Part of the reason that I needed a way to enable ClearType in Emacs is that by default I actually have ClearType disabled on my system. The reason for this is that I have a two LCD monitor setup but unfortunately, the two LCD monitors RGB order do not match. This effectively means that ClearType looks great on one display and not so good on the other. That's one thing Microsoft obviously didn't consider when implementing the ClearType support.
 
Because I mostly use Emacs on the one LCD monitor, I explicitly enable ClearType in Emacs.
 
Cheers,
 
Andrew

________________________________

From: Jason Rumney [mailto:jasonr@gnu.org]
Sent: Thu 22/11/2007 22:06
To: Drew Adams
Cc: Juanma Barranquero; Ng, Andrew; Emacs Devel
Subject: Re: Emacs 22.1 Windows ClearType Support



Drew Adams wrote:
> I haven't followed the problems reported with ClearType. But IIUC this patch lets you turn ClearType on and off from within Emacs, using an environment variable. If so, that's good.
>
> I find that ClearType is great with Emacs on Windows, but if it presents problems in particular contexts (e.g. particular fonts or whatever), then perhaps it would be worth having a toggle command to flip it?
>  
The new font backend in emacs-unicode-2 lets you override antialiasing
on a case by case basis for each font. I think an environment variable
is the wrong solution for Emacs, and if the patch really fixes the
problems, then any option is unnecessary.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: Emacs 22.1 Windows ClearType Support
  2007-11-22 22:24       ` Ng, Andrew
@ 2007-11-22 22:47         ` Drew Adams
  0 siblings, 0 replies; 10+ messages in thread
From: Drew Adams @ 2007-11-22 22:47 UTC (permalink / raw)
  To: Emacs Devel; +Cc: Ng, Andrew

> Part of the reason that I needed a way to enable ClearType in
> Emacs is that by default I actually have ClearType disabled on my
> system. The reason for this is that I have a two LCD monitor
> setup but unfortunately, the two LCD monitors RGB order do not
> match. This effectively means that ClearType looks great on one
> display and not so good on the other. That's one thing Microsoft
> obviously didn't consider when implementing the ClearType support.
>
> Because I mostly use Emacs on the one LCD monitor, I explicitly
> enable ClearType in Emacs.

This won't help with tuning two LCDs differently, but it might help to know
that there is a simple $free tool for tuning ClearType.

Download: http://www.microsoft.com/typography/ClearTypePowerToy.mspx
Wikipedia article: http://en.wikipedia.org/wiki/ClearType

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
       [not found] <A69AA663CE9BBC44AE1DA72483DE15DE09AACFEB@HQ-MAIL3.ptcnet.ptc.com>
  2007-11-22 21:39 ` Jason Rumney
  2007-11-22 21:43 ` Juanma Barranquero
@ 2007-11-23  4:35 ` Richard Stallman
  2 siblings, 0 replies; 10+ messages in thread
From: Richard Stallman @ 2007-11-23  4:35 UTC (permalink / raw)
  To: emacs-devel; +Cc: Ng, Andrew

If people decide to install this, we should ask Andrew to sign
a disclaimer for it.

Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C82D1F.7AB72653"
Date: Thu, 22 Nov 2007 10:51:24 -0500
Message-ID: <A69AA663CE9BBC44AE1DA72483DE15DE09AACFEB@HQ-MAIL3.ptcnet.ptc.com>
Thread-Topic: Emacs 22.1 Windows ClearType Support
Thread-Index: AcgtH4jh8q9WrvztS6uHkPEgf4wmYg==
From: "Ng, Andrew" <anng@ptc.com>
To: <bug-gnu-emacs@gnu.org>
Subject: Emacs 22.1 Windows ClearType Support

This is a multi-part message in MIME format.

------_=_NextPart_001_01C82D1F.7AB72653
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

I have been having a go at fixing up the issues related to ClearType in
Emacs 22.1.

I think I have pretty much sorted out the major issues and everything
appears to work fine now. I've tried as much as possible not to alter
the non-ClearType code path.

I've also added an environment variable "EMACS_CLEARTYPE". If present
this will disable ClearType if its value is 0 and will enable ClearType
if its value is non-zero. Otherwise, ClearType is enabled according to
the system settings.

I've attached a patch file for my changes.

Thank you.

Regards,

Andrew Ng

------_=_NextPart_001_01C82D1F.7AB72653
Content-Type: application/octet-stream;
	name="patchfile"
Content-Transfer-Encoding: base64
Content-Description: patchfile
Content-Disposition: attachment;
	filename="patchfile"

ZGlmZiAtdSBlbWFjcy0yMi4xLW9yaWcvc3JjL2Rpc3BuZXcuYyBlbWFjcy0yMi4xL3NyYy9kaXNw
bmV3LmMKLS0tIGVtYWNzLTIyLjEtb3JpZy9zcmMvZGlzcG5ldy5jCTIwMDctMDQtMTYgMTc6MjE6
MTguMDAwMDAwMDAwICswMTAwCisrKyBlbWFjcy0yMi4xL3NyYy9kaXNwbmV3LmMJMjAwNy0xMS0y
MiAxNDoyNjo0NC4xODc1MDAwMDAgKzAwMDAKQEAgLTQ1MjMsOCArNDUyMyw4IEBACiAJICAgICAg
aWYgKG92ZXJsYXBwaW5nX2dseXBoc19wCiAJCSAgJiYgaSA+IDAKIAkJICAmJiBpIDwgY3VycmVu
dF9yb3ctPnVzZWRbVEVYVF9BUkVBXQotCQkgICYmIChjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FS
RUFdCi0JCSAgICAgICE9IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0pKQorCQkgIC8qJiYg
KGN1cnJlbnRfcm93LT51c2VkW1RFWFRfQVJFQV0KKwkJICAgICAgIT0gZGVzaXJlZF9yb3ctPnVz
ZWRbVEVYVF9BUkVBXSkqLykKIAkJewogCQkgIGludCBsZWZ0LCByaWdodDsKIApkaWZmIC11IGVt
YWNzLTIyLjEtb3JpZy9zcmMvdzMyZm5zLmMgZW1hY3MtMjIuMS9zcmMvdzMyZm5zLmMKLS0tIGVt
YWNzLTIyLjEtb3JpZy9zcmMvdzMyZm5zLmMJMjAwNy0wMy0yNCAxNTo0OTo0OC4wMDAwMDAwMDAg
KzAwMDAKKysrIGVtYWNzLTIyLjEvc3JjL3czMmZucy5jCTIwMDctMTEtMjAgMTA6MDM6MTMuMTcx
ODc1MDAwICswMDAwCkBAIC00NTQ2LDYgKzQ1NDYsOCBAQAogICAgIGludCBjb2RlcGFnZTsKICAg
ICBpbnQgaTsKIAorICAgIGNvbnN0IGNoYXIgKmVudjsKKwogICAgIGlmICghZm9udG5hbWUgfHwg
IXhfdG9fdzMyX2ZvbnQgKGZvbnRuYW1lLCAmbGYpKQogICAgICAgcmV0dXJuIChOVUxMKTsKIApA
QCAtNDU1Nyw3ICs0NTU5LDEyIEBACiAgICAgICAgICAgIGVuZGVkIHVwIHdpdGguICovCiAgICAg
ICByZXR1cm4gTlVMTDsKIAotICAgIGxmLmxmUXVhbGl0eSA9IERFRkFVTFRfUVVBTElUWTsKKyNp
Zm5kZWYgQ0xFQVJUWVBFX1FVQUxJVFkKKyNkZWZpbmUgQ0xFQVJUWVBFX1FVQUxJVFkgNQorI2Vu
ZGlmCisKKyAgICBlbnYgPSBnZXRlbnYoIkVNQUNTX0NMRUFSVFlQRSIpOworICAgIGxmLmxmUXVh
bGl0eSA9IGVudiA/ICgoYXRvaShlbnYpICE9IDApID8gQ0xFQVJUWVBFX1FVQUxJVFkgOiBBTlRJ
QUxJQVNFRF9RVUFMSVRZKSA6IERFRkFVTFRfUVVBTElUWTsKIAogICAgIGZvbnQgPSAoWEZvbnRT
dHJ1Y3QgKikgeG1hbGxvYyAoc2l6ZW9mIChYRm9udFN0cnVjdCkpOwogICAgIGJ6ZXJvIChmb250
LCBzaXplb2YgKCpmb250KSk7CmRpZmYgLXUgZW1hY3MtMjIuMS1vcmlnL3NyYy93MzJ0ZXJtLmMg
ZW1hY3MtMjIuMS9zcmMvdzMydGVybS5jCi0tLSBlbWFjcy0yMi4xLW9yaWcvc3JjL3czMnRlcm0u
YwkyMDA3LTAyLTE5IDE0OjQ1OjM5LjAwMDAwMDAwMCArMDAwMAorKysgZW1hY3MtMjIuMS9zcmMv
dzMydGVybS5jCTIwMDctMTEtMjEgMTI6NTI6MDAuOTUzMTI1MDAwICswMDAwCkBAIC05MDMsNyAr
OTAzLDcgQEAKICNlbmRpZgogCSAgaWYgKGNsZWFydHlwZV9hY3RpdmUpCiAJICAgIHsKLQkgICAg
ICAvKiBDbGVhcnR5cGUgYW50aWFsaWFzaW5nIGNhdXNlcyBjaGFyYWN0ZXJzIHRvIG92ZXJoYW5n
CisJICAgICAgLyogQ2xlYXJ0eXBlIGFudGlhbGlhc2luZyBjYW4gY2F1c2UgY2hhcmFjdGVycyB0
byBvdmVyaGFuZwogCQkgYnkgYSBwaXhlbCBvbiBlYWNoIHNpZGUgY29tcGFyZWQgd2l0aCB3aGF0
IEdldENoYXJBQkNXaWR0aHMKIAkJIHJlcG9ydHMuICAqLwogCSAgICAgIGNoYXJfd2lkdGhzLmFi
Y0EgLT0gMTsKQEAgLTEwNDEsNyArMTA0MSw4IEBACiAgICAgICBpZiAoKChmb250LT50bS50bVBp
dGNoQW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9QSVRDSCkgIT0gMCkKICAgICAgICAgICAvKiBTb21l
IGZvbnRzIChlZyBEQkNTIGZvbnRzKSBhcmUgbWFya2VkIGFzIGZpeGVkIHdpZHRoIGV2ZW4KICAg
ICAgICAgICAgICB0aG91Z2ggdGhleSBjb250YWluIGNoYXJhY3RlcnMgb2YgZGlmZmVyZW50IHdp
ZHRocy4gKi8KLSAgICAgICAgICB8fCAoZm9udC0+dG0udG1NYXhDaGFyV2lkdGggIT0gZm9udC0+
dG0udG1BdmVDaGFyV2lkdGgpKQorICAgICAgICAgIHx8IChmb250LT50bS50bU1heENoYXJXaWR0
aCAhPSBmb250LT50bS50bUF2ZUNoYXJXaWR0aCkKKyAgICAgICAgICB8fCBjbGVhcnR5cGVfYWN0
aXZlKQogCXsKIAkgIC8qIEZvbnQgaXMgbm90IGZpeGVkIHBpdGNoLCBzbyBjYWNoZSBwZXJfY2hh
ciBpbmZvIGZvciB0aGUKICAgICAgICAgICAgICBBU0NJSSBjaGFyYWN0ZXJzLiAgSXQgd291bGQg
YmUgbXVjaCBtb3JlIHdvcmssIGFuZCBwcm9iYWJseQpAQCAtMTQzNyw5ICsxNDM4LDQyIEBACiB3
MzJfY29tcHV0ZV9nbHlwaF9zdHJpbmdfb3ZlcmhhbmdzIChzKQogICAgICBzdHJ1Y3QgZ2x5cGhf
c3RyaW5nICpzOwogewotICAvKiBUT0RPOiBXaW5kb3dzIGRvZXMgbm90IGFwcGVhciB0byBoYXZl
IGEgbWV0aG9kIGZvcgotICAgICBnZXR0aW5nIHRoaXMgaW5mbyB3aXRob3V0IGdldHRpbmcgdGhl
IEFCQyB3aWR0aHMgZm9yIGVhY2gKLSAgICAgaW5kaXZpZHVhbCBjaGFyYWN0ZXIgYW5kIHdvcmtp
bmcgaXQgb3V0IG1hbnVhbGx5LiAqLworICBpZiAocy0+Y21wID09IE5VTEwKKyAgICAgICYmIHMt
PmZpcnN0X2dseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICYmIHMtPm5jaGFycyA+IDAp
CisgICAgeworICAgICAgWEZvbnRTdHJ1Y3QgKmZvbnQgPSBzLT5mb250OworICAgICAgY29uc3Qg
aW50ICAgIGZvbnRfdHlwZSA9IHMtPmZpcnN0X2dseXBoLT5mb250X3R5cGU7CisKKyAgICAgIHdj
aGFyX3QgICp3cyA9IHMtPmNoYXIyYjsKKyAgICAgIGNvbnN0IGludCBuYyA9IHMtPm5jaGFyczsK
KyAgICAgIGludCAgICAgICBpLCBwb3MsIG1uLCBteDsKKyAgICAgIGlmIChuYyA9PSAxKQorICAg
ICAgICB7CisgICAgICAgICAgWENoYXJTdHJ1Y3QgKnBjbSA9IHczMl9wZXJfY2hhcl9tZXRyaWMg
KGZvbnQsIHdzLCBmb250X3R5cGUpOworCisgICAgICAgICAgcy0+cmlnaHRfb3ZlcmhhbmcgPSBw
Y20tPnJiZWFyaW5nID4gcGNtLT53aWR0aCA/IHBjbS0+cmJlYXJpbmcgLSBwY20tPndpZHRoIDog
MDsKKyAgICAgICAgICBzLT5sZWZ0X292ZXJoYW5nICA9IHBjbS0+bGJlYXJpbmcgPCAwID8gLXBj
bS0+bGJlYXJpbmcgOiAwOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBw
b3MgPSBtbiA9IG14ID0gMDsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuYzsgKytpLCArK3dzKQor
ICAgICAgICB7CisgICAgICAgICAgWENoYXJTdHJ1Y3QgKnBjbSA9IHczMl9wZXJfY2hhcl9tZXRy
aWMgKGZvbnQsIHdzLCBmb250X3R5cGUpOworCisgICAgICAgICAgY29uc3QgaW50IHJwID0gcG9z
ICsgcGNtLT5yYmVhcmluZzsKKyAgICAgICAgICBjb25zdCBpbnQgbHAgPSBwb3MgKyBwY20tPmxi
ZWFyaW5nOworCisgICAgICAgICAgaWYgKHJwID4gbXgpIG14ID0gcnA7CisgICAgICAgICAgaWYg
KGxwIDwgbW4pIG1uID0gbHA7CisKKyAgICAgICAgICBwb3MgKz0gcGNtLT53aWR0aDsKKyAgICAg
ICAgfQorCisgICAgICBzLT5yaWdodF9vdmVyaGFuZyA9IG14ID4gcG9zID8gbXggLSBwb3MgOiAw
OworICAgICAgcy0+bGVmdF9vdmVyaGFuZyAgPSBtbiA8IDAgPyAtbW4gOiAwOworICAgIH0KIH0K
IAogCkBAIC0xNTM2LDcgKzE1NzAsNyBAQAogeF9kcmF3X2dseXBoX3N0cmluZ19mb3JlZ3JvdW5k
IChzKQogICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOwogewotICBpbnQgaSwgeDsKKyAgaW50
IGksIHgsIGN0X2NsZWFyID0gMDsKICAgSEZPTlQgb2xkX2ZvbnQ7CiAKICAgLyogSWYgZmlyc3Qg
Z2x5cGggb2YgUyBoYXMgYSBsZWZ0IGJveCBsaW5lLCBzdGFydCBkcmF3aW5nIHRoZSB0ZXh0CkBA
IC0xNTUwLDcgKzE1ODQsMTUgQEAKICAgaWYgKHMtPmZvcl9vdmVybGFwcyB8fCAocy0+YmFja2dy
b3VuZF9maWxsZWRfcCAmJiBzLT5obCAhPSBEUkFXX0NVUlNPUikpCiAgICAgU2V0QmtNb2RlIChz
LT5oZGMsIFRSQU5TUEFSRU5UKTsKICAgZWxzZQotICAgIFNldEJrTW9kZSAocy0+aGRjLCBPUEFR
VUUpOworICB7CisgICAgaWYgKGNsZWFydHlwZV9hY3RpdmUpCisgICAgICB7CisgICAgICAgIGN0
X2NsZWFyID0gMTsKKyAgICAgICAgU2V0QmtNb2RlIChzLT5oZGMsIFRSQU5TUEFSRU5UKTsKKyAg
ICAgIH0KKyAgICBlbHNlCisgICAgICBTZXRCa01vZGUgKHMtPmhkYywgT1BBUVVFKTsKKyAgfQog
CiAgIFNldFRleHRDb2xvciAocy0+aGRjLCBzLT5nYy0+Zm9yZWdyb3VuZCk7CiAgIFNldEJrQ29s
b3IgKHMtPmhkYywgcy0+Z2MtPmJhY2tncm91bmQpOwpAQCAtMTU4Niw2ICsxNjI4LDIxIEBACiAg
ICAgICAgICAgY2hhcjFiW2ldID0gWENIQVIyQl9CWVRFMiAoJnMtPmNoYXIyYltpXSk7CiAKICAg
ICAgIC8qIERyYXcgdGV4dCB3aXRoIFRleHRPdXQgYW5kIGZyaWVuZHMuICovCisgICAgICBpZiAo
Y3RfY2xlYXIpCisgICAgICAgIHsKKyAgICAgICAgICBIQlJVU0ggaGI7CisgICAgICAgICAgUkVD
VCAgIHI7CisKKyAgICAgICAgICByLmxlZnQgPSB4OworICAgICAgICAgIHIudG9wICA9IHMtPnk7
CisgICAgICAgICAgci5yaWdodCAgPSB4ICsgcy0+YmFja2dyb3VuZF93aWR0aDsKKyAgICAgICAg
ICByLmJvdHRvbSA9IHMtPnkgKyBzLT5oZWlnaHQ7CisKKyAgICAgICAgICBoYiA9IENyZWF0ZVNv
bGlkQnJ1c2ggKHMtPmdjLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICBGaWxsUmVjdCAocy0+aGRj
LCAmciwgaGIpOworICAgICAgICAgIERlbGV0ZU9iamVjdCAoaGIpOworICAgICAgICB9CisKICAg
ICAgIHczMl90ZXh0X291dCAocywgeCwgcy0+eWJhc2UgLSBib2ZmLCBzLT5jaGFyMmIsIHMtPm5j
aGFycyk7CiAKICAgICAgIGlmIChzLT5mYWNlLT5vdmVyc3RyaWtlKQpAQCAtNjMzNiw3ICs2Mzkz
LDcgQEAKICAgdzMyX2Rlc3Ryb3lfZnJpbmdlX2JpdG1hcCwKICAgdzMyX3Blcl9jaGFyX21ldHJp
YywKICAgdzMyX2VuY29kZV9jaGFyLAotICBOVUxMLCAvKiB3MzJfY29tcHV0ZV9nbHlwaF9zdHJp
bmdfb3ZlcmhhbmdzICovCisgIHczMl9jb21wdXRlX2dseXBoX3N0cmluZ19vdmVyaGFuZ3MsCiAg
IHhfZHJhd19nbHlwaF9zdHJpbmcsCiAgIHczMl9kZWZpbmVfZnJhbWVfY3Vyc29yLAogICB3MzJf
Y2xlYXJfZnJhbWVfYXJlYSwKQEAgLTY0MzQsNiArNjQ5MSw4IEBACiAgICAgVUlOVCBzbW9vdGhp
bmdfdHlwZTsKICAgICBCT09MIHNtb290aGluZ19lbmFibGVkOwogCisgICAgY29uc3QgY2hhciAq
ZW52OworCiAgICAgLyogSWYgdXNpbmcgcHJvcG9ydGlvbmFsIHNjcm9sbCBiYXJzLCBlbnN1cmUg
aGFuZGxlIGlzIGF0IGxlYXN0IDUgcGl4ZWxzOwogICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGZp
eGVkIGhlaWdodC4gICovCiAgICAgdmVydGljYWxfc2Nyb2xsX2Jhcl9taW5faGFuZGxlID0gNTsK
QEAgLTY0NTksMTEgKzY1MTgsMTMgQEAKICAgICAgICB0aGUgY2hhciBtZXRyaWMgY2FsY3VsYXRp
b25zIHdoaWNoIGFkZHMgZXh0cmEgcGl4ZWxzIHRvCiAgICAgICAgY29tcGVuc2F0ZSBmb3IgdGhl
ICJzdWItcGl4ZWxzIiB0aGF0IGFyZSBub3QgY291bnRlZCBieSB0aGUKICAgICAgICBzeXN0ZW0g
QVBJcy4gKi8KKyAgICBlbnYgPSBnZXRlbnYoIkVNQUNTX0NMRUFSVFlQRSIpOwogICAgIGNsZWFy
dHlwZV9hY3RpdmUgPQotICAgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8gKFNQSV9HRVRGT05UU01P
T1RISU5HLCAwLCAmc21vb3RoaW5nX2VuYWJsZWQsIDApCi0gICAgICAmJiBzbW9vdGhpbmdfZW5h
YmxlZAotICAgICAgJiYgU3lzdGVtUGFyYW1ldGVyc0luZm8gKFNQSV9HRVRGT05UU01PT1RISU5H
VFlQRSwgMCwgJnNtb290aGluZ190eXBlLCAwKQotICAgICAgJiYgc21vb3RoaW5nX3R5cGUgPT0g
RkVfRk9OVFNNT09USElOR0NMRUFSVFlQRTsKKyAgICAgIGVudiA/IChhdG9pKGVudikgIT0gMCkg
OgorICAgICAgICAoU3lzdGVtUGFyYW1ldGVyc0luZm8gKFNQSV9HRVRGT05UU01PT1RISU5HLCAw
LCAmc21vb3RoaW5nX2VuYWJsZWQsIDApCisgICAgICAgICAmJiBzbW9vdGhpbmdfZW5hYmxlZAor
ICAgICAgICAgJiYgU3lzdGVtUGFyYW1ldGVyc0luZm8gKFNQSV9HRVRGT05UU01PT1RISU5HVFlQ
RSwgMCwgJnNtb290aGluZ190eXBlLCAwKQorICAgICAgICAgJiYgc21vb3RoaW5nX3R5cGUgPT0g
RkVfRk9OVFNNT09USElOR0NMRUFSVFlQRSk7CiAgIH0KIH0KIAo=

------_=_NextPart_001_01C82D1F.7AB72653--

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Emacs 22.1 Windows ClearType Support
@ 2007-11-23  9:46 Angelo Graziosi
  0 siblings, 0 replies; 10+ messages in thread
From: Angelo Graziosi @ 2007-11-23  9:46 UTC (permalink / raw)
  To: emacs-devel



I have the habit to do a Cygwin build of Emacs-CVS but recently I have
tried this:
ftp://alpha.gnu.org/gnu/auctex/emacs+auctex-w32-2007-07-07.zip, that is a
native Windows build.

Comparing the look of characters, the Windows build looks better than the
Cygwin one: the characters appear antialiased (I have an LCD with
ClearType enabled in Windows XP) while in the Cygwin build they do not
look so well defined.

I ask if one can apply some tricks to have better results also in
the Cygwin build (avoiding GTK that under Cygwin does not work, see
PROBLEMS).


TIA,

   Angelo.


---
http://www.webalice.it/angelo.graziosi

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-11-23  9:46 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-23  9:46 Emacs 22.1 Windows ClearType Support Angelo Graziosi
     [not found] <A69AA663CE9BBC44AE1DA72483DE15DE09AACFEB@HQ-MAIL3.ptcnet.ptc.com>
2007-11-22 21:39 ` Jason Rumney
2007-11-22 21:43 ` Juanma Barranquero
2007-11-22 21:55   ` Drew Adams
2007-11-22 22:06     ` Jason Rumney
2007-11-22 22:24       ` Ng, Andrew
2007-11-22 22:47         ` Drew Adams
2007-11-22 21:58   ` Jason Rumney
2007-11-22 22:07     ` Juanma Barranquero
2007-11-23  4:35 ` Richard Stallman

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).