Mercurial > hg > xemacs-beta
comparison src/frame-msw.c @ 223:2c611d1463a6 r20-4b10
Import from CVS: tag r20-4b10
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:10:54 +0200 |
parents | 6c0ae1f9357f |
children | 12579d965149 |
comparison
equal
deleted
inserted
replaced
222:aae4c8b01452 | 223:2c611d1463a6 |
---|---|
36 | 36 |
37 #include "buffer.h" | 37 #include "buffer.h" |
38 #include "frame.h" | 38 #include "frame.h" |
39 #include "events.h" | 39 #include "events.h" |
40 | 40 |
41 #define MSWINDOWS_FRAME_STYLE WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_OVERLAPPEDWINDOW | |
42 #define MSWINDOWS_POPUP_STYLE WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_CAPTION|WS_POPUP | |
43 | |
44 #define MSWINDOWS_FRAME_EXSTYLE WS_EX_OVERLAPPEDWINDOW | |
45 #define MSWINDOWS_POPUP_EXSTYLE WS_EX_OVERLAPPEDWINDOW | |
46 | |
47 #ifdef HAVE_MENUBARS | |
48 #define ADJR_MENUFLAG TRUE | |
49 #else | |
50 #define ADJR_MENUFLAG FALSE | |
51 #endif | |
52 | |
41 /* Default properties to use when creating frames. */ | 53 /* Default properties to use when creating frames. */ |
42 Lisp_Object Vdefault_mswindows_frame_plist; | 54 Lisp_Object Vdefault_mswindows_frame_plist; |
43 /* Lisp_Object Qname, Qheight, Qwidth, Qinitially_unmapped, Qpopup, Qtop, Qleft; */ | 55 /* Lisp_Object Qname, Qheight, Qwidth, Qinitially_unmapped, Qpopup, Qtop, Qleft; */ |
44 Lisp_Object Qinitially_unmapped, Qpopup; | 56 Lisp_Object Qinitially_unmapped, Qpopup; |
45 | 57 |
46 static void | 58 static void |
47 mswindows_init_frame_1 (struct frame *f, Lisp_Object props) | 59 mswindows_init_frame_1 (struct frame *f, Lisp_Object props) |
48 { | 60 { |
49 mswindows_request_type request = { f, &props }; | |
50 Lisp_Object device = FRAME_DEVICE (f); | 61 Lisp_Object device = FRAME_DEVICE (f); |
51 struct device *d = XDEVICE (device); | 62 struct device *d = XDEVICE (device); |
52 Lisp_Object lisp_window_id, initially_unmapped; | 63 Lisp_Object lisp_window_id, initially_unmapped; |
64 Lisp_Object name, height, width, popup, top, left; | |
65 Lisp_Object frame_obj; | |
66 int pixel_width, pixel_height; | |
67 RECT rect; | |
68 DWORD style, exstyle; | |
69 HWND hwnd; | |
70 | |
53 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil); | 71 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil); |
54 | 72 name = Fplist_get (props, Qname, Qnil); |
55 #if 0 | 73 height = Fplist_get (props, Qheight, Qnil); |
56 if (NILP (DEVICE_SELECTED_FRAME (d)) && /* first frame on the device */ | 74 width = Fplist_get (props, Qwidth, Qnil); |
57 NILP (initially_unmapped)) | 75 popup = Fplist_get (props, Qpopup, Qnil); |
58 f->visible = 1; | 76 top = Fplist_get (props, Qtop, Qnil); |
59 #endif | 77 left = Fplist_get (props, Qleft, Qnil); |
60 | 78 |
61 f->frame_data = xnew_and_zero (struct mswindows_frame); | 79 f->frame_data = xnew_and_zero (struct mswindows_frame); |
62 FRAME_MSWINDOWS_HANDLE(f) = (HWND)mswindows_make_request(WM_XEMACS_CREATEWINDOW, | 80 FRAME_WIDTH (f) = INTP(width) ? XINT(width) : 80; |
63 0, &request); | 81 FRAME_HEIGHT (f) = INTP(height) ? XINT(height) : 30; |
82 char_to_pixel_size (f, FRAME_WIDTH(f), FRAME_HEIGHT (f), | |
83 &FRAME_PIXWIDTH (f), &FRAME_PIXHEIGHT (f)); | |
84 | |
85 style = (NILP(popup)) ? MSWINDOWS_FRAME_STYLE : MSWINDOWS_POPUP_STYLE; | |
86 exstyle = (NILP(popup)) ? MSWINDOWS_FRAME_EXSTYLE : MSWINDOWS_POPUP_EXSTYLE; | |
87 rect.left = rect.top = 0; | |
88 rect.right = FRAME_PIXWIDTH (f); | |
89 rect.bottom = FRAME_PIXHEIGHT (f); | |
90 | |
91 FRAME_MSWINDOWS_DATA(f)->button2_need_lbutton = 0; | |
92 FRAME_MSWINDOWS_DATA(f)->button2_need_rbutton = 0; | |
93 FRAME_MSWINDOWS_DATA(f)->button2_is_down = 0; | |
94 FRAME_MSWINDOWS_DATA(f)->ignore_next_lbutton_up = 0; | |
95 FRAME_MSWINDOWS_DATA(f)->ignore_next_rbutton_up = 0; | |
96 FRAME_MSWINDOWS_DATA(f)->sizing = 0; | |
97 | |
98 AdjustWindowRectEx(&rect, style, ADJR_MENUFLAG, exstyle); | |
99 | |
100 FRAME_MSWINDOWS_HANDLE(f) = | |
101 CreateWindowEx (exstyle, | |
102 XEMACS_CLASS, | |
103 STRINGP(f->name) ? XSTRING_DATA(f->name) : | |
104 (STRINGP(name) ? XSTRING_DATA(name) : XEMACS_CLASS), | |
105 style, | |
106 INTP(left) ? XINT(left) : CW_USEDEFAULT, | |
107 INTP(top) ? XINT(top) : CW_USEDEFAULT, | |
108 rect.right-rect.left, rect.bottom-rect.top, | |
109 NULL, NULL, NULL, NULL); | |
110 XSETFRAME (frame_obj, f); | |
111 SetWindowLong (FRAME_MSWINDOWS_HANDLE(f), XWL_FRAMEOBJ, (LONG)frame_obj); | |
64 FRAME_MSWINDOWS_DC(f) = GetDC(FRAME_MSWINDOWS_HANDLE(f)); | 112 FRAME_MSWINDOWS_DC(f) = GetDC(FRAME_MSWINDOWS_HANDLE(f)); |
65 SetTextAlign(FRAME_MSWINDOWS_DC(f), TA_BASELINE|TA_LEFT|TA_NOUPDATECP); | 113 SetTextAlign(FRAME_MSWINDOWS_DC(f), TA_BASELINE|TA_LEFT|TA_NOUPDATECP); |
66 } | 114 } |
67 | 115 |
68 /* Called just before frame's properties are set, size is 10x10 or something */ | 116 /* Called just before frame's properties are set, size is 10x10 or something */ |
89 static void | 137 static void |
90 mswindows_delete_frame (struct frame *f) | 138 mswindows_delete_frame (struct frame *f) |
91 { | 139 { |
92 if (f->frame_data) | 140 if (f->frame_data) |
93 { | 141 { |
94 mswindows_request_type request = { f }; | 142 ReleaseDC(FRAME_MSWINDOWS_HANDLE(f), FRAME_MSWINDOWS_DC(f)); |
95 mswindows_make_request(WM_XEMACS_DESTROYWINDOW, 0, &request); | 143 DestroyWindow(FRAME_MSWINDOWS_HANDLE(f)); |
96 } | 144 } |
97 } | 145 } |
98 | 146 |
99 static void | 147 static void |
100 mswindows_set_frame_size (struct frame *f, int cols, int rows) | 148 mswindows_set_frame_size (struct frame *f, int cols, int rows) |
102 RECT rect1, rect2; | 150 RECT rect1, rect2; |
103 | 151 |
104 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect1); | 152 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect1); |
105 rect2.left = rect2.top = 0; | 153 rect2.left = rect2.top = 0; |
106 char_to_pixel_size (f, cols, rows, &rect2.right, &rect2.bottom); | 154 char_to_pixel_size (f, cols, rows, &rect2.right, &rect2.bottom); |
107 AdjustWindowRect (&rect2, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), | 155 |
108 GWL_STYLE), FALSE); | 156 AdjustWindowRectEx (&rect2, |
157 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE), | |
158 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL, | |
159 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE)); | |
160 | |
109 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), rect1.left, rect1.top, | 161 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), rect1.left, rect1.top, |
110 rect2.right-rect2.left, rect2.bottom-rect2.top, TRUE); | 162 rect2.right-rect2.left, rect2.bottom-rect2.top, TRUE); |
111 } | 163 } |
112 | 164 |
113 | 165 |
263 if (!x_specified_p) | 315 if (!x_specified_p) |
264 x = rect.left; | 316 x = rect.left; |
265 if (!y_specified_p) | 317 if (!y_specified_p) |
266 y = rect.top; | 318 y = rect.top; |
267 | 319 |
268 AdjustWindowRect (&rect, GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), | 320 AdjustWindowRectEx (&rect, |
269 GWL_STYLE), FALSE); | 321 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE), |
322 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL, | |
323 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE)); | |
324 | |
270 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), x, y, pixel_width, pixel_height, | 325 MoveWindow (FRAME_MSWINDOWS_HANDLE(f), x, y, pixel_width, pixel_height, |
271 (width_specified_p || height_specified_p)); | 326 (width_specified_p || height_specified_p)); |
272 } | 327 } |
273 } | 328 } |
274 | 329 |