]> code.delx.au - gnu-emacs/commitdiff
backout 1996-01-21T00:22:24Z!voelker@cs.washington.edu
authorGeoff Voelker <voelker@cs.washington.edu>
Thu, 25 Jan 1996 03:13:39 +0000 (03:13 +0000)
committerGeoff Voelker <voelker@cs.washington.edu>
Thu, 25 Jan 1996 03:13:39 +0000 (03:13 +0000)
src/w32fns.c
src/w32reg.c
src/w32term.h

index 4e1092c692456582f42b6297bf077d41c2aa3f0b..11aaf43dd01b7d7c81e68eaffe5c14ef021cc84d 100644 (file)
@@ -45,13 +45,6 @@ extern struct scroll_bar *x_window_to_scroll_bar ();
 /* The colormap for converting color names to RGB values */
 Lisp_Object Vwin32_color_map;
 
-/* Switch to control whether we inhibit requests for italicised fonts (which
-   are synthesized, look ugly, and are trashed by cursor movement under NT). */
-Lisp_Object Vwin32_enable_italics;
-
-/* Enable palette management. */
-Lisp_Object Vwin32_enable_palette;
-
 /* The name we're using in resource queries.  */
 Lisp_Object Vx_resource_name;
 
@@ -618,7 +611,7 @@ x_set_frame_parameters (f, alist)
          if (NATNUMP (param_index)
              && (XFASTINT (param_index)
                  < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])))
-           (*x_frame_parms[XINT (param_index)].setter) (f, val, old_value);
+           (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value);
        }
     }
 
@@ -762,16 +755,18 @@ x_real_positions (f, xptr, yptr)
      int *xptr, *yptr;
 {
   POINT pt;
-  RECT rect;
+
+  {
+      RECT rect;
       
-  GetClientRect (FRAME_WIN32_WINDOW (f), &rect);
-  AdjustWindowRect (&rect, f->output_data.win32->dwStyle, 
-                   FRAME_EXTERNAL_MENU_BAR (f));
+      GetClientRect(FRAME_WIN32_WINDOW(f), &rect);
+      AdjustWindowRect(&rect, f->output_data.win32->dwStyle, FRAME_EXTERNAL_MENU_BAR(f));
       
-  pt.x = rect.left;
-  pt.y = rect.top;
+      pt.x = rect.left;
+      pt.y = rect.top;
+  }
 
-  ClientToScreen (FRAME_WIN32_WINDOW (f), &pt);
+  ClientToScreen (FRAME_WIN32_WINDOW(f), &pt);
 
   *xptr = pt.x;
   *yptr = pt.y;
@@ -821,91 +816,25 @@ x_report_frame_params (f, alistptr)
 }
 \f
 
-DEFUN ("win32-define-rgb-color", Fwin32_define_rgb_color, Swin32_define_rgb_color, 4, 4, 0,
-       "Convert RGB numbers to a windows color reference and associate with\n\
-NAME (a string).  This adds or updates a named color to win32-color-map,\n\
-making it available for use.  The original entry's RGB ref is returned,\n\
-or nil if the entry is new.")
-    (red, green, blue, name)
-    Lisp_Object red, green, blue, name;
+#if 0
+DEFUN ("win32-rgb", Fwin32_rgb, Swin32_rgb, 3, 3, 0,
+       "Convert RGB numbers to a windows color reference.")
+    (red, green, blue)
+    Lisp_Object red, green, blue;
 {
     Lisp_Object rgb;
-    Lisp_Object oldrgb = Qnil;
-    Lisp_Object entry;
 
     CHECK_NUMBER (red, 0);
     CHECK_NUMBER (green, 0);
     CHECK_NUMBER (blue, 0);
-    CHECK_STRING (name, 0);
 
-    XSET (rgb, Lisp_Int, RGB (XUINT (red), XUINT (green), XUINT (blue)));
-
-    BLOCK_INPUT;
-
-    /* replace existing entry in win32-color-map or add new entry. */
-    entry = Fassoc (name, Vwin32_color_map);
-    if (NILP (entry)) 
-      {
-       entry = Fcons (name, rgb);
-       Vwin32_color_map = Fcons (entry, Vwin32_color_map);
-      } 
-    else 
-      {
-       oldrgb = Fcdr (entry);
-       Fsetcdr (entry, rgb);
-      }
-
-    UNBLOCK_INPUT;
+    XSET (rgb, Lisp_Int, RGB(XUINT(red), XUINT(green), XUINT(blue)));
 
-    return (oldrgb);
+    return (rgb);
 }
 
