(enum button_type, widget_value, local_heap, local_alloc):
[bpt/emacs.git] / src / w32gui.h
CommitLineData
de31b97a 1/* Definitions and headers for communication on the Microsoft W32 API.
429ab54e 2 Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005,
8cabe764 3 2006, 2007, 2008 Free Software Foundation, Inc.
ee78dc32
GV
4
5This file is part of GNU Emacs.
6
b9b1cc14 7GNU Emacs is free software: you can redistribute it and/or modify
ee78dc32 8it under the terms of the GNU General Public License as published by
b9b1cc14
GM
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
ee78dc32
GV
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
b9b1cc14 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
ee78dc32 19
3b15de48
JR
20#ifndef EMACS_W32GUI_H
21#define EMACS_W32GUI_H
ee78dc32 22#include <windows.h>
c86a4064 23
640ea3c5 24#include "w32bdf.h"
ee78dc32 25
78229cf1
AI
26/* Emulate XCharStruct. */
27typedef struct _XCharStruct
28{
29 short rbearing;
30 short lbearing;
31 short width;
32 short ascent;
33 short descent;
34} XCharStruct;
35
4d65e18f
JR
36/* Emulate widget_value from ../lwlib/lwlib.h, modified for Windows. */
37typedef void * XtPointer;
38typedef char Boolean;
39enum button_type
40{
41 BUTTON_TYPE_NONE,
42 BUTTON_TYPE_TOGGLE,
43 BUTTON_TYPE_RADIO
44};
45typedef struct _widget_value
46{
47 /* name of widget */
48 Lisp_Object lname;
49 char* name;
50 /* value (meaning depend on widget type) */
51 char* value;
52 /* keyboard equivalent. no implications for XtTranslations */
53 Lisp_Object lkey;
54 char* key;
55 /* Help string or nil if none.
56 GC finds this string through the frame's menu_bar_vector
57 or through menu_items. */
58 Lisp_Object help;
59 /* true if enabled */
60 Boolean enabled;
61 /* true if selected */
62 Boolean selected;
63 /* The type of a button. */
64 enum button_type button_type;
65 /* true if menu title */
66 Boolean title;
67#if 0
68 /* true if was edited (maintained by get_value) */
69 Boolean edited;
70 /* true if has changed (maintained by lw library) */
71 change_type change;
72 /* true if this widget itself has changed,
73 but not counting the other widgets found in the `next' field. */
74 change_type this_one_change;
75#endif
76 /* Contents of the sub-widgets, also selected slot for checkbox */
77 struct _widget_value* contents;
78 /* data passed to callback */
79 XtPointer call_data;
80 /* next one in the list */
81 struct _widget_value* next;
82#if 0
83 /* slot for the toolkit dependent part. Always initialize to NULL. */
84 void* toolkit_data;
85 /* tell us if we should free the toolkit data slot when freeing the
86 widget_value itself. */
87 Boolean free_toolkit_data;
88
89 /* we resource the widget_value structures; this points to the next
90 one on the free list if this one has been deallocated.
91 */
92 struct _widget_value *free_list;
93#endif
94} widget_value;
95
78229cf1
AI
96enum w32_char_font_type
97{
e83074af 98 UNKNOWN_FONT = 0 /* FONT_TYPE_UNKNOWN */,
78229cf1
AI
99 ANSI_FONT,
100 UNICODE_FONT,
101 BDF_1D_FONT,
102 BDF_2D_FONT
103};
104
ee78dc32 105typedef struct W32FontStruct {
78229cf1 106 enum w32_char_font_type font_type;
ee78dc32
GV
107 TEXTMETRIC tm;
108 HFONT hfont;
640ea3c5 109 bdffont *bdf;
af3a6785 110 int double_byte_p;
78229cf1
AI
111 XCharStruct max_bounds;
112 XCharStruct scratch;
113 /* Only store info for ascii chars, if not fixed pitch. */
114 XCharStruct * per_char;
ee78dc32
GV
115} W32FontStruct;
116
5a048001
JR
117typedef struct W32FontStruct XFontStruct;
118
119/* Emulate X GC's by keeping color and font info in a structure. */
120typedef struct _XGCValues
121{
122 COLORREF foreground;
123 COLORREF background;
bce485cc 124#if OLD_FONT
5a048001 125 XFontStruct * font;
bce485cc
KH
126#endif
127 struct font *font;
5a048001
JR
128} XGCValues;
129
130#define GCForeground 0x01
131#define GCBackground 0x02
132#define GCFont 0x03
133
ee78dc32
GV
134typedef HBITMAP Pixmap;
135typedef HBITMAP Bitmap;
5a048001 136
574bdd83
KS
137typedef char * XrmDatabase;
138
5a048001 139typedef XGCValues * GC;
ee78dc32
GV
140typedef COLORREF Color;
141typedef DWORD Time;
142typedef HWND Window;
f9aaed00 143typedef HDC Display; /* HDC so it doesn't conflict with xpm lib. */
ee78dc32
GV
144typedef HCURSOR Cursor;
145
d165fbde
KS
146#define No_Cursor (0)
147
e83074af
KS
148#define XChar2b wchar_t
149
150/* Dealing with bits of wchar_t as if they were an XChar2b. */
151#define STORE_XCHAR2B(chp, byte1, byte2) \
152 ((*chp) = ((XChar2b)((((byte1) & 0x00ff) << 8) | ((byte2) & 0x00ff))))
153
154#define XCHAR2B_BYTE1(chp) \
155 (((*chp) & 0xff00) >> 8)
156
157#define XCHAR2B_BYTE2(chp) \
158 ((*chp) & 0x00ff)
159
160
73e66133
JR
161/* Windows equivalent of XImage. */
162typedef struct _XImage
163{
164 unsigned char * data;
165 BITMAPINFO info;
166 /* Optional RGBQUAD array for palette follows (see BITMAPINFO docs). */
167} XImage;
56f508dd 168
ee78dc32
GV
169#define FACE_DEFAULT (~0)
170
171extern HINSTANCE hinst;
172extern HINSTANCE hprevinst;
173extern LPSTR lpCmdLine;
174extern int nCmdShow;
175
176/* Bit Gravity */
177
178#define ForgetGravity 0
179#define NorthWestGravity 1
180#define NorthGravity 2
181#define NorthEastGravity 3
182#define WestGravity 4
183#define CenterGravity 5
184#define EastGravity 6
185#define SouthWestGravity 7
186#define SouthGravity 8
187#define SouthEastGravity 9
188#define StaticGravity 10
189
190#define NoValue 0x0000
191#define XValue 0x0001
192#define YValue 0x0002
193#define WidthValue 0x0004
194#define HeightValue 0x0008
195#define AllValues 0x000F
196#define XNegative 0x0010
197#define YNegative 0x0020
198
199#define USPosition (1L << 0) /* user specified x, y */
200#define USSize (1L << 1) /* user specified width, height */
201
202#define PPosition (1L << 2) /* program specified position */
203#define PSize (1L << 3) /* program specified size */
204#define PMinSize (1L << 4) /* program specified minimum size */
205#define PMaxSize (1L << 5) /* program specified maximum size */
206#define PResizeInc (1L << 6) /* program specified resize increments */
207#define PAspect (1L << 7) /* program specified min and max aspect ratios */
208#define PBaseSize (1L << 8) /* program specified base for incrementing */
209#define PWinGravity (1L << 9) /* program specified window gravity */
210
211extern int XParseGeometry ();
212
d165fbde
KS
213
214typedef struct {
215 int x, y;
216 unsigned width, height;
217} XRectangle;
218
219#define NativeRectangle RECT
220
221#define CONVERT_TO_XRECT(xr,nr) \
222 ((xr).x = (nr).left, \
223 (xr).y = (nr).top, \
224 (xr).width = ((nr).right - (nr).left), \
225 (xr).height = ((nr).bottom - (nr).top))
226
227#define CONVERT_FROM_XRECT(xr,nr) \
228 ((nr).left = (xr).x, \
229 (nr).top = (xr).y, \
230 (nr).right = ((xr).x + (xr).width), \
231 (nr).bottom = ((xr).y + (xr).height))
232
233#define STORE_NATIVE_RECT(nr,x,y,width,height) \
234 ((nr).left = (x), \
235 (nr).top = (y), \
236 (nr).right = ((nr).left + (width)), \
237 (nr).bottom = ((nr).top + (height)))
238
239
3b15de48 240#endif /* EMACS_W32GUI_H */
ab5796a9
MB
241
242/* arch-tag: 9172e5fb-45a5-4684-afd9-ca0e81324604
243 (do not change this comment) */