Blame gdk/win32/gdkmain-win32.c

Packit 98cdb6
/* GDK - The GIMP Drawing Kit
Packit 98cdb6
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit 98cdb6
 * Copyright (C) 1998-2002 Tor Lillqvist
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
/*
Packit 98cdb6
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Packit 98cdb6
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit 98cdb6
 * files for a list of changes.  These files are distributed with
Packit 98cdb6
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include "config.h"
Packit 98cdb6
Packit 98cdb6
#include <glib/gprintf.h>
Packit 98cdb6
#include <stdlib.h>
Packit 98cdb6
#include <string.h>
Packit 98cdb6
#include <limits.h>
Packit 98cdb6
#include <io.h>
Packit 98cdb6
Packit 98cdb6
#include "gdk.h"
Packit 98cdb6
#include "gdkregion-generic.h"
Packit 98cdb6
#include "gdkkeysyms.h"
Packit 98cdb6
#include "gdkinternals.h"
Packit 98cdb6
#include "gdkintl.h"
Packit 98cdb6
#include "gdkprivate-win32.h"
Packit 98cdb6
#include "gdkinput-win32.h"
Packit 98cdb6
Packit 98cdb6
#include <objbase.h>
Packit 98cdb6
Packit 98cdb6
#include <imm.h>
Packit 98cdb6
Packit 98cdb6
static gboolean gdk_synchronize = FALSE;
Packit 98cdb6
Packit 98cdb6
static gboolean dummy;
Packit 98cdb6
Packit 98cdb6
const GOptionEntry _gdk_windowing_args[] = {
Packit 98cdb6
  { "sync", 0, 0, G_OPTION_ARG_NONE, &gdk_synchronize, 
Packit 98cdb6
    /* Description of --sync in --help output */              N_("Don't batch GDI requests"), NULL },
Packit 98cdb6
  { "no-wintab", 0, 0, G_OPTION_ARG_NONE, &_gdk_input_ignore_wintab, 
Packit 98cdb6
    /* Description of --no-wintab in --help output */         N_("Don't use the Wintab API for tablet support"), NULL },
Packit 98cdb6
  { "ignore-wintab", 0, 0, G_OPTION_ARG_NONE, &_gdk_input_ignore_wintab, 
Packit 98cdb6
    /* Description of --ignore-wintab in --help output */     N_("Same as --no-wintab"), NULL },
Packit 98cdb6
  { "use-wintab", 0, 0, G_OPTION_ARG_NONE, &dummy,
Packit 98cdb6
    /* Description of --use-wintab in --help output */     N_("Do use the Wintab API [default]"), NULL },
Packit 98cdb6
  { "max-colors", 0, 0, G_OPTION_ARG_INT, &_gdk_max_colors, 
Packit 98cdb6
    /* Description of --max-colors=COLORS in --help output */ N_("Size of the palette in 8 bit mode"), 
Packit 98cdb6
    /* Placeholder in --max-colors=COLORS in --help output */ N_("COLORS") },
Packit 98cdb6
  { NULL }
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
int __stdcall
Packit 98cdb6
DllMain (HINSTANCE hinstDLL,
Packit 98cdb6
	 DWORD     dwReason,
Packit 98cdb6
	 LPVOID    reserved)