-DEFUN ("win32-load-color-file", Fwin32_load_color_file, Swin32_load_color_file, 1, 1, 0,
-       "Create an alist of color entries from an external file (ie. rgb.txt).\n\
-Assign this value to win32-color-map to replace the existing color map.\n\
-The file should define one named RGB color per line like so:\
-  R G B   name\n\
-where R,G,B are numbers between 0 and 255 and name is an arbitrary string.")
-    (filename)
-    Lisp_Object filename;
-{
-  FILE *fp;
-  Lisp_Object cmap = Qnil;
-  Lisp_Object abspath;
-
-  CHECK_STRING (filename, 0);
-  abspath = Fexpand_file_name (filename, Qnil);
-
-  fp = fopen (XSTRING (filename)->data, "rt");
-  if (fp) 
-    {
-      char buf[512];
-      int red, green, blue;
-      int num;
-
-      BLOCK_INPUT;
-
-      while (fgets (buf, sizeof (buf), fp) != NULL) 
-       {
-         if (sscanf (buf, "%u %u %u %n]", &red, &green, &blue, &num) == 3) 
-           {
-             char *name = buf + num;
-             num = strlen (name) - 1;
-             if (name[num] == '\n')
-               name[num] = 0;
-             cmap = Fcons (Fcons (build_string (name),
-                                  make_number (RGB (red, green, blue))),
-                           cmap);
-           }
-       }
-      fclose (fp);
-
-      UNBLOCK_INPUT;
-    }
-
-  return cmap;
-}
 
+#else
 /* The default colors for the win32 color map */
 typedef struct colormap_t 
 {
@@ -1179,6 +1108,7 @@ DEFUN ("win32-default-color-map", Fwin32_default_color_map, Swin32_default_color
   
   return (cmap);
 }
+#endif
 
 Lisp_Object 
 win32_to_x_color (rgb)
@@ -1231,121 +1161,6 @@ x_to_win32_color (colorname)
   return ret;
 }
 
-
-void
-win32_regenerate_palette (FRAME_PTR f)
-{
-  struct win32_palette_entry * pList;
-  LOGPALETTE *          p_palette;
-  HPALETTE              h_new_palette;
-  int                   i;
-
-  /* don't bother trying to create palette if not supported */
-  if (! FRAME_WIN32_DISPLAY_INFO (f)->has_palette)
-    return;
-
-  p_palette = (LOGPALETTE *)
-    xmalloc (sizeof (LOGPALETTE) +
-            FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use * sizeof (PALETTEENTRY));
-  p_palette->palVersion = 0x300;
-  p_palette->palNumEntries = FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use;
-
-  pList = FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-  for (i = 0; i < FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use; 
-       i++, pList = pList->next)
-    p_palette->palPalEntry[i] = pList->entry;
-
-  h_new_palette = CreatePalette ((LPLOGPALETTE) p_palette);
-
-  enter_crit (CRIT_GDI);
-
-  if (FRAME_WIN32_DISPLAY_INFO (f)->h_palette)
-    DeleteObject (FRAME_WIN32_DISPLAY_INFO (f)->h_palette);
-  FRAME_WIN32_DISPLAY_INFO (f)->h_palette = h_new_palette;
-
-  /* Realize display palette and garbage all frames. */
-  ReleaseFrameDC (f, GetFrameDC (f));
-
-  leave_crit (CRIT_GDI);
-
-  xfree (p_palette);
-}
-
-#define WIN32_COLOR(pe)  RGB (pe.peRed, pe.peGreen, pe.peBlue)
-#define SET_WIN32_COLOR(pe, color) \
-  do { \
-    pe.peRed = GetRValue (color); \
-    pe.peGreen = GetGValue (color); \
-    pe.peBlue = GetBValue (color); \
-    pe.peFlags = 0; \
-  } while (0)
-
-#if 0
-/* Keep these around in case we ever want to track color usage. */
-void
-win32_map_color (FRAME_PTR f, COLORREF color)
-{
-  struct win32_palette_entry * pList = FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-  
-  if (NILP (Vwin32_enable_palette))
-    return;
-  
-  /* check if color is already mapped */
-  while (pList)
-    {
-      if (WIN32_COLOR (pList->entry) == color)
-       {
-         ++pList->refcount;
-         return;
-       }
-      pList = pList->next;
-    }
-  
-  /* not already mapped, so add to list and recreate Windows palette */
-  pList = (struct win32_palette_entry *) xmalloc (sizeof (struct win32_palette_entry));
-  SET_WIN32_COLOR (pList->entry, color);
-  pList->refcount = 1;
-  pList->next = FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-  FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use = pList;
-  FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use++;
-  
-  /* set flag that palette must be regenerated */
-  FRAME_WIN32_DISPLAY_INFO (f)->regen_palette = TRUE;
-}
-
-void
-win32_unmap_color (FRAME_PTR f, COLORREF color)
-{
-  struct win32_palette_entry * pList = FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-  struct win32_palette_entry **ppPrev = &FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-
-  if (NILP (Vwin32_enable_palette))
-    return;
-
-  /* check if color is already mapped */
-  while (pList)
-    {
-      if (WIN32_COLOR (pList->entry) == color)
-       {
-         if (--pList->refcount == 0)
-           {
-             *ppPrev = pList->next;
-             xfree (pList);
-             FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use--;
-             break;
-           }
-         else
-           return;
-       }
-      ppPrev = &pList->next;
-      pList = pList->next;
-    }
-
-  /* set flag that palette must be regenerated */
-  FRAME_WIN32_DISPLAY_INFO (f)->regen_palette = TRUE;
-}
-#endif
-
 /* Decide if color named COLOR is valid for the display associated with
    the selected frame; if so, return the rgb values in COLOR_DEF.
    If ALLOC is nonzero, allocate a new colormap cell.  */
