w32gui.h 4.12 KB
Newer Older
1
/* Definitions and headers for communication on the Microsoft Windows API.
2
   Copyright (C) 1995, 2001-2012  Free Software Foundation, Inc.
Geoff Voelker's avatar
Geoff Voelker committed
3 4 5

This file is part of GNU Emacs.

6
GNU Emacs is free software: you can redistribute it and/or modify
Geoff Voelker's avatar
Geoff Voelker committed
7
it under the terms of the GNU General Public License as published by
8 9
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Geoff Voelker's avatar
Geoff Voelker committed
10 11 12 13 14 15 16

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
17
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
Geoff Voelker's avatar
Geoff Voelker committed
18

19 20
#ifndef EMACS_W32GUI_H
#define EMACS_W32GUI_H
Geoff Voelker's avatar
Geoff Voelker committed
21
#include <windows.h>
Andrew Innes's avatar
Andrew Innes committed
22

23 24
#include "systime.h" /* for Time */

25 26 27 28 29 30 31 32
/* Local memory management for menus.  */
#define local_heap (GetProcessHeap ())
#define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n)))
#define local_free(p) (HeapFree (local_heap, 0, ((LPVOID) (p))))

#define malloc_widget_value() ((widget_value *) local_alloc (sizeof (widget_value)))
#define free_widget_value(wv) (local_free ((wv)))

33 34 35 36 37
/* Emulate X GC's by keeping color and font info in a structure.  */
typedef struct _XGCValues
{
  COLORREF foreground;
  COLORREF background;
38
  struct font *font;
39 40 41 42 43 44
} XGCValues;

#define GCForeground 0x01
#define GCBackground 0x02
#define GCFont 0x03

Geoff Voelker's avatar
Geoff Voelker committed
45 46
typedef HBITMAP Pixmap;
typedef HBITMAP Bitmap;
47

48 49
typedef char * XrmDatabase;

50
typedef XGCValues * GC;
Geoff Voelker's avatar
Geoff Voelker committed
51 52
typedef COLORREF Color;
typedef HWND Window;
Jason Rumney's avatar
Jason Rumney committed
53
typedef HDC Display;  /* HDC so it doesn't conflict with xpm lib.  */
Geoff Voelker's avatar
Geoff Voelker committed
54 55
typedef HCURSOR Cursor;

56 57
#define No_Cursor (0)

58 59 60 61
#define XChar2b wchar_t

/* Dealing with bits of wchar_t as if they were an XChar2b.  */
#define STORE_XCHAR2B(chp, byte1, byte2) \
62
  ((*(chp)) = ((XChar2b)((((byte1) & 0x00ff) << 8) | ((byte2) & 0x00ff))))
63 64

#define XCHAR2B_BYTE1(chp) \
65
  (((*(chp)) & 0xff00) >> 8)
66 67

#define XCHAR2B_BYTE2(chp) \
68
  ((*(chp)) & 0x00ff)
69 70


Jason Rumney's avatar
Jason Rumney committed
71 72 73 74 75 76 77
/* Windows equivalent of XImage.  */
typedef struct _XImage
{
  unsigned char * data;
  BITMAPINFO info;
  /* Optional RGBQUAD array for palette follows (see BITMAPINFO docs).  */
} XImage;
78

Geoff Voelker's avatar
Geoff Voelker committed
79 80 81
#define FACE_DEFAULT (~0)

extern HINSTANCE hinst;
82 83 84
extern HINSTANCE hprevinst;
extern LPSTR lpCmdLine;
extern int nCmdShow;
Geoff Voelker's avatar
Geoff Voelker committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

/* Bit Gravity */

#define ForgetGravity		0
#define NorthWestGravity	1
#define NorthGravity		2
#define NorthEastGravity	3
#define WestGravity		4
#define CenterGravity		5
#define EastGravity		6
#define SouthWestGravity	7
#define SouthGravity		8
#define SouthEastGravity	9
#define StaticGravity		10

#define NoValue		0x0000
#define XValue  	0x0001
#define YValue		0x0002
#define WidthValue  	0x0004
#define HeightValue  	0x0008
#define AllValues 	0x000F
#define XNegative 	0x0010
#define YNegative 	0x0020

#define USPosition	(1L << 0) /* user specified x, y */
#define USSize		(1L << 1) /* user specified width, height */

#define PPosition	(1L << 2) /* program specified position */
#define PSize		(1L << 3) /* program specified size */
#define PMinSize	(1L << 4) /* program specified minimum size */
#define PMaxSize	(1L << 5) /* program specified maximum size */
#define PResizeInc	(1L << 6) /* program specified resize increments */
#define PAspect		(1L << 7) /* program specified min and max aspect ratios */
#define PBaseSize	(1L << 8) /* program specified base for incrementing */
#define PWinGravity	(1L << 9) /* program specified window gravity */

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
typedef struct {
    int x, y;
    unsigned width, height;
} XRectangle;

#define NativeRectangle RECT

#define CONVERT_TO_XRECT(xr,nr)			\
  ((xr).x = (nr).left,				\
   (xr).y = (nr).top,				\
   (xr).width = ((nr).right - (nr).left),	\
   (xr).height = ((nr).bottom - (nr).top))

#define CONVERT_FROM_XRECT(xr,nr)		\
  ((nr).left = (xr).x,				\
   (nr).top = (xr).y,				\
   (nr).right = ((xr).x + (xr).width),		\
   (nr).bottom = ((xr).y + (xr).height))

#define STORE_NATIVE_RECT(nr,x,y,width,height)	\
  ((nr).left = (x),				\
   (nr).top = (y),				\
   (nr).right = ((nr).left + (width)),		\
   (nr).bottom = ((nr).top + (height)))


147
#endif /* EMACS_W32GUI_H */