Packit 98cdb6
{
Packit 98cdb6
  _gdk_dll_hinstance = hinstDLL;
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_windowing_init (void)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[10];
Packit 98cdb6
Packit 98cdb6
  if (getenv ("GDK_IGNORE_WINTAB") != NULL)
Packit 98cdb6
    _gdk_input_ignore_wintab = TRUE;
Packit 98cdb6
  else if (getenv ("GDK_USE_WINTAB") != NULL)
Packit 98cdb6
    _gdk_input_ignore_wintab = FALSE;
Packit 98cdb6
Packit 98cdb6
  if (gdk_synchronize)
Packit 98cdb6
    GdiSetBatchLimit (1);
Packit 98cdb6
Packit 98cdb6
  _gdk_app_hmodule = GetModuleHandle (NULL);
Packit 98cdb6
  _gdk_display_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
Packit 98cdb6
  _gdk_input_locale = GetKeyboardLayout (0);
Packit 98cdb6
  _gdk_win32_keymap_set_active_layout (GDK_WIN32_KEYMAP (gdk_keymap_get_default ()), _gdk_input_locale);
Packit 98cdb6
  _gdk_input_locale_is_ime = ImmIsIME (_gdk_input_locale);
Packit 98cdb6
  GetLocaleInfo (MAKELCID (LOWORD (_gdk_input_locale), SORT_DEFAULT),
Packit 98cdb6
		 LOCALE_IDEFAULTANSICODEPAGE,
Packit 98cdb6
		 buf, sizeof (buf));
Packit 98cdb6
  _gdk_input_codepage = atoi (buf);
Packit 98cdb6
  GDK_NOTE (EVENTS, g_print ("input_locale:%p, codepage:%d\n",
Packit 98cdb6
			     _gdk_input_locale, _gdk_input_codepage));
Packit 98cdb6
Packit 98cdb6
  CoInitialize (NULL);
Packit 98cdb6
Packit 98cdb6
  _gdk_selection = gdk_atom_intern_static_string ("GDK_SELECTION");
Packit 98cdb6
  _wm_transient_for = gdk_atom_intern_static_string ("WM_TRANSIENT_FOR");
Packit 98cdb6
  _targets = gdk_atom_intern_static_string ("TARGETS");
Packit 98cdb6
  _delete = gdk_atom_intern_static_string ("DELETE");
Packit 98cdb6
  _save_targets = gdk_atom_intern_static_string ("SAVE_TARGETS");
Packit 98cdb6
  _utf8_string = gdk_atom_intern_static_string ("UTF8_STRING");
Packit 98cdb6
  _text = gdk_atom_intern_static_string ("TEXT");
Packit 98cdb6
  _compound_text = gdk_atom_intern_static_string ("COMPOUND_TEXT");
Packit 98cdb6
  _text_uri_list = gdk_atom_intern_static_string ("text/uri-list");
Packit 98cdb6
  _text_html = gdk_atom_intern_static_string ("text/html");
Packit 98cdb6
  _image_png = gdk_atom_intern_static_string ("image/png");
Packit 98cdb6
  _image_jpeg = gdk_atom_intern_static_string ("image/jpeg");
Packit 98cdb6
  _image_bmp = gdk_atom_intern_static_string ("image/bmp");
Packit 98cdb6
  _image_gif = gdk_atom_intern_static_string ("image/gif");
Packit 98cdb6
Packit 98cdb6
  _local_dnd = gdk_atom_intern_static_string ("LocalDndSelection");
Packit 98cdb6
  _gdk_win32_dropfiles = gdk_atom_intern_static_string ("DROPFILES_DND");
Packit 98cdb6
  _gdk_ole2_dnd = gdk_atom_intern_static_string ("OLE2_DND");
Packit 98cdb6
Packit 98cdb6
  /* MS Office 2007, at least, offers images in common file formats
Packit 98cdb6
   * using clipboard format names like "PNG" and "JFIF". So we follow
Packit 98cdb6
   * the lead and map the GDK target name "image/png" to the clipboard
Packit 98cdb6
   * format name "PNG" etc.
Packit 98cdb6
   */
Packit 98cdb6
  _cf_png = RegisterClipboardFormat ("PNG");
Packit 98cdb6
  _cf_jfif = RegisterClipboardFormat ("JFIF");
Packit 98cdb6
  _cf_gif = RegisterClipboardFormat ("GIF");
Packit 98cdb6
Packit 98cdb6
  _cf_url = RegisterClipboardFormat ("UniformResourceLocatorW");
Packit 98cdb6
  _cf_html_format = RegisterClipboardFormat ("HTML Format");
Packit 98cdb6
  _cf_text_html = RegisterClipboardFormat ("text/html");
Packit 98cdb6
Packit 98cdb6
  _gdk_win32_selection_init ();
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_win32_api_failed (const gchar *where,
Packit 98cdb6
		      const gchar *api)
Packit 98cdb6
{
Packit 98cdb6
  gchar *msg = g_win32_error_message (GetLastError ());
Packit 98cdb6
  g_warning ("%s: %s failed: %s", where, api, msg);
Packit 98cdb6
  g_free (msg);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_other_api_failed (const gchar *where,
Packit 98cdb6
		      const gchar *api)
Packit 98cdb6
{
Packit 98cdb6
  g_warning ("%s: %s failed", where, api);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_set_use_xshm (gboolean use_xshm)
Packit 98cdb6
{
Packit 98cdb6
  /* Always on */
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gboolean
Packit 98cdb6
gdk_get_use_xshm (void)
Packit 98cdb6
{
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
gdk_screen_get_width (GdkScreen *screen)
Packit 98cdb6
{
Packit 98cdb6
  return GDK_WINDOW_OBJECT (_gdk_root)->width;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
gdk_screen_get_height (GdkScreen *screen)
Packit 98cdb6
{
Packit 98cdb6
  return GDK_WINDOW_OBJECT (_gdk_root)->height;
Packit 98cdb6
}
Packit 98cdb6
gint
Packit 98cdb6
gdk_screen_get_width_mm (GdkScreen *screen)
Packit 98cdb6
{
Packit 98cdb6
  return (double) gdk_screen_get_width (screen) / GetDeviceCaps (_gdk_display_hdc, LOGPIXELSX) * 25.4;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
gdk_screen_get_height_mm (GdkScreen *screen)
Packit 98cdb6
{
Packit 98cdb6
  return (double) gdk_screen_get_height (screen) / GetDeviceCaps (_gdk_display_hdc, LOGPIXELSY) * 25.4;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_windowing_display_set_sm_client_id (GdkDisplay  *display,
Packit 98cdb6
					 const gchar *sm_client_id)
Packit 98cdb6
{
Packit 98cdb6
  g_warning("gdk_set_sm_client_id %s", sm_client_id ? sm_client_id : "NULL");
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_display_beep (GdkDisplay *display)
Packit 98cdb6
{
Packit 98cdb6
  g_return_if_fail (display == gdk_display_get_default());
Packit 98cdb6
  if (!MessageBeep (-1))
Packit 98cdb6
    Beep (1000, 50);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_windowing_exit (void)
Packit 98cdb6
{
Packit 98cdb6
  _gdk_win32_dnd_exit ();
Packit 98cdb6
  CoUninitialize ();
Packit 98cdb6
  DeleteDC (_gdk_display_hdc);
Packit 98cdb6
  _gdk_display_hdc = NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
gdk_get_display (void)
Packit 98cdb6
{
Packit 98cdb6
  return g_strdup (gdk_display_get_name (gdk_display_get_default ()));
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_error_trap_push (void)
Packit 98cdb6
{
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gint
Packit 98cdb6
gdk_error_trap_pop (void)
Packit 98cdb6
{
Packit 98cdb6
  return 0;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_notify_startup_complete (void)
Packit 98cdb6
{
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gdk_notify_startup_complete_with_id (const gchar* startup_id)
Packit 98cdb6
{
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void          
Packit 98cdb6
gdk_window_set_startup_id (GdkWindow   *window,
Packit 98cdb6
			   const gchar *startup_id)
Packit 98cdb6
{
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
#ifdef G_ENABLE_DEBUG
Packit 98cdb6
Packit 98cdb6
/*
Packit 98cdb6
 * Like g_strdup_printf, but to a static buffer. Return value does not
Packit 98cdb6
 * have to be g_free()d. The buffer is of bounded size and reused
Packit 98cdb6
 * cyclically. Thus the return value is valid only until that part of
Packit 98cdb6
 * the buffer happens to get reused. This doesn't matter as this
Packit 98cdb6
 * function's return value is used in debugging output right after the call,
Packit 98cdb6
 * and the return value isn't used after that.
Packit 98cdb6
 */
Packit 98cdb6
static gchar *
Packit 98cdb6
static_printf (const gchar *format,
Packit 98cdb6
	       ...)
Packit 98cdb6
{
Packit 98cdb6
  static gchar buf[10000];
Packit 98cdb6
  gchar *msg;
Packit 98cdb6
  static gchar *bufp = buf;
Packit 98cdb6
  gchar *retval;
Packit 98cdb6
  va_list args;
Packit 98cdb6
Packit 98cdb6
  va_start (args, format);
Packit 98cdb6
  msg = g_strdup_vprintf (format, args);
Packit 98cdb6
  va_end (args);
Packit 98cdb6
Packit 98cdb6
  g_assert (strlen (msg) < sizeof (buf));
Packit 98cdb6
Packit 98cdb6
  if (bufp + strlen (msg) + 1 > buf + sizeof (buf))
Packit 98cdb6
    bufp = buf;
Packit 98cdb6
  retval = bufp;
Packit 98cdb6
Packit 98cdb6
  strcpy (bufp, msg);
Packit 98cdb6
  bufp += strlen (msg) + 1;
Packit 98cdb6
  g_free (msg);
Packit 98cdb6
Packit 98cdb6
  return retval;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_color_to_string (const GdkColor *color)
Packit 98cdb6
{
Packit 98cdb6
  return static_printf ("(%.04x,%.04x,%.04x):%.06x",
Packit 98cdb6
			color->red, color->green,
Packit 98cdb6
			color->blue, color->pixel);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_win32_print_paletteentries (const PALETTEENTRY *pep,
Packit 98cdb6
				const int           nentries)
Packit 98cdb6
{
Packit 98cdb6
  char buf[20];
Packit 98cdb6
  int i;
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < nentries; i++)
Packit 98cdb6
    g_print ("  %3d %02x:  %02x %02x %02x%s\n",
Packit 98cdb6
	     i, i,
Packit 98cdb6
	     pep[i].peRed, pep[i].peGreen, pep[i].peBlue,
Packit 98cdb6
	     (pep[i].peFlags == 0 ? "" :
Packit 98cdb6
	      (pep[i].peFlags == PC_EXPLICIT ? " PC_EXPLICIT" :
Packit 98cdb6
	       (pep[i].peFlags == PC_NOCOLLAPSE ? " PC_NOCOLLAPSE" :
Packit 98cdb6
		(pep[i].peFlags == PC_RESERVED ? " PC_RESERVED" :
Packit 98cdb6
		 (g_sprintf (buf, " %d", pep[i].peFlags), buf))))));
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_win32_print_system_palette (void)
Packit 98cdb6
{
Packit 98cdb6
  PALETTEENTRY *pe;
Packit 98cdb6
  int k;
Packit 98cdb6
Packit 98cdb6
  k = GetSystemPaletteEntries (_gdk_display_hdc, 0, 0, NULL);
Packit 98cdb6
  pe = g_new (PALETTEENTRY, k);
Packit 98cdb6
  k = GetSystemPaletteEntries (_gdk_display_hdc, 0, k, pe);
Packit 98cdb6
Packit 98cdb6
  if (!k)
Packit 98cdb6
    g_print ("GetSystemPaletteEntries failed: %s\n",
Packit 98cdb6
	     g_win32_error_message (GetLastError ()));
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      g_print ("System palette: %d entries\n", k);
Packit 98cdb6
      _gdk_win32_print_paletteentries (pe, k);
Packit 98cdb6
    }
Packit 98cdb6
  g_free (pe);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gint
Packit 98cdb6
palette_size (HPALETTE hpal)
Packit 98cdb6
{
Packit 98cdb6
  WORD npal = 0;
Packit 98cdb6
Packit 98cdb6
  if (!GetObject (hpal, sizeof (npal), &npal))
Packit 98cdb6
    WIN32_GDI_FAILED ("GetObject (HPALETTE)");
Packit 98cdb6
Packit 98cdb6
  return npal;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_win32_print_hpalette (HPALETTE hpal)
Packit 98cdb6
{
Packit 98cdb6
  PALETTEENTRY *pe;
Packit 98cdb6
  gint n, npal;
Packit 98cdb6
Packit 98cdb6
  npal = palette_size (hpal);
Packit 98cdb6
  pe = g_new (PALETTEENTRY, npal);
Packit 98cdb6
  n = GetPaletteEntries (hpal, 0, npal, pe);
Packit 98cdb6
Packit 98cdb6
  if (!n)
Packit 98cdb6
    g_print ("HPALETTE %p: GetPaletteEntries failed: %s\n",
Packit 98cdb6
	     hpal, g_win32_error_message (GetLastError ()));
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      g_print ("HPALETTE %p: %d (%d) entries\n", hpal, n, npal);
Packit 98cdb6
      _gdk_win32_print_paletteentries (pe, n);
Packit 98cdb6
    }
Packit 98cdb6
  g_free (pe);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
_gdk_win32_print_dc (HDC hdc)
Packit 98cdb6
{
Packit 98cdb6
  HGDIOBJ obj;
Packit 98cdb6
  LOGBRUSH logbrush;
Packit 98cdb6
  EXTLOGPEN extlogpen;
Packit 98cdb6
  HRGN hrgn;
Packit 98cdb6
  RECT rect;
Packit 98cdb6
  int flag;
Packit 98cdb6
Packit 98cdb6
  g_print ("%p:\n", hdc);
Packit 98cdb6
  obj = GetCurrentObject (hdc, OBJ_BRUSH);
Packit 98cdb6
  GetObject (obj, sizeof (LOGBRUSH), &logbrush);
Packit 98cdb6
  g_print ("brush: %s color=%06lx hatch=%p\n",
Packit 98cdb6
	   _gdk_win32_lbstyle_to_string (logbrush.lbStyle),
Packit 98cdb6
	   logbrush.lbColor, (gpointer) logbrush.lbHatch);
Packit 98cdb6
  obj = GetCurrentObject (hdc, OBJ_PEN);
Packit 98cdb6
  GetObject (obj, sizeof (EXTLOGPEN), &extlogpen);
Packit 98cdb6
  g_print ("pen: %s %s %s %s w=%d %s\n",
Packit 98cdb6
	   _gdk_win32_pstype_to_string (extlogpen.elpPenStyle),
Packit 98cdb6
	   _gdk_win32_psstyle_to_string (extlogpen.elpPenStyle),
Packit 98cdb6
	   _gdk_win32_psendcap_to_string (extlogpen.elpPenStyle),
Packit 98cdb6
	   _gdk_win32_psjoin_to_string (extlogpen.elpPenStyle),
Packit 98cdb6
	   (int) extlogpen.elpWidth,
Packit 98cdb6
	   _gdk_win32_lbstyle_to_string (extlogpen.elpBrushStyle));
Packit 98cdb6
  g_print ("rop2: %s textcolor=%06lx\n",
Packit 98cdb6
	   _gdk_win32_rop2_to_string (GetROP2 (hdc)),
Packit 98cdb6
	   GetTextColor (hdc));
Packit 98cdb6
  hrgn = CreateRectRgn (0, 0, 0, 0);
Packit 98cdb6
  if ((flag = GetClipRgn (hdc, hrgn)) == -1)
Packit 98cdb6
    WIN32_API_FAILED ("GetClipRgn");
Packit 98cdb6
  else if (flag == 0)
Packit 98cdb6
    g_print ("no clip region\n");
Packit 98cdb6
  else if (flag == 1)
Packit 98cdb6
    {
Packit 98cdb6
      GetRgnBox (hrgn, &rect);
Packit 98cdb6
      g_print ("clip region: %p bbox: %s\n",
Packit 98cdb6
	       hrgn, _gdk_win32_rect_to_string (&rect);;
Packit 98cdb6
    }
Packit 98cdb6
  DeleteObject (hrgn);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_cap_style_to_string (GdkCapStyle cap_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (cap_style)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_CAP_##x: return #x
Packit 98cdb6
    CASE (NOT_LAST);
Packit 98cdb6
    CASE (BUTT);
Packit 98cdb6
    CASE (ROUND);
Packit 98cdb6
    CASE (PROJECTING);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", cap_style);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_fill_style_to_string (GdkFill fill)
Packit 98cdb6
{
Packit 98cdb6
  switch (fill)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_##x: return #x
Packit 98cdb6
    CASE (SOLID);
Packit 98cdb6
    CASE (TILED);
Packit 98cdb6
    CASE (STIPPLED);
Packit 98cdb6
    CASE (OPAQUE_STIPPLED);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", fill);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_function_to_string (GdkFunction function)
Packit 98cdb6
{
Packit 98cdb6
  switch (function)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_##x: return #x
Packit 98cdb6
    CASE (COPY);
Packit 98cdb6
    CASE (INVERT);
Packit 98cdb6
    CASE (XOR);
Packit 98cdb6
    CASE (CLEAR);
Packit 98cdb6
    CASE (AND);
Packit 98cdb6
    CASE (AND_REVERSE);
Packit 98cdb6
    CASE (AND_INVERT);
Packit 98cdb6
    CASE (NOOP);
Packit 98cdb6
    CASE (OR);
Packit 98cdb6
    CASE (EQUIV);
Packit 98cdb6
    CASE (OR_REVERSE);
Packit 98cdb6
    CASE (COPY_INVERT);
Packit 98cdb6
    CASE (OR_INVERT);
Packit 98cdb6
    CASE (NAND);
Packit 98cdb6
    CASE (SET);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", function);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL; 
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_join_style_to_string (GdkJoinStyle join_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (join_style)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_JOIN_##x: return #x
Packit 98cdb6
    CASE (MITER);
Packit 98cdb6
    CASE (ROUND);
Packit 98cdb6
    CASE (BEVEL);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", join_style);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL; 
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_line_style_to_string (GdkLineStyle line_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (line_style)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_LINE_##x: return #x
Packit 98cdb6
    CASE(SOLID);
Packit 98cdb6
    CASE(ON_OFF_DASH);  
Packit 98cdb6
    CASE(DOUBLE_DASH);  
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", line_style);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL; 
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_drag_protocol_to_string (GdkDragProtocol protocol)
Packit 98cdb6
{
Packit 98cdb6
  switch (protocol)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case GDK_DRAG_PROTO_##x: return #x
Packit 98cdb6
      CASE (MOTIF);
Packit 98cdb6
      CASE (XDND);
Packit 98cdb6
      CASE (ROOTWIN);
Packit 98cdb6
      CASE (NONE);
Packit 98cdb6
      CASE (WIN32_DROPFILES);
Packit 98cdb6
      CASE (OLE2);
Packit 98cdb6
      CASE (LOCAL);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", protocol);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL; 
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_gcvalues_mask_to_string (GdkGCValuesMask mask)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[400];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x) 						\
Packit 98cdb6
  if (mask & GDK_GC_##x) 				\
Packit 98cdb6
    (bufp += g_sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  BIT (FOREGROUND);
Packit 98cdb6
  BIT (BACKGROUND);
Packit 98cdb6
  BIT (FONT);
Packit 98cdb6
  BIT (FUNCTION);
Packit 98cdb6
  BIT (FILL);
Packit 98cdb6
  BIT (TILE);
Packit 98cdb6
  BIT (STIPPLE);
Packit 98cdb6
  BIT (CLIP_MASK);
Packit 98cdb6
  BIT (SUBWINDOW);
Packit 98cdb6
  BIT (TS_X_ORIGIN);
Packit 98cdb6
  BIT (TS_Y_ORIGIN);
Packit 98cdb6
  BIT (CLIP_X_ORIGIN);
Packit 98cdb6
  BIT (CLIP_Y_ORIGIN);
Packit 98cdb6
  BIT (EXPOSURES);
Packit 98cdb6
  BIT (LINE_WIDTH);
Packit 98cdb6
  BIT (LINE_STYLE);
Packit 98cdb6
  BIT (CAP_STYLE);
Packit 98cdb6
  BIT (JOIN_STYLE);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_window_state_to_string (GdkWindowState state)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[100];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x)						\
Packit 98cdb6
  if (state & GDK_WINDOW_STATE_ ## x)			\
Packit 98cdb6
    (bufp += sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  /* For clarity, also show the complement of WITHDRAWN, i.e. "MAPPED" */
Packit 98cdb6
  if (!(state & GDK_WINDOW_STATE_WITHDRAWN))
Packit 98cdb6
    (bufp += sprintf (bufp, "MAPPED"), s = "|");
Packit 98cdb6
Packit 98cdb6
  BIT (WITHDRAWN);
Packit 98cdb6
  BIT (ICONIFIED);
Packit 98cdb6
  BIT (MAXIMIZED);
Packit 98cdb6
  BIT (STICKY);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_window_style_to_string (LONG style)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[1000];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x)						\
Packit 98cdb6
  if (style & WS_ ## x)					\
Packit 98cdb6
    (bufp += sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  /* Note that many of the WS_* macros are in face several bits.
Packit 98cdb6
   * Handle just the individual bits here. Sort as in w32api's
Packit 98cdb6
   * winuser.h.
Packit 98cdb6
   */
Packit 98cdb6
  BIT (BORDER);
Packit 98cdb6
  BIT (CHILD);
Packit 98cdb6
  BIT (CLIPCHILDREN);
Packit 98cdb6
  BIT (CLIPSIBLINGS);
Packit 98cdb6
  BIT (DISABLED);
Packit 98cdb6
  BIT (DLGFRAME);
Packit 98cdb6
  BIT (GROUP);
Packit 98cdb6
  BIT (HSCROLL);
Packit 98cdb6
  BIT (ICONIC);
Packit 98cdb6
  BIT (MAXIMIZE);
Packit 98cdb6
  BIT (MAXIMIZEBOX);
Packit 98cdb6
  BIT (MINIMIZE);
Packit 98cdb6
  BIT (MINIMIZEBOX);
Packit 98cdb6
  BIT (POPUP);
Packit 98cdb6
  BIT (SIZEBOX);
Packit 98cdb6
  BIT (SYSMENU);
Packit 98cdb6
  BIT (TABSTOP);
Packit 98cdb6
  BIT (THICKFRAME);
Packit 98cdb6
  BIT (VISIBLE);
Packit 98cdb6
  BIT (VSCROLL);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_window_exstyle_to_string (LONG style)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[1000];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x)						\
Packit 98cdb6
  if (style & WS_EX_ ## x)				\
Packit 98cdb6
    (bufp += sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  /* Note that many of the WS_EX_* macros are in face several bits.
Packit 98cdb6
   * Handle just the individual bits here. Sort as in w32api's
Packit 98cdb6
   * winuser.h.
Packit 98cdb6
   */
Packit 98cdb6
  BIT (ACCEPTFILES);
Packit 98cdb6
  BIT (APPWINDOW);
Packit 98cdb6
  BIT (CLIENTEDGE);
Packit 98cdb6
#ifndef WS_EX_COMPOSITED
Packit 98cdb6
#  define WS_EX_COMPOSITED 0x02000000L
Packit 98cdb6
#endif
Packit 98cdb6
  BIT (COMPOSITED);
Packit 98cdb6
  BIT (CONTEXTHELP);
Packit 98cdb6
  BIT (CONTROLPARENT);
Packit 98cdb6
  BIT (DLGMODALFRAME);
Packit 98cdb6
  BIT (LAYERED);
Packit 98cdb6
  BIT (LAYOUTRTL);
Packit 98cdb6
  BIT (LEFTSCROLLBAR);
Packit 98cdb6
  BIT (MDICHILD);
Packit 98cdb6
  BIT (NOACTIVATE);
Packit 98cdb6
  BIT (NOINHERITLAYOUT);
Packit 98cdb6
  BIT (NOPARENTNOTIFY);
Packit 98cdb6
  BIT (RIGHT);
Packit 98cdb6
  BIT (RTLREADING);
Packit 98cdb6
  BIT (STATICEDGE);
Packit 98cdb6
  BIT (TOOLWINDOW);
Packit 98cdb6
  BIT (TOPMOST);
Packit 98cdb6
  BIT (TRANSPARENT);
Packit 98cdb6
  BIT (WINDOWEDGE);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_window_pos_bits_to_string (UINT flags)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[1000];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x)						\
Packit 98cdb6
  if (flags & SWP_ ## x)				\
Packit 98cdb6
    (bufp += sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  BIT (DRAWFRAME);
Packit 98cdb6
  BIT (FRAMECHANGED);
Packit 98cdb6
  BIT (HIDEWINDOW);
Packit 98cdb6
  BIT (NOACTIVATE);
Packit 98cdb6
  BIT (NOCOPYBITS);
Packit 98cdb6
  BIT (NOMOVE);
Packit 98cdb6
  BIT (NOSIZE);
Packit 98cdb6
  BIT (NOREDRAW);
Packit 98cdb6
  BIT (NOZORDER);
Packit 98cdb6
  BIT (SHOWWINDOW);
Packit 98cdb6
  BIT (NOOWNERZORDER);
Packit 98cdb6
  BIT (NOSENDCHANGING);
Packit 98cdb6
  BIT (DEFERERASE);
Packit 98cdb6
  BIT (ASYNCWINDOWPOS);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_drag_action_to_string (GdkDragAction actions)
Packit 98cdb6
{
Packit 98cdb6
  gchar buf[100];
Packit 98cdb6
  gchar *bufp = buf;
Packit 98cdb6
  gchar *s = "";
Packit 98cdb6
Packit 98cdb6
  buf[0] = '\0';
Packit 98cdb6
Packit 98cdb6
#define BIT(x)						\
Packit 98cdb6
  if (actions & GDK_ACTION_ ## x)				\
Packit 98cdb6
    (bufp += sprintf (bufp, "%s" #x, s), s = "|")
Packit 98cdb6
Packit 98cdb6
  BIT (DEFAULT);
Packit 98cdb6
  BIT (COPY);
Packit 98cdb6
  BIT (MOVE);
Packit 98cdb6
  BIT (LINK);
Packit 98cdb6
  BIT (PRIVATE);
Packit 98cdb6
  BIT (ASK);
Packit 98cdb6
#undef BIT
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s", buf);  
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_rop2_to_string (int rop2)
Packit 98cdb6
{
Packit 98cdb6
  switch (rop2)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case R2_##x: return #x
Packit 98cdb6
      CASE (BLACK);
Packit 98cdb6
      CASE (COPYPEN);
Packit 98cdb6
      CASE (MASKNOTPEN);
Packit 98cdb6
      CASE (MASKPEN);
Packit 98cdb6
      CASE (MASKPENNOT);
Packit 98cdb6
      CASE (MERGENOTPEN);
Packit 98cdb6
      CASE (MERGEPEN);
Packit 98cdb6
      CASE (MERGEPENNOT);
Packit 98cdb6
      CASE (NOP);
Packit 98cdb6
      CASE (NOT);
Packit 98cdb6
      CASE (NOTCOPYPEN);
Packit 98cdb6
      CASE (NOTMASKPEN);
Packit 98cdb6
      CASE (NOTMERGEPEN);
Packit 98cdb6
      CASE (NOTXORPEN);
Packit 98cdb6
      CASE (WHITE);
Packit 98cdb6
      CASE (XORPEN);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%x", rop2);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_lbstyle_to_string (UINT brush_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (brush_style)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case BS_##x: return #x
Packit 98cdb6
      CASE (DIBPATTERN);
Packit 98cdb6
      CASE (DIBPATTERNPT);
Packit 98cdb6
      CASE (HATCHED);
Packit 98cdb6
      CASE (HOLLOW);
Packit 98cdb6
      CASE (PATTERN);
Packit 98cdb6
      CASE (SOLID);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", brush_style);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_pstype_to_string (DWORD pen_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (pen_style & PS_TYPE_MASK)
Packit 98cdb6
    {
Packit 98cdb6
    case PS_GEOMETRIC: return "GEOMETRIC";
Packit 98cdb6
    case PS_COSMETIC: return "COSMETIC";
Packit 98cdb6
    default: return static_printf ("illegal_%d", pen_style & PS_TYPE_MASK);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_psstyle_to_string (DWORD pen_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (pen_style & PS_STYLE_MASK)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case PS_##x: return #x
Packit 98cdb6
      CASE (ALTERNATE);
Packit 98cdb6
      CASE (SOLID);
Packit 98cdb6
      CASE (DASH);
Packit 98cdb6
      CASE (DOT);
Packit 98cdb6
      CASE (DASHDOT);
Packit 98cdb6
      CASE (DASHDOTDOT);
Packit 98cdb6
      CASE (NULL);
Packit 98cdb6
      CASE (USERSTYLE);
Packit 98cdb6
      CASE (INSIDEFRAME);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", pen_style & PS_STYLE_MASK);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_psendcap_to_string (DWORD pen_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (pen_style & PS_ENDCAP_MASK)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case PS_ENDCAP_##x: return #x
Packit 98cdb6
      CASE (ROUND);
Packit 98cdb6
      CASE (SQUARE);
Packit 98cdb6
      CASE (FLAT);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", pen_style & PS_ENDCAP_MASK);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_psjoin_to_string (DWORD pen_style)
Packit 98cdb6
{
Packit 98cdb6
  switch (pen_style & PS_JOIN_MASK)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case PS_JOIN_##x: return #x
Packit 98cdb6
      CASE (ROUND);
Packit 98cdb6
      CASE (BEVEL);
Packit 98cdb6
      CASE (MITER);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default: return static_printf ("illegal_%d", pen_style & PS_JOIN_MASK);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_message_to_string (UINT msg)
Packit 98cdb6
{
Packit 98cdb6
  switch (msg)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case x: return #x
Packit 98cdb6
      CASE (WM_NULL);
Packit 98cdb6
      CASE (WM_CREATE);
Packit 98cdb6
      CASE (WM_DESTROY);
Packit 98cdb6
      CASE (WM_MOVE);
Packit 98cdb6
      CASE (WM_SIZE);
Packit 98cdb6
      CASE (WM_ACTIVATE);
Packit 98cdb6
      CASE (WM_SETFOCUS);
Packit 98cdb6
      CASE (WM_KILLFOCUS);
Packit 98cdb6
      CASE (WM_ENABLE);
Packit 98cdb6
      CASE (WM_SETREDRAW);
Packit 98cdb6
      CASE (WM_SETTEXT);
Packit 98cdb6
      CASE (WM_GETTEXT);
Packit 98cdb6
      CASE (WM_GETTEXTLENGTH);
Packit 98cdb6
      CASE (WM_PAINT);
Packit 98cdb6
      CASE (WM_CLOSE);
Packit 98cdb6
      CASE (WM_QUERYENDSESSION);
Packit 98cdb6
      CASE (WM_QUERYOPEN);
Packit 98cdb6
      CASE (WM_ENDSESSION);
Packit 98cdb6
      CASE (WM_QUIT);
Packit 98cdb6
      CASE (WM_ERASEBKGND);
Packit 98cdb6
      CASE (WM_SYSCOLORCHANGE);
Packit 98cdb6
      CASE (WM_SHOWWINDOW);
Packit 98cdb6
      CASE (WM_WININICHANGE);
Packit 98cdb6
      CASE (WM_DEVMODECHANGE);
Packit 98cdb6
      CASE (WM_ACTIVATEAPP);
Packit 98cdb6
      CASE (WM_FONTCHANGE);
Packit 98cdb6
      CASE (WM_TIMECHANGE);
Packit 98cdb6
      CASE (WM_CANCELMODE);
Packit 98cdb6
      CASE (WM_SETCURSOR);
Packit 98cdb6
      CASE (WM_MOUSEACTIVATE);
Packit 98cdb6
      CASE (WM_CHILDACTIVATE);
Packit 98cdb6
      CASE (WM_QUEUESYNC);
Packit 98cdb6
      CASE (WM_GETMINMAXINFO);
Packit 98cdb6
      CASE (WM_PAINTICON);
Packit 98cdb6
      CASE (WM_ICONERASEBKGND);
Packit 98cdb6
      CASE (WM_NEXTDLGCTL);
Packit 98cdb6
      CASE (WM_SPOOLERSTATUS);
Packit 98cdb6
      CASE (WM_DRAWITEM);
Packit 98cdb6
      CASE (WM_MEASUREITEM);
Packit 98cdb6
      CASE (WM_DELETEITEM);
Packit 98cdb6
      CASE (WM_VKEYTOITEM);
Packit 98cdb6
      CASE (WM_CHARTOITEM);
Packit 98cdb6
      CASE (WM_SETFONT);
Packit 98cdb6
      CASE (WM_GETFONT);
Packit 98cdb6
      CASE (WM_SETHOTKEY);
Packit 98cdb6
      CASE (WM_GETHOTKEY);
Packit 98cdb6
      CASE (WM_QUERYDRAGICON);
Packit 98cdb6
      CASE (WM_COMPAREITEM);
Packit 98cdb6
      CASE (WM_GETOBJECT);
Packit 98cdb6
      CASE (WM_COMPACTING);
Packit 98cdb6
      CASE (WM_WINDOWPOSCHANGING);
Packit 98cdb6
      CASE (WM_WINDOWPOSCHANGED);
Packit 98cdb6
      CASE (WM_POWER);
Packit 98cdb6
      CASE (WM_COPYDATA);
Packit 98cdb6
      CASE (WM_CANCELJOURNAL);
Packit 98cdb6
      CASE (WM_NOTIFY);
Packit 98cdb6
      CASE (WM_INPUTLANGCHANGEREQUEST);
Packit 98cdb6
      CASE (WM_INPUTLANGCHANGE);
Packit 98cdb6
      CASE (WM_TCARD);
Packit 98cdb6
      CASE (WM_HELP);
Packit 98cdb6
      CASE (WM_USERCHANGED);
Packit 98cdb6
      CASE (WM_NOTIFYFORMAT);
Packit 98cdb6
      CASE (WM_CONTEXTMENU);
Packit 98cdb6
      CASE (WM_STYLECHANGING);
Packit 98cdb6
      CASE (WM_STYLECHANGED);
Packit 98cdb6
      CASE (WM_DISPLAYCHANGE);
Packit 98cdb6
      CASE (WM_GETICON);
Packit 98cdb6
      CASE (WM_SETICON);
Packit 98cdb6
      CASE (WM_NCCREATE);
Packit 98cdb6
      CASE (WM_NCDESTROY);
Packit 98cdb6
      CASE (WM_NCCALCSIZE);
Packit 98cdb6
      CASE (WM_NCHITTEST);
Packit 98cdb6
      CASE (WM_NCPAINT);
Packit 98cdb6
      CASE (WM_NCACTIVATE);
Packit 98cdb6
      CASE (WM_GETDLGCODE);
Packit 98cdb6
      CASE (WM_SYNCPAINT);
Packit 98cdb6
      CASE (WM_NCMOUSEMOVE);
Packit 98cdb6
      CASE (WM_NCLBUTTONDOWN);
Packit 98cdb6
      CASE (WM_NCLBUTTONUP);
Packit 98cdb6
      CASE (WM_NCLBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_NCRBUTTONDOWN);
Packit 98cdb6
      CASE (WM_NCRBUTTONUP);
Packit 98cdb6
      CASE (WM_NCRBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_NCMBUTTONDOWN);
Packit 98cdb6
      CASE (WM_NCMBUTTONUP);
Packit 98cdb6
      CASE (WM_NCMBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_NCXBUTTONDOWN);
Packit 98cdb6
      CASE (WM_NCXBUTTONUP);
Packit 98cdb6
      CASE (WM_NCXBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_KEYDOWN);
Packit 98cdb6
      CASE (WM_KEYUP);
Packit 98cdb6
      CASE (WM_CHAR);
Packit 98cdb6
      CASE (WM_DEADCHAR);
Packit 98cdb6
      CASE (WM_SYSKEYDOWN);
Packit 98cdb6
      CASE (WM_SYSKEYUP);
Packit 98cdb6
      CASE (WM_SYSCHAR);
Packit 98cdb6
      CASE (WM_SYSDEADCHAR);
Packit 98cdb6
      CASE (WM_KEYLAST);
Packit 98cdb6
      CASE (WM_IME_STARTCOMPOSITION);
Packit 98cdb6
      CASE (WM_IME_ENDCOMPOSITION);
Packit 98cdb6
      CASE (WM_IME_COMPOSITION);
Packit 98cdb6
      CASE (WM_INITDIALOG);
Packit 98cdb6
      CASE (WM_COMMAND);
Packit 98cdb6
      CASE (WM_SYSCOMMAND);
Packit 98cdb6
      CASE (WM_TIMER);
Packit 98cdb6
      CASE (WM_HSCROLL);
Packit 98cdb6
      CASE (WM_VSCROLL);
Packit 98cdb6
      CASE (WM_INITMENU);
Packit 98cdb6
      CASE (WM_INITMENUPOPUP);
Packit 98cdb6
      CASE (WM_MENUSELECT);
Packit 98cdb6
      CASE (WM_MENUCHAR);
Packit 98cdb6
      CASE (WM_ENTERIDLE);
Packit 98cdb6
      CASE (WM_MENURBUTTONUP);
Packit 98cdb6
      CASE (WM_MENUDRAG);
Packit 98cdb6
      CASE (WM_MENUGETOBJECT);
Packit 98cdb6
      CASE (WM_UNINITMENUPOPUP);
Packit 98cdb6
      CASE (WM_MENUCOMMAND);
Packit 98cdb6
      CASE (WM_CHANGEUISTATE);
Packit 98cdb6
      CASE (WM_UPDATEUISTATE);
Packit 98cdb6
      CASE (WM_QUERYUISTATE);
Packit 98cdb6
      CASE (WM_CTLCOLORMSGBOX);
Packit 98cdb6
      CASE (WM_CTLCOLOREDIT);
Packit 98cdb6
      CASE (WM_CTLCOLORLISTBOX);
Packit 98cdb6
      CASE (WM_CTLCOLORBTN);
Packit 98cdb6
      CASE (WM_CTLCOLORDLG);
Packit 98cdb6
      CASE (WM_CTLCOLORSCROLLBAR);
Packit 98cdb6
      CASE (WM_CTLCOLORSTATIC);
Packit 98cdb6
      CASE (WM_MOUSEMOVE);
Packit 98cdb6
      CASE (WM_LBUTTONDOWN);
Packit 98cdb6
      CASE (WM_LBUTTONUP);
Packit 98cdb6
      CASE (WM_LBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_RBUTTONDOWN);
Packit 98cdb6
      CASE (WM_RBUTTONUP);
Packit 98cdb6
      CASE (WM_RBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_MBUTTONDOWN);
Packit 98cdb6
      CASE (WM_MBUTTONUP);
Packit 98cdb6
      CASE (WM_MBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_MOUSEWHEEL);
Packit 98cdb6
      CASE (WM_MOUSEHWHEEL);
Packit 98cdb6
      CASE (WM_XBUTTONDOWN);
Packit 98cdb6
      CASE (WM_XBUTTONUP);
Packit 98cdb6
      CASE (WM_XBUTTONDBLCLK);
Packit 98cdb6
      CASE (WM_PARENTNOTIFY);
Packit 98cdb6
      CASE (WM_ENTERMENULOOP);
Packit 98cdb6
      CASE (WM_EXITMENULOOP);
Packit 98cdb6
      CASE (WM_NEXTMENU);
Packit 98cdb6
      CASE (WM_SIZING);
Packit 98cdb6
      CASE (WM_CAPTURECHANGED);
Packit 98cdb6
      CASE (WM_MOVING);
Packit 98cdb6
      CASE (WM_POWERBROADCAST);
Packit 98cdb6
      CASE (WM_DEVICECHANGE);
Packit 98cdb6
      CASE (WM_MDICREATE);
Packit 98cdb6
      CASE (WM_MDIDESTROY);
Packit 98cdb6
      CASE (WM_MDIACTIVATE);
Packit 98cdb6
      CASE (WM_MDIRESTORE);
Packit 98cdb6
      CASE (WM_MDINEXT);
Packit 98cdb6
      CASE (WM_MDIMAXIMIZE);
Packit 98cdb6
      CASE (WM_MDITILE);
Packit 98cdb6
      CASE (WM_MDICASCADE);
Packit 98cdb6
      CASE (WM_MDIICONARRANGE);
Packit 98cdb6
      CASE (WM_MDIGETACTIVE);
Packit 98cdb6
      CASE (WM_MDISETMENU);
Packit 98cdb6
      CASE (WM_ENTERSIZEMOVE);
Packit 98cdb6
      CASE (WM_EXITSIZEMOVE);
Packit 98cdb6
      CASE (WM_DROPFILES);
Packit 98cdb6
      CASE (WM_MDIREFRESHMENU);
Packit 98cdb6
      CASE (WM_IME_SETCONTEXT);
Packit 98cdb6
      CASE (WM_IME_NOTIFY);
Packit 98cdb6
      CASE (WM_IME_CONTROL);
Packit 98cdb6
      CASE (WM_IME_COMPOSITIONFULL);
Packit 98cdb6
      CASE (WM_IME_SELECT);
Packit 98cdb6
      CASE (WM_IME_CHAR);
Packit 98cdb6
      CASE (WM_IME_REQUEST);
Packit 98cdb6
      CASE (WM_IME_KEYDOWN);
Packit 98cdb6
      CASE (WM_IME_KEYUP);
Packit 98cdb6
      CASE (WM_MOUSEHOVER);
Packit 98cdb6
      CASE (WM_MOUSELEAVE);
Packit 98cdb6
      CASE (WM_NCMOUSEHOVER);
Packit 98cdb6
      CASE (WM_NCMOUSELEAVE);
Packit 98cdb6
      CASE (WM_CUT);
Packit 98cdb6
      CASE (WM_COPY);
Packit 98cdb6
      CASE (WM_PASTE);
Packit 98cdb6
      CASE (WM_CLEAR);
Packit 98cdb6
      CASE (WM_UNDO);
Packit 98cdb6
      CASE (WM_RENDERFORMAT);
Packit 98cdb6
      CASE (WM_RENDERALLFORMATS);
Packit 98cdb6
      CASE (WM_DESTROYCLIPBOARD);
Packit 98cdb6
      CASE (WM_DRAWCLIPBOARD);
Packit 98cdb6
      CASE (WM_PAINTCLIPBOARD);
Packit 98cdb6
      CASE (WM_VSCROLLCLIPBOARD);
Packit 98cdb6
      CASE (WM_SIZECLIPBOARD);
Packit 98cdb6
      CASE (WM_ASKCBFORMATNAME);
Packit 98cdb6
      CASE (WM_CHANGECBCHAIN);
Packit 98cdb6
      CASE (WM_HSCROLLCLIPBOARD);
Packit 98cdb6
      CASE (WM_QUERYNEWPALETTE);
Packit 98cdb6
      CASE (WM_PALETTEISCHANGING);
Packit 98cdb6
      CASE (WM_PALETTECHANGED);
Packit 98cdb6
      CASE (WM_HOTKEY);
Packit 98cdb6
      CASE (WM_PRINT);
Packit 98cdb6
      CASE (WM_PRINTCLIENT);
Packit 98cdb6
      CASE (WM_APPCOMMAND);
Packit 98cdb6
      CASE (WM_HANDHELDFIRST);
Packit 98cdb6
      CASE (WM_HANDHELDLAST);
Packit 98cdb6
      CASE (WM_AFXFIRST);
Packit 98cdb6
      CASE (WM_AFXLAST);
Packit 98cdb6
      CASE (WM_PENWINFIRST);
Packit 98cdb6
      CASE (WM_PENWINLAST);
Packit 98cdb6
      CASE (WM_APP);
Packit 98cdb6
      CASE (WT_PACKET);
Packit 98cdb6
      CASE (WT_CSRCHANGE);
Packit 98cdb6
      CASE (WT_PROXIMITY);
Packit 98cdb6
#undef CASE
Packit 98cdb6
    default:
Packit 98cdb6
      if (msg >= WM_HANDHELDFIRST && msg <= WM_HANDHELDLAST)
Packit 98cdb6
	return static_printf ("WM_HANDHELDFIRST+%d", msg - WM_HANDHELDFIRST);
Packit 98cdb6
      else if (msg >= WM_AFXFIRST && msg <= WM_AFXLAST)
Packit 98cdb6
	return static_printf ("WM_AFXFIRST+%d", msg - WM_AFXFIRST);
Packit 98cdb6
      else if (msg >= WM_PENWINFIRST && msg <= WM_PENWINLAST)
Packit 98cdb6
	return static_printf ("WM_PENWINFIRST+%d", msg - WM_PENWINFIRST);
Packit 98cdb6
      else if (msg >= WM_USER && msg <= 0x7FFF)
Packit 98cdb6
	return static_printf ("WM_USER+%d", msg - WM_USER);
Packit 98cdb6
      else if (msg >= 0xC000 && msg <= 0xFFFF)
Packit 98cdb6
	return static_printf ("reg-%#x", msg);
Packit 98cdb6
      else
Packit 98cdb6
	return static_printf ("unk-%#x", msg);
Packit 98cdb6
    }
Packit 98cdb6
  /* NOTREACHED */
Packit 98cdb6
  return NULL;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_key_to_string (LONG lParam)
Packit 98cdb6
{
Packit 98cdb6
  char buf[100];
Packit 98cdb6
  gchar *keyname_utf8;
Packit 98cdb6
Packit 98cdb6
  if (GetKeyNameText (lParam, buf, sizeof (buf)) &&
Packit 98cdb6
      (keyname_utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL)) != NULL)
Packit 98cdb6
    {
Packit 98cdb6
      gchar *retval = static_printf ("%s", keyname_utf8);
Packit 98cdb6
Packit 98cdb6
      g_free (keyname_utf8);
Packit 98cdb6
Packit 98cdb6
      return retval;
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  return static_printf ("unk-%#lx", lParam);
Packit 98cdb6
}
Packit 98cdb6
      
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_cf_to_string (UINT format)
Packit 98cdb6
{
Packit 98cdb6
  char buf[100];
Packit 98cdb6
Packit 98cdb6
  switch (format)
Packit 98cdb6
    {
Packit 98cdb6
#define CASE(x) case CF_##x: return "CF_" #x
Packit 98cdb6
      CASE (BITMAP);
Packit 98cdb6
      CASE (DIB);
Packit 98cdb6
      CASE (DIBV5);
Packit 98cdb6
      CASE (DIF);
Packit 98cdb6
      CASE (DSPBITMAP);
Packit 98cdb6
      CASE (DSPENHMETAFILE);
Packit 98cdb6
      CASE (DSPMETAFILEPICT);
Packit 98cdb6
      CASE (DSPTEXT);
Packit 98cdb6
      CASE (ENHMETAFILE);
Packit 98cdb6
      CASE (HDROP);
Packit 98cdb6
      CASE (LOCALE);
Packit 98cdb6
      CASE (METAFILEPICT);
Packit 98cdb6
      CASE (OEMTEXT);
Packit 98cdb6
      CASE (OWNERDISPLAY);
Packit 98cdb6
      CASE (PALETTE);
Packit 98cdb6
      CASE (PENDATA);
Packit 98cdb6
      CASE (RIFF);
Packit 98cdb6
      CASE (SYLK);
Packit 98cdb6
      CASE (TEXT);
Packit 98cdb6
      CASE (WAVE);
Packit 98cdb6
      CASE (TIFF);
Packit 98cdb6
      CASE (UNICODETEXT);
Packit 98cdb6
    default:
Packit 98cdb6
      if (format >= CF_GDIOBJFIRST &&
Packit 98cdb6
	  format <= CF_GDIOBJLAST)
Packit 98cdb6
	return static_printf ("CF_GDIOBJ%d", format - CF_GDIOBJFIRST);
Packit 98cdb6
      if (format >= CF_PRIVATEFIRST &&
Packit 98cdb6
	  format <= CF_PRIVATELAST)
Packit 98cdb6
	return static_printf ("CF_PRIVATE%d", format - CF_PRIVATEFIRST);
Packit 98cdb6
      if (GetClipboardFormatName (format, buf, sizeof (buf)))
Packit 98cdb6
	return static_printf ("'%s'", buf);
Packit 98cdb6
      else
Packit 98cdb6
	return static_printf ("unk-%#lx", format);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
      
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_data_to_string (const guchar *data,
Packit 98cdb6
			   int           nbytes)
Packit 98cdb6
{
Packit 98cdb6
  GString *s = g_string_new ("");
Packit 98cdb6
  int i;
Packit 98cdb6
  gchar *retval;
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < nbytes; i++)
Packit 98cdb6
    if (data[i] >=' ' && data[i] <= '~')
Packit 98cdb6
      g_string_append_printf (s, "%c  ", data[i]);
Packit 98cdb6
    else
Packit 98cdb6
      g_string_append_printf (s, "%02X ", data[i]);
Packit 98cdb6
Packit 98cdb6
  retval = static_printf ("%s", s->str);
Packit 98cdb6
  g_string_free (s, TRUE);
Packit 98cdb6
Packit 98cdb6
  return retval;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_rect_to_string (const RECT *rect)
Packit 98cdb6
{
Packit 98cdb6
  return static_printf ("%ldx%ld@%+ld%+ld",
Packit 98cdb6
			(rect->right - rect->left), (rect->bottom - rect->top),
Packit 98cdb6
			rect->left, rect->top);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect)
Packit 98cdb6
{
Packit 98cdb6
  return static_printf ("%dx%d@%+d%+d",
Packit 98cdb6
			rect->width, rect->height,
Packit 98cdb6
			rect->x, rect->y);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_gdkregion_to_string (const GdkRegion *rgn)
Packit 98cdb6
{
Packit 98cdb6
  return static_printf ("%dx%d@%+d%+d",
Packit 98cdb6
			(rgn->extents.x2 - rgn->extents.x1),
Packit 98cdb6
			(rgn->extents.y2 - rgn->extents.y1),
Packit 98cdb6
			rgn->extents.x1, rgn->extents.y1);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gchar *
Packit 98cdb6
_gdk_win32_drawable_description (GdkDrawable *d)
Packit 98cdb6
{
Packit 98cdb6
  gint width, height, depth;
Packit 98cdb6
Packit 98cdb6
  g_return_val_if_fail (GDK_IS_DRAWABLE (d), NULL);
Packit 98cdb6
Packit 98cdb6
  gdk_drawable_get_size (d, &width, &height);
Packit 98cdb6
  depth = gdk_drawable_get_depth (d);
Packit 98cdb6
Packit 98cdb6
  return static_printf ("%s:%p:%dx%dx%d",
Packit 98cdb6
			G_OBJECT_TYPE_NAME (d),
Packit 98cdb6
			GDK_DRAWABLE_HANDLE (d),
Packit 98cdb6
			width, height, depth);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
#endif /* G_ENABLE_DEBUG */