@@ -1358,49 +1173,18 @@ defined_color (f, color, color_def, alloc)
      int alloc;
 {
   register Lisp_Object tem;
-  
+
   tem = x_to_win32_color (color);
-  
+
   if (!NILP (tem)) 
     {
-      if (!NILP (Vwin32_enable_palette))
-       {
-         struct win32_palette_entry * pEntry =
-           FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-         struct win32_palette_entry ** ppLast =
-           &FRAME_WIN32_DISPLAY_INFO (f)->p_colors_in_use;
-      
-         /* check if color is already mapped */
-         while (pEntry)
-           {
-             if (WIN32_COLOR (pEntry->entry) == XUINT(tem))
-               break;
-             ppLast = &pEntry->next;
-             pEntry = pEntry->next;
-           }
-
-         if (pEntry == NULL && alloc)
-           {
-             /* not already mapped, so add to list */
-             pEntry = (struct win32_palette_entry *)
-               xmalloc (sizeof (struct win32_palette_entry));
-             SET_WIN32_COLOR (pEntry->entry, XUINT(tem));
-             pEntry->next = NULL;
-             *ppLast = pEntry;
-             FRAME_WIN32_DISPLAY_INFO (f)->n_colors_in_use++;
-
-             /* set flag that palette must be regenerated */
-             FRAME_WIN32_DISPLAY_INFO (f)->regen_palette = TRUE;
-           }
-       }
-      /* whether or not frame can display arbitrary RGB colors, force
-        COLORREF value to snap to nearest color in system palette by
-        simulating the PALETTE_RGB macro. */
-      *color_def = XUINT (tem) | 0x2000000;
+      *color_def = XUINT (tem);
       return 1;
-    }
+    } 
   else 
-    return 0;
+    {
+      return 0;
+    }
 }
 
 /* Given a string ARG naming a color, compute a pixel value from it
@@ -2539,7 +2323,7 @@ win32_init_class (hinst)
 {
   WNDCLASS wc;
 
-  wc.style = CS_HREDRAW | CS_VREDRAW;
+  wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
   wc.lpfnWndProc = (WNDPROC) win32_wnd_proc;
   wc.cbClsExtra = 0;
   wc.cbWndExtra = WND_EXTRA_BYTES;
@@ -2643,6 +2427,26 @@ win_msg_worker (dw)
   return (0);
 }
 
+HDC 
+map_mode (hdc)
+     HDC hdc;
+{
+  if (hdc) 
+    {
+#if 0
+      /* Make mapping mode be in 1/20 of point */
+      
+      SetMapMode (hdc, MM_ANISOTROPIC);
+      SetWindowExtEx (hdc, 1440, 1440, NULL);
+      SetViewportExtEx (hdc,
+                       GetDeviceCaps (hdc, LOGPIXELSX),
+                       GetDeviceCaps (hdc, LOGPIXELSY),
+                       NULL);
+#endif
+    }
+  return (hdc);
+}
+
 /* Convert between the modifier bits Win32 uses and the modifier bits
    Emacs uses.  */
 unsigned int
@@ -2689,33 +2493,50 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
   switch (msg) 
     {
     case WM_ERASEBKGND:
-      enter_crit (CRIT_GDI);
-      GetUpdateRect (hwnd, &wmsg.rect, FALSE);
-      leave_crit (CRIT_GDI);
-      my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
-      return 1;
-    case WM_PALETTECHANGED:
-      /* ignore our own changes */
-      if ((HWND)wParam != hwnd)
       {
-       /* simply notify main thread it may need to update frames */
-       my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
+       HBRUSH hb;
+       HANDLE oldobj;
+       RECT rect;
+       
+       GetClientRect (hwnd, &rect);
+       
+       hb = CreateSolidBrush (GetWindowLong (hwnd, WND_BACKGROUND_INDEX));
+       
+       oldobj = SelectObject ((HDC)wParam, hb);
+       
+       FillRect((HDC)wParam, &rect, hb);
+       
+       SelectObject((HDC)wParam, oldobj);
+       
+       DeleteObject (hb);
+       
+       return (0);
       }
-      return 0;
     case WM_PAINT:
       {
        PAINTSTRUCT paintStruct;
-
-       enter_crit (CRIT_GDI);
+                   
        BeginPaint (hwnd, &paintStruct);
        wmsg.rect = paintStruct.rcPaint;
        EndPaint (hwnd, &paintStruct);
-       leave_crit (CRIT_GDI);
-
+      
        my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
       
        return (0);
       }
+      
+    case WM_CREATE:
+      {
+       HDC hdc = my_get_dc (hwnd);
+
+       /* Make mapping mode be in 1/20 of point */
+
+       map_mode (hdc);
+
+       ReleaseDC (hwnd, hdc);
+      }
+      
+      return (0);
     case WM_KEYDOWN:
     case WM_SYSKEYDOWN:
 #if 0
@@ -2740,7 +2561,7 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
          || wParam == VK_SHIFT
          || wParam == VK_CONTROL
          || wParam == VK_CAPITAL)
-       goto dflt;
+       break;
       
       /* Anything we do not have a name for needs to be translated or 
         returned as ascii keystroke.  */
@@ -2803,8 +2624,7 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
       {
        WINDOWPLACEMENT wp;
        LPWINDOWPOS lppos = (WINDOWPOS *) lParam;
-
-       wp.length = sizeof (wp);
+       
        GetWindowPlacement (hwnd, &wp);
        
        if (wp.showCmd != SW_SHOWMINIMIZED && ! (lppos->flags & SWP_NOSIZE))
@@ -2818,12 +2638,12 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
            
            GetWindowRect (hwnd, &wr);
            
-           enter_crit (CRIT_MSG);
+           enter_crit ();
            
            dwXUnits = GetWindowLong (hwnd, WND_X_UNITS_INDEX);
            dwYUnits = GetWindowLong (hwnd, WND_Y_UNITS_INDEX);
            
-           leave_crit (CRIT_MSG);
+           leave_crit ();
            
            memset (&rect, 0, sizeof (rect));
            AdjustWindowRect (&rect, GetWindowLong (hwnd, GWL_STYLE), 
@@ -3109,7 +2929,7 @@ This function is an internal primitive--use `make-frame' instead.")
       font = x_new_font (f, "-*-system-medium-r-normal-*-*-200-*-*-c-120-*-*");
 #endif
     if (! STRINGP (font))
-      font = x_new_font (f, "-*-Fixedsys-*-r-*-*-12-90-*-*-c-*-*-*");
+      font = x_new_font (f, "-*-terminal-medium-r-normal-*-*-180-*-*-c-120-*-*");
     UNBLOCK_INPUT;
     if (! STRINGP (font))
       font = build_string ("-*-system");
@@ -3297,50 +3117,54 @@ DEFUN ("unfocus-frame", Funfocus_frame, Sunfocus_frame, 0, 0, 0,
   return Qnil;
 }
 \f
-XFontStruct *
-win32_load_font (dpyinfo,name)
-     struct win32_display_info *dpyinfo;
-     char *name;
+XFontStruct 
+*win32_load_font (dpyinfo,name)
+struct win32_display_info *dpyinfo;
+char * name;
 {
   XFontStruct * font = NULL;
   BOOL ok;
-  LOGFONT lf;
-
-  if (!name || !x_to_win32_font (name, &lf)) 
-    return (NULL);
-
-  font = (XFontStruct *) xmalloc (sizeof (XFontStruct));
-  if (!font) return (NULL);
-
-  BLOCK_INPUT;
-
-  font->hfont = CreateFontIndirect (&lf);
-
-  if (font->hfont == NULL) 
-    {
-      ok = FALSE;
-    } 
-  else 
-    {
-      HDC hdc;
-      HANDLE oldobj;
-      
-      hdc = GetDC (dpyinfo->root_window);
-      
-      oldobj = SelectObject (hdc, font->hfont);
-      
-      ok = GetTextMetrics (hdc, &font->tm);
-      
-      SelectObject (hdc, oldobj);
-      
-      ReleaseDC (dpyinfo->root_window, hdc);
+  
+  {
+    LOGFONT lf;
+       
+    if (!name || !x_to_win32_font(name, &lf)) 
+      return (NULL);
+       
+    font = (XFontStruct *) xmalloc (sizeof (XFontStruct));
+       
+    if (!font) return (NULL);
+       
+    BLOCK_INPUT;
+       
+    font->hfont = CreateFontIndirect(&lf);
   }
+  
+    if (font->hfont == NULL) 
+      {
+       ok = FALSE;
+      } 
+    else 
+      {
+       HDC hdc;
+       HANDLE oldobj;
 
+       hdc = my_get_dc (dpyinfo->root_window);
+       
+       oldobj = SelectObject (hdc, font->hfont);
+       
+       ok = GetTextMetrics (hdc, &font->tm);
+       
+       SelectObject (hdc, oldobj);
+       
+       ReleaseDC (dpyinfo->root_window, hdc);
+      }
+  
   UNBLOCK_INPUT;
-
+  
   if (ok) return (font);
-
-  win32_unload_font (dpyinfo, font);
+  
+  win32_unload_font(dpyinfo, font);
   return (NULL);
 }
 
@@ -3351,7 +3175,7 @@ win32_unload_font (dpyinfo, font)
 {
   if (font) 
     {
-      if (font->hfont) DeleteObject (font->hfont);
+      if (font->hfont) DeleteObject(font->hfont);
       xfree (font);
     }
 }
@@ -3436,11 +3260,7 @@ x_to_win32_weight (lpw)
 {
   if (!lpw) return (FW_DONTCARE);
   
-  if (stricmp (lpw, "heavy") == 0)
-    return (FW_HEAVY);
-  else if (stricmp (lpw, "extrabold") == 0)
-    return (FW_EXTRABOLD);
-  else if (stricmp (lpw, "bold") == 0)
+  if (stricmp (lpw, "bold") == 0)
     return (FW_BOLD);
   else if (stricmp (lpw, "demibold") == 0)
     return (FW_SEMIBOLD);
@@ -3448,81 +3268,22 @@ x_to_win32_weight (lpw)
     return (FW_MEDIUM);
   else if (stricmp (lpw, "normal") == 0)
     return (FW_NORMAL);
-  else if (stricmp (lpw, "light") == 0)
-    return (FW_LIGHT);
-  else if (stricmp (lpw, "extralight") == 0)
-    return (FW_EXTRALIGHT);
-  else if (stricmp (lpw, "thin") == 0)
-    return (FW_THIN);
   else
     return (FW_DONTCARE);
 }
 
-
 char * 
 win32_to_x_weight (fnweight)
      int fnweight;
 {
-  if (fnweight >= FW_HEAVY)
-    return "heavy";
-  else if (fnweight >= FW_EXTRABOLD)
-    return "extrabold";
-  else if (fnweight >= FW_BOLD)
-    return "bold";
-  else if (fnweight >= FW_SEMIBOLD)
-    return "semibold";
-  else if (fnweight >= FW_MEDIUM)
-    return "medium";
-  else if (fnweight >= FW_NORMAL)
-    return "normal";
-  else if (fnweight >= FW_LIGHT)
-    return "light";
-  else if (fnweight >= FW_EXTRALIGHT)
-    return "extralight";
-  else if (fnweight >= FW_THIN)
-    return "thin";
-  else
-    return "*";
-}
-
-LONG
-x_to_win32_charset (lpcs)
-     char * lpcs;
-{
-  if (!lpcs) return (0);
-  
-  if (stricmp (lpcs, "ansi") == 0)
-    return (ANSI_CHARSET);
-  else if (stricmp (lpcs, "iso8859-1") == 0)
-    return (ANSI_CHARSET);
-  else if (stricmp (lpcs, "iso8859") == 0)
-    return (ANSI_CHARSET);
-  else if (stricmp (lpcs, "oem") == 0)
-    return (OEM_CHARSET);
-#ifdef UNICODE_CHARSET
-  else if (stricmp (lpcs, "unicode") == 0)
-    return (UNICODE_CHARSET);
-  else if (stricmp (lpcs, "iso10646") == 0)
-    return (UNICODE_CHARSET);
-#endif
-  else
-    return (0);
-}
-
-char *
-win32_to_x_charset (fncharset)
-    int fncharset;
-{
-  switch (fncharset)
-    {
-    case ANSI_CHARSET:     return "ansi";
-    case OEM_CHARSET:      return "oem";
-    case SYMBOL_CHARSET:   return "symbol";
-#ifdef UNICODE_CHARSET
-    case UNICODE_CHARSET:  return "unicode";
-#endif
-    }
-  return "*";
+  if (fnweight >= FW_BOLD) 
+    return ("bold");
+  else if (fnweight >= FW_SEMIBOLD) 
+    return ("demibold");
+  else if (fnweight >= FW_MEDIUM) 
+    return ("medium");
+  else  
+    return ("normal");
 }
 
 BOOL 
@@ -3533,25 +3294,29 @@ win32_to_x_font (lplogfont, lpxstr, len)
 {
   if (!lpxstr) return (FALSE);
 
-  if (lplogfont)
+  if (lplogfont) 
     {
+      int height = (lplogfont->lfHeight * 1440) 
+       / one_win32_display_info.height_in;
+      int width = (lplogfont->lfWidth * 1440) 
+       / one_win32_display_info.width_in;
+
+      height = abs (height);
       _snprintf (lpxstr, len - 1,
-                "-*-%s-%s-%c-*-*-%d-%d-*-*-%c-%d-*-%s-",
+                "-*-%s-%s-%c-%s-%s-*-%d-*-*-%c-%d-*-*-",
                 lplogfont->lfFaceName,
                 win32_to_x_weight (lplogfont->lfWeight),
                 lplogfont->lfItalic ? 'i' : 'r',
-                abs (lplogfont->lfHeight),
-                (abs (lplogfont->lfHeight) * 720) / one_win32_display_info.height_in,
+                "*", "*", 
+                height,
                 ((lplogfont->lfPitchAndFamily & 0x3) == VARIABLE_PITCH) ? 'p' : 'c',
-                lplogfont->lfWidth * 10,
-                win32_to_x_charset (lplogfont->lfCharSet)
-                );
-    }
-  else
+                width);
+    } 
+  else 
     {
       strncpy (lpxstr, "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-", len - 1);
     }
-  
+
   lpxstr[len - 1] = 0;         /* just to be sure */
   return (TRUE);
 }
@@ -3565,119 +3330,56 @@ x_to_win32_font (lpxstr, lplogfont)
   
   memset (lplogfont, 0, sizeof (*lplogfont));
   
+  lplogfont->lfCharSet = OEM_CHARSET;
   lplogfont->lfOutPrecision = OUT_DEFAULT_PRECIS;
   lplogfont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
   lplogfont->lfQuality = DEFAULT_QUALITY;
   
-  if (!lpxstr)
-    return FALSE;
-
-  /* Provide a simple escape mechanism for specifying Windows font names
-   * directly -- if font spec does not beginning with '-', assume this
-   * format:
-   *   "<font name>[:height in pixels[:width in pixels[:weight]]]"
-   */
+  if (lpxstr && *lpxstr == '-') lpxstr++;
   
-  if (*lpxstr == '-')
-    {
-      int fields;
-      char name[50], weight[20], slant, pitch, pixels[10], height[10], width[10], remainder[20];
-      char * encoding;
-
-      fields = sscanf (lpxstr,
-                      "-%*[^-]-%49[^-]-%19[^-]-%c-%*[^-]-%*[^-]-%9[^-]-%9[^-]-%*[^-]-%*[^-]-%c-%9[^-]-%19s",
-                      name, weight, &slant, pixels, height, &pitch, width, remainder);
-
-      if (fields == EOF) return (FALSE);
-
-      if (fields > 0 && name[0] != '*')
-       {
-         strncpy (lplogfont->lfFaceName,name, LF_FACESIZE);
-         lplogfont->lfFaceName[LF_FACESIZE-1] = 0;
-       }
-      else
-       lplogfont->lfFaceName[0] = 0;
-
-      fields--;
-
-      lplogfont->lfWeight = x_to_win32_weight((fields > 0 ? weight : ""));
-
-      fields--;
-
-      if (!NILP (Vwin32_enable_italics))
-       lplogfont->lfItalic = (fields > 0 && slant == 'i');
-
-      fields--;
-
-      if (fields > 0 && pixels[0] != '*')
-       lplogfont->lfHeight = atoi (pixels);
-
-      fields--;
-
-      if (fields > 0 && lplogfont->lfHeight == 0 && height[0] != '*')
-       lplogfont->lfHeight = (atoi (height)
-                              * one_win32_display_info.height_in) / 720;
-
-      fields--;
-
-      lplogfont->lfPitchAndFamily =
-       (fields > 0 && pitch == 'p') ? VARIABLE_PITCH : FIXED_PITCH;
-
-      fields--;
-
-      if (fields > 0 && width[0] != '*')
-       lplogfont->lfWidth = atoi (width) / 10;
-
-      fields--;
-
-      /* Not all font specs include the registry field, so we allow for an
-        optional registry field before the encoding when parsing
-        remainder.  Also we strip the trailing '-' if present. */
+  {
+    int fields;
+    char name[50], weight[20], slant, pitch, height[10], width[10];
+    
+    fields = (lpxstr
+             ? sscanf (lpxstr, 
+                       "%*[^-]-%[^-]-%[^-]-%c-%*[^-]-%*[^-]-%*[^-]-%[^-]-%*[^-]-%*[^-]-%c-%[^-]",
+                       name, weight, &slant, height, &pitch, width)
+             : 0);
+    
+    if (fields == EOF) return (FALSE);
+    
+    if (fields > 0 && name[0] != '*') 
       {
-       int len = strlen (remainder);
-       if (len > 0 && remainder[len-1] == '-')
-         remainder[len-1] = 0;
+       strncpy (lplogfont->lfFaceName, name, LF_FACESIZE);
+      } 
+    else 
+      {
+       lplogfont->lfFaceName[0] = 0;
       }
-      encoding = remainder;
-      if (strncmp (encoding, "*-", 2) == 0)
-       encoding += 2;
-      lplogfont->lfCharSet = x_to_win32_charset (fields > 0 ? encoding : "");
-    }
-  else
-    {
-      int fields;
-      char name[100], height[10], width[10], weight[20];
-
-      fields = sscanf (lpxstr,
-                      "%99[^:]:%9[^:]:%9[^:]:%19s",
-                      name, height, width, weight);
-
-      if (fields == EOF) return (FALSE);
-
-      if (fields > 0)
-       {
-         strncpy (lplogfont->lfFaceName,name, LF_FACESIZE);
-         lplogfont->lfFaceName[LF_FACESIZE-1] = 0;
-       }
-      else
-       {
-         lplogfont->lfFaceName[0] = 0;
-       }
-
-      fields--;
-
-      if (fields > 0)
-       lplogfont->lfHeight = atoi (height);
-
-      fields--;
-
-      if (fields > 0)
-       lplogfont->lfWidth = atoi (width);
-
-      fields--;
-
-      lplogfont->lfWeight = x_to_win32_weight ((fields > 0 ? weight : ""));
-    }
+    
+    fields--;
+    
+    lplogfont->lfWeight = x_to_win32_weight((fields > 0 ? weight : ""));
+    
+    fields--;
+    
+    lplogfont->lfItalic = (fields > 0 && slant == 'i');
+    
+    fields--;
+    
+    if (fields > 0 && height[0] != '*')
+      lplogfont->lfHeight = (atoi (height) * one_win32_display_info.height_in) / 1440;
+    
+    fields--;
+    
+    lplogfont->lfPitchAndFamily = (fields > 0 && pitch == 'p') ? VARIABLE_PITCH : FIXED_PITCH;
+    
+    fields--;
+    
+    if (fields > 0 && width[0] != '*')
+      lplogfont->lfWidth = (atoi (width) * one_win32_display_info.width_in) / 1440;
+  }
   
   return (TRUE);
 }
@@ -3871,7 +3573,7 @@ even if they match PATTERN and FACE.")
   ef.numFonts = 0;
 
   {
-    ef.hdc = GetDC (FRAME_WIN32_WINDOW (f));
+    ef.hdc = my_get_dc (FRAME_WIN32_WINDOW (f));
 
     EnumFontFamilies (ef.hdc, NULL, (FONTENUMPROC) enum_font_cb1, (LPARAM)&ef);
     
@@ -4057,11 +3759,9 @@ If omitted or nil, that stands for the selected frame's display.")
   HDC hdc;
   int cap;
 
-  hdc = GetDC (dpyinfo->root_window);
-  if (dpyinfo->has_palette)
-    cap = GetDeviceCaps (hdc, SIZEPALETTE);
-  else
-    cap = GetDeviceCaps (hdc, NUMCOLORS);
+  hdc = my_get_dc (dpyinfo->root_window);
+  
+  cap = GetDeviceCaps (hdc,NUMCOLORS);
   
   ReleaseDC (dpyinfo->root_window, hdc);
   
@@ -4140,8 +3840,10 @@ If omitted or nil, that stands for the selected frame's display.")
   HDC hdc;
   int cap;
 
-  hdc = GetDC (dpyinfo->root_window);
+  hdc = my_get_dc (dpyinfo->root_window);
+  
   cap = GetDeviceCaps (hdc, VERTSIZE);
+  
   ReleaseDC (dpyinfo->root_window, hdc);
   
   return make_number (cap);
@@ -4160,8 +3862,10 @@ If omitted or nil, that stands for the selected frame's display.")
   HDC hdc;
   int cap;
 
-  hdc = GetDC (dpyinfo->root_window);
+  hdc = my_get_dc (dpyinfo->root_window);
+  
   cap = GetDeviceCaps (hdc, HORZSIZE);
+  
   ReleaseDC (dpyinfo->root_window, hdc);
   
   return make_number (cap);
@@ -4310,22 +4014,12 @@ terminate Emacs if we can't open the connection.")
   unsigned int n_planes;
   unsigned char *xrm_option;
   struct win32_display_info *dpyinfo;
-  Lisp_Object color_file = Qnil;
 
   CHECK_STRING (display, 0);
   if (! NILP (xrm_string))
     CHECK_STRING (xrm_string, 1);
 
-  /* Allow color mapping to be defined externally; first look in user's
-     HOME directory, then in Emacs etc dir for a file called rgb.txt.  */
-  color_file = build_string ("~/rgb.txt");
-  if (NILP (color_file) || NILP (Ffile_readable_p (color_file)))
-    color_file = concat2 (Vdoc_directory, build_string ("rgb.txt"));
-
-  Vwin32_color_map = Fwin32_load_color_file (color_file);
-
-  if (NILP (Vwin32_color_map))
-    Vwin32_color_map = Fwin32_default_color_map ();
+  Vwin32_color_map = Fwin32_default_color_map ();
 
   if (! NILP (xrm_string))
     xrm_option = (unsigned char *) XSTRING (xrm_string)->data;
@@ -4345,7 +4039,8 @@ terminate Emacs if we can't open the connection.")
   if (dpyinfo == 0)
     {
       if (!NILP (must_succeed))
-       fatal ("Cannot connect to server %s.\n", XSTRING (display)->data);
+       fatal ("Cannot connect to server %s.\n",
+              XSTRING (display)->data);
       else
        error ("Cannot connect to server %s", XSTRING (display)->data);
     }
@@ -4436,7 +4131,7 @@ DEFUN ("win32-select-font", Fwin32_select_font, Swin32_select_font, 0, 1, 0,
   cf.lpLogFont = &lf;
 
   if (!ChooseFont (&cf) || !win32_to_x_font (&lf, buf, 100))
-    return Qnil;
+      return Qnil;
 
   return build_string (buf);
 }
@@ -4524,14 +4219,6 @@ syms_of_win32fns ()
               "A array of color name mappings for windows.");
   Vwin32_color_map = Qnil;
 
-  DEFVAR_LISP ("win32-enable-italics", &Vwin32_enable_italics,
-              "Non-nil enables selection of artificially italicized fonts.");
-  Vwin32_enable_italics = Qnil;
-
-  DEFVAR_LISP ("win32-enable-palette", &Vwin32_enable_palette,
-              "Non-nil enables Windows palette management to map colors exactly.");
-  Vwin32_enable_palette = Qt;
-
   init_x_parm_symbols ();
 
   DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path,
@@ -4607,8 +4294,6 @@ unless you set it to something else.");
   /* Win32 specific functions */
 
   defsubr (&Swin32_select_font);
-  defsubr (&Swin32_define_rgb_color);
-  defsubr (&Swin32_load_color_file);
 }
 
 #undef abort
@@ -4616,9 +4301,9 @@ unless you set it to something else.");
 void 
 win32_abort()
 {
-  MessageBox (NULL,
-             "A fatal error has occurred - aborting!",
-             "Emacs Abort Dialog",
-             MB_OK | MB_ICONEXCLAMATION);
-  abort();
+    MessageBox (NULL,
+               "A fatal error has occurred - aborting!",
+               "Emacs Abort Dialog",
+               MB_OK|MB_ICONEXCLAMATION);
+    abort();
 }
index 9142fee5a40af42a6061aea6adf3ded90a3ba8b7..dcb4ba297167d346694b07061587523d2285090a 100644 (file)
@@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA.  */
 #include <stdio.h>
 #include <string.h>
 
-#define REG_ROOT "Software\\GNU\\Emacs"
+#define REG_ROOT "SOFTWARE\\GNU\\Emacs\\"
 
 LPBYTE 
 win32_get_string_resource (name, class, dwexptype)
index 7bf953fd036bb701c9b658c8f77e764a0a610227..a530189654161e804950b81a8b434076b57d091d 100644 (file)
@@ -75,23 +75,6 @@ struct win32_bitmap_record
   /* Record some info about this pixmap.  */
   int height, width, depth;
 };
-
-/* Palette book-keeping stuff for mapping requested colors into the
-   system palette.  Keep a ref-counted list of requested colors and
-   regenerate the app palette whenever the requested list changes. */
-
-extern Lisp_Object Vwin32_enable_palette;
-
-struct win32_palette_entry {
-  struct win32_palette_entry * next;
-  PALETTEENTRY entry;
-#if 0
-  unsigned refcount;
-#endif
-};
-
-extern void win32_regenerate_palette(struct frame *f);
-
 \f
 /* For each display (currently only one on win32), we have a structure that
    records information about it.  */
@@ -119,15 +102,6 @@ struct win32_display_info
   /* The cursor to use for vertical scroll bars.  */
   Cursor vertical_scroll_bar_cursor;
 
-  /* color palette information */
-  int has_palette;
-  struct win32_palette_entry * p_colors_in_use;
-  unsigned n_colors_in_use;
-  HPALETTE h_palette;
-
-  /* deferred action flags checked when starting frame update */
-  int regen_palette;
-
   /* A table of all the fonts we have already loaded.  */
   struct font_info *font_table;
 
@@ -213,9 +187,6 @@ extern struct win32_display_info *win32_term_init ();
 
 struct win32_output
 {
-  /* Original palette (used to deselect real palette after drawing) */
-  HPALETTE h_old_palette;
-
   /* Position of the Win32 window (x and y offsets in root window).  */
   int left_pos;
   int top_pos;
@@ -577,6 +548,10 @@ win32_fill_area (f,hdc,f->output_data.win32->background_pixel,x,y,nx,ny)
 extern XFontStruct *win32_load_font ();
 extern void win32_unload_font ();
 
+extern HDC map_mode();
+
+#define my_get_dc(hwnd) (map_mode (GetDC (hwnd)))
+
 #define WM_EMACS_START                 (WM_USER + 1)
 #define WM_EMACS_KILL                  (WM_EMACS_START + 0x00)
 #define WM_EMACS_CREATEWINDOW          (WM_EMACS_START + 0x01)
@@ -603,26 +578,11 @@ typedef struct Win32Msg {
     RECT rect;
 } Win32Msg;
 
-/* Identifiers for array of critical sections; we need one for
-   serializing access to hand-crafter message queue, and another
-   for preventing palette changes during GDI calls. */
-enum win32_critical_section {
-  CRIT_MSG,                    /* message queue */
-  CRIT_GDI,                    /* GDI calls */
-  CRIT_TOTAL                   /* num of critical sections */
-};
-
-extern CRITICAL_SECTION critsect[CRIT_TOTAL];
-
 extern void init_crit ();
+extern void enter_crit ();
+extern void leave_crit ();
 extern void delete_crit ();
 
-#define enter_crit(index) EnterCriticalSection (&critsect[index])
-#define leave_crit(index) LeaveCriticalSection (&critsect[index])
-
-extern HDC GetFrameDC (struct frame * f);
-extern int ReleaseFrameDC (struct frame * f, HDC hDC);
-
 extern BOOL get_next_msg ();
 extern BOOL post_msg ();
 extern void wait_for_sync ();