inetcomm: Support LPSTR to LPWSTR conversion in GetProp.
[wine.git] / dlls / winemac.drv / macdrv_cocoa.h
blobb3e9106db0df0ffab9fcb4d36ef4c759d0848a6e
1 /*
2 * MACDRV Cocoa interface declarations
4 * Copyright 2011, 2012, 2013 Ken Thomases for CodeWeavers Inc.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 /* This header serves as a C interface between the Wine parts of MACDRV
22 * and the Objective-C parts. It should restrict itself to C and the C-based
23 * Mac APIs, avoiding both Wine and Objective-C/Cocoa features, so that it can
24 * be included by both sides without contaminating either.
27 #ifndef __WINE_MACDRV_COCOA_H
28 #define __WINE_MACDRV_COCOA_H
31 #define GetCurrentProcess MacGetCurrentProcess
32 #define GetCurrentThread MacGetCurrentThread
33 #define LoadResource MacLoadResource
34 #define AnimatePalette MacAnimatePalette
35 #define EqualRgn MacEqualRgn
36 #define FillRgn MacFillRgn
37 #define FrameRgn MacFrameRgn
38 #define GetPixel MacGetPixel
39 #define InvertRgn MacInvertRgn
40 #define LineTo MacLineTo
41 #define OffsetRgn MacOffsetRgn
42 #define PaintRgn MacPaintRgn
43 #define Polygon MacPolygon
44 #define ResizePalette MacResizePalette
45 #define SetRectRgn MacSetRectRgn
46 #define EqualRect MacEqualRect
47 #define FillRect MacFillRect
48 #define FrameRect MacFrameRect
49 #define GetCursor MacGetCursor
50 #define InvertRect MacInvertRect
51 #define OffsetRect MacOffsetRect
52 #define PtInRect MacPtInRect
53 #define SetCursor MacSetCursor
54 #define SetRect MacSetRect
55 #define ShowCursor MacShowCursor
56 #define UnionRect MacUnionRect
58 #include <ApplicationServices/ApplicationServices.h>
60 #undef GetCurrentProcess
61 #undef GetCurrentThread
62 #undef LoadResource
63 #undef AnimatePalette
64 #undef EqualRgn
65 #undef FillRgn
66 #undef FrameRgn
67 #undef GetPixel
68 #undef InvertRgn
69 #undef LineTo
70 #undef OffsetRgn
71 #undef PaintRgn
72 #undef Polygon
73 #undef ResizePalette
74 #undef SetRectRgn
75 #undef EqualRect
76 #undef FillRect
77 #undef FrameRect
78 #undef GetCursor
79 #undef InvertRect
80 #undef OffsetRect
81 #undef PtInRect
82 #undef SetCursor
83 #undef SetRect
84 #undef ShowCursor
85 #undef UnionRect
86 #undef DPRINTF
88 #include <pthread.h>
91 #ifndef DECLSPEC_HIDDEN
92 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
93 # define DECLSPEC_HIDDEN
94 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
95 # define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
96 # else
97 # define DECLSPEC_HIDDEN
98 # endif
99 #endif
102 #include "macdrv_res.h"
105 /* Must match the values of Cocoa's NSDragOperation enum. */
106 enum {
107 DRAG_OP_NONE = 0,
108 DRAG_OP_COPY = 1,
109 DRAG_OP_LINK = 2,
110 DRAG_OP_GENERIC = 4,
111 DRAG_OP_PRIVATE = 8,
112 DRAG_OP_MOVE = 16,
113 DRAG_OP_DELETE = 32,
114 DRAG_OP_EVERY = UINT32_MAX
117 enum {
118 TOPMOST_FLOAT_INACTIVE_NONE,
119 TOPMOST_FLOAT_INACTIVE_NONFULLSCREEN,
120 TOPMOST_FLOAT_INACTIVE_ALL,
123 enum {
124 GL_SURFACE_IN_FRONT_OPAQUE,
125 GL_SURFACE_IN_FRONT_TRANSPARENT,
126 GL_SURFACE_BEHIND,
129 enum {
130 MACDRV_HOTKEY_SUCCESS,
131 MACDRV_HOTKEY_ALREADY_REGISTERED,
132 MACDRV_HOTKEY_FAILURE,
135 typedef struct __TISInputSource *TISInputSourceRef;
137 typedef struct macdrv_opaque_window* macdrv_window;
138 typedef struct macdrv_opaque_event_queue* macdrv_event_queue;
139 typedef struct macdrv_opaque_view* macdrv_view;
140 typedef struct macdrv_opaque_opengl_context* macdrv_opengl_context;
141 typedef struct macdrv_opaque_status_item* macdrv_status_item;
142 struct macdrv_event;
143 struct macdrv_query;
145 struct macdrv_display {
146 CGDirectDisplayID displayID;
147 CGRect frame;
148 CGRect work_frame;
152 /* main */
153 extern int macdrv_err_on;
154 extern int topmost_float_inactive DECLSPEC_HIDDEN;
155 extern int capture_displays_for_fullscreen DECLSPEC_HIDDEN;
156 extern int left_option_is_alt DECLSPEC_HIDDEN;
157 extern int right_option_is_alt DECLSPEC_HIDDEN;
158 extern int allow_immovable_windows DECLSPEC_HIDDEN;
159 extern int cursor_clipping_locks_windows DECLSPEC_HIDDEN;
160 extern int use_precise_scrolling DECLSPEC_HIDDEN;
161 extern int gl_surface_mode DECLSPEC_HIDDEN;
162 extern CFDictionaryRef localized_strings DECLSPEC_HIDDEN;
163 extern int retina_enabled DECLSPEC_HIDDEN; /* Whether Retina mode is enabled via registry setting. */
164 extern int retina_on DECLSPEC_HIDDEN; /* Whether Retina mode is currently active (enabled and display is in default mode). */
166 static inline CGRect cgrect_mac_from_win(CGRect rect)
168 if (retina_on)
170 rect.origin.x /= 2;
171 rect.origin.y /= 2;
172 rect.size.width /= 2;
173 rect.size.height /= 2;
176 return rect;
179 static inline CGRect cgrect_win_from_mac(CGRect rect)
181 if (retina_on)
183 rect.origin.x *= 2;
184 rect.origin.y *= 2;
185 rect.size.width *= 2;
186 rect.size.height *= 2;
189 return rect;
192 static inline CGSize cgsize_mac_from_win(CGSize size)
194 if (retina_on)
196 size.width /= 2;
197 size.height /= 2;
200 return size;
203 static inline CGSize cgsize_win_from_mac(CGSize size)
205 if (retina_on)
207 size.width *= 2;
208 size.height *= 2;
211 return size;
214 static inline CGPoint cgpoint_mac_from_win(CGPoint point)
216 if (retina_on)
218 point.x /= 2;
219 point.y /= 2;
222 return point;
225 static inline CGPoint cgpoint_win_from_mac(CGPoint point)
227 if (retina_on)
229 point.x *= 2;
230 point.y *= 2;
233 return point;
236 extern int macdrv_start_cocoa_app(unsigned long long tickcount) DECLSPEC_HIDDEN;
237 extern void macdrv_window_rejected_focus(const struct macdrv_event *event) DECLSPEC_HIDDEN;
238 extern void macdrv_beep(void) DECLSPEC_HIDDEN;
239 extern void macdrv_set_application_icon(CFArrayRef images) DECLSPEC_HIDDEN;
240 extern void macdrv_quit_reply(int reply) DECLSPEC_HIDDEN;
241 extern int macdrv_using_input_method(void) DECLSPEC_HIDDEN;
242 extern void macdrv_set_mouse_capture_window(macdrv_window window) DECLSPEC_HIDDEN;
243 extern void macdrv_set_cocoa_retina_mode(int new_mode) DECLSPEC_HIDDEN;
246 /* cursor */
247 extern void macdrv_set_cursor(CFStringRef name, CFArrayRef frames) DECLSPEC_HIDDEN;
248 extern int macdrv_get_cursor_position(CGPoint *pos) DECLSPEC_HIDDEN;
249 extern int macdrv_set_cursor_position(CGPoint pos) DECLSPEC_HIDDEN;
250 extern int macdrv_clip_cursor(CGRect rect) DECLSPEC_HIDDEN;
253 /* display */
254 extern int macdrv_get_displays(struct macdrv_display** displays, int* count) DECLSPEC_HIDDEN;
255 extern void macdrv_free_displays(struct macdrv_display* displays) DECLSPEC_HIDDEN;
256 extern int macdrv_set_display_mode(const struct macdrv_display* display,
257 CGDisplayModeRef display_mode) DECLSPEC_HIDDEN;
260 /* event */
261 enum {
262 APP_DEACTIVATED,
263 APP_QUIT_REQUESTED,
264 DISPLAYS_CHANGED,
265 HOTKEY_PRESS,
266 IM_SET_TEXT,
267 KEY_PRESS,
268 KEY_RELEASE,
269 KEYBOARD_CHANGED,
270 MOUSE_BUTTON,
271 MOUSE_MOVED,
272 MOUSE_MOVED_ABSOLUTE,
273 MOUSE_SCROLL,
274 QUERY_EVENT,
275 QUERY_EVENT_NO_PREEMPT_WAIT,
276 REASSERT_WINDOW_POSITION,
277 RELEASE_CAPTURE,
278 SENT_TEXT_INPUT,
279 STATUS_ITEM_MOUSE_BUTTON,
280 STATUS_ITEM_MOUSE_MOVE,
281 WINDOW_BROUGHT_FORWARD,
282 WINDOW_CLOSE_REQUESTED,
283 WINDOW_DID_UNMINIMIZE,
284 WINDOW_DRAG_BEGIN,
285 WINDOW_DRAG_END,
286 WINDOW_FRAME_CHANGED,
287 WINDOW_GOT_FOCUS,
288 WINDOW_LOST_FOCUS,
289 WINDOW_MAXIMIZE_REQUESTED,
290 WINDOW_MINIMIZE_REQUESTED,
291 WINDOW_RESIZE_ENDED,
292 WINDOW_RESTORE_REQUESTED,
293 NUM_EVENT_TYPES
296 enum {
297 QUIT_REASON_NONE,
298 QUIT_REASON_LOGOUT,
299 QUIT_REASON_RESTART,
300 QUIT_REASON_SHUTDOWN,
303 typedef uint32_t macdrv_event_mask;
305 typedef struct macdrv_event {
306 int refs;
307 int deliver;
308 int type;
309 macdrv_window window;
310 union {
311 struct {
312 int reason;
313 } app_quit_requested;
314 struct {
315 int activating;
316 } displays_changed;
317 struct {
318 unsigned int vkey;
319 unsigned int mod_flags;
320 unsigned int keycode;
321 unsigned long time_ms;
322 } hotkey_press;
323 struct {
324 void *data;
325 CFStringRef text; /* new text or NULL if just completing existing text */
326 unsigned int cursor_pos;
327 unsigned int complete; /* is completing text? */
328 } im_set_text;
329 struct {
330 CGKeyCode keycode;
331 CGEventFlags modifiers;
332 unsigned long time_ms;
333 } key;
334 struct {
335 CFDataRef uchr;
336 CGEventSourceKeyboardType keyboard_type;
337 int iso_keyboard;
338 TISInputSourceRef input_source;
339 } keyboard_changed;
340 struct {
341 int button;
342 int pressed;
343 int x;
344 int y;
345 unsigned long time_ms;
346 } mouse_button;
347 struct {
348 int x;
349 int y;
350 int drag;
351 unsigned long time_ms;
352 } mouse_moved;
353 struct {
354 int x_scroll;
355 int y_scroll;
356 int x;
357 int y;
358 unsigned long time_ms;
359 } mouse_scroll;
360 struct {
361 struct macdrv_query *query;
362 } query_event;
363 struct {
364 int handled;
365 int *done;
366 } sent_text_input;
367 struct {
368 macdrv_status_item item;
369 int button;
370 int down;
371 int count;
372 } status_item_mouse_button;
373 struct {
374 macdrv_status_item item;
375 } status_item_mouse_move;
376 struct {
377 CGRect frame;
378 int fullscreen;
379 int in_resize;
380 } window_frame_changed;
381 struct {
382 unsigned long serial;
383 void *tried_windows;
384 } window_got_focus;
385 struct {
386 int keep_frame;
387 CGRect frame;
388 } window_restore_requested;
390 } macdrv_event;
392 enum {
393 QUERY_DRAG_DROP,
394 QUERY_DRAG_EXITED,
395 QUERY_DRAG_OPERATION,
396 QUERY_IME_CHAR_RECT,
397 QUERY_PASTEBOARD_DATA,
398 QUERY_RESIZE_SIZE,
399 QUERY_RESIZE_START,
400 QUERY_MIN_MAX_INFO,
401 NUM_QUERY_TYPES
404 typedef struct macdrv_query {
405 int refs;
406 int type;
407 macdrv_window window;
408 int status;
409 int done;
410 union {
411 struct {
412 int x;
413 int y;
414 uint32_t op;
415 CFTypeRef pasteboard;
416 } drag_drop;
417 struct {
418 int x;
419 int y;
420 uint32_t offered_ops;
421 uint32_t accepted_op;
422 CFTypeRef pasteboard;
423 } drag_operation;
424 struct {
425 void *data;
426 CFRange range;
427 CGRect rect;
428 } ime_char_rect;
429 struct {
430 CFStringRef type;
431 } pasteboard_data;
432 struct {
433 CGRect rect;
434 unsigned int from_left : 1;
435 unsigned int from_top : 1;
436 } resize_size;
438 } macdrv_query;
440 static inline macdrv_event_mask event_mask_for_type(int type)
442 return ((macdrv_event_mask)1 << type);
445 typedef void (*macdrv_event_handler)(const macdrv_event *event);
447 extern macdrv_event_queue macdrv_create_event_queue(macdrv_event_handler handler) DECLSPEC_HIDDEN;
448 extern void macdrv_destroy_event_queue(macdrv_event_queue queue) DECLSPEC_HIDDEN;
449 extern int macdrv_get_event_queue_fd(macdrv_event_queue queue) DECLSPEC_HIDDEN;
451 extern int macdrv_copy_event_from_queue(macdrv_event_queue queue,
452 macdrv_event_mask mask, macdrv_event **event) DECLSPEC_HIDDEN;
453 extern void macdrv_release_event(macdrv_event *event) DECLSPEC_HIDDEN;
455 extern macdrv_query* macdrv_create_query(void) DECLSPEC_HIDDEN;
456 extern macdrv_query* macdrv_retain_query(macdrv_query *query) DECLSPEC_HIDDEN;
457 extern void macdrv_release_query(macdrv_query *query) DECLSPEC_HIDDEN;
458 extern void macdrv_set_query_done(macdrv_query *query) DECLSPEC_HIDDEN;
459 extern int macdrv_register_hot_key(macdrv_event_queue q, unsigned int vkey, unsigned int mod_flags,
460 unsigned int keycode, unsigned int modifiers) DECLSPEC_HIDDEN;
461 extern void macdrv_unregister_hot_key(macdrv_event_queue q, unsigned int vkey, unsigned int mod_flags) DECLSPEC_HIDDEN;
464 /* window */
465 struct macdrv_window_features {
466 unsigned int title_bar:1;
467 unsigned int close_button:1;
468 unsigned int minimize_button:1;
469 unsigned int resizable:1;
470 unsigned int maximize_button:1;
471 unsigned int utility:1;
472 unsigned int shadow:1;
475 struct macdrv_window_state {
476 unsigned int disabled:1;
477 unsigned int no_activate:1;
478 unsigned int floating:1;
479 unsigned int excluded_by_expose:1;
480 unsigned int excluded_by_cycle:1;
481 unsigned int minimized:1;
482 unsigned int minimized_valid:1;
483 unsigned int maximized:1;
486 extern macdrv_window macdrv_create_cocoa_window(const struct macdrv_window_features* wf,
487 CGRect frame, void* hwnd, macdrv_event_queue queue) DECLSPEC_HIDDEN;
488 extern void macdrv_destroy_cocoa_window(macdrv_window w) DECLSPEC_HIDDEN;
489 extern void* macdrv_get_window_hwnd(macdrv_window w) DECLSPEC_HIDDEN;
490 extern void macdrv_set_cocoa_window_features(macdrv_window w,
491 const struct macdrv_window_features* wf) DECLSPEC_HIDDEN;
492 extern void macdrv_set_cocoa_window_state(macdrv_window w,
493 const struct macdrv_window_state* state) DECLSPEC_HIDDEN;
494 extern void macdrv_set_cocoa_window_title(macdrv_window w, const UniChar* title,
495 size_t length) DECLSPEC_HIDDEN;
496 extern void macdrv_order_cocoa_window(macdrv_window w, macdrv_window prev,
497 macdrv_window next, int activate) DECLSPEC_HIDDEN;
498 extern void macdrv_hide_cocoa_window(macdrv_window w) DECLSPEC_HIDDEN;
499 extern void macdrv_set_cocoa_window_frame(macdrv_window w, const CGRect* new_frame) DECLSPEC_HIDDEN;
500 extern void macdrv_get_cocoa_window_frame(macdrv_window w, CGRect* out_frame) DECLSPEC_HIDDEN;
501 extern void macdrv_set_cocoa_parent_window(macdrv_window w, macdrv_window parent) DECLSPEC_HIDDEN;
502 extern void macdrv_set_window_surface(macdrv_window w, void *surface, pthread_mutex_t *mutex) DECLSPEC_HIDDEN;
503 extern CGImageRef create_surface_image(void *window_surface, CGRect *rect, int copy_data) DECLSPEC_HIDDEN;
504 extern int get_surface_blit_rects(void *window_surface, const CGRect **rects, int *count) DECLSPEC_HIDDEN;
505 extern void macdrv_window_needs_display(macdrv_window w, CGRect rect) DECLSPEC_HIDDEN;
506 extern void macdrv_set_window_shape(macdrv_window w, const CGRect *rects, int count) DECLSPEC_HIDDEN;
507 extern void macdrv_set_window_alpha(macdrv_window w, CGFloat alpha) DECLSPEC_HIDDEN;
508 extern void macdrv_set_window_color_key(macdrv_window w, CGFloat keyRed, CGFloat keyGreen,
509 CGFloat keyBlue) DECLSPEC_HIDDEN;
510 extern void macdrv_clear_window_color_key(macdrv_window w) DECLSPEC_HIDDEN;
511 extern void macdrv_window_use_per_pixel_alpha(macdrv_window w, int use_per_pixel_alpha) DECLSPEC_HIDDEN;
512 extern void macdrv_give_cocoa_window_focus(macdrv_window w, int activate) DECLSPEC_HIDDEN;
513 extern void macdrv_set_window_min_max_sizes(macdrv_window w, CGSize min_size, CGSize max_size) DECLSPEC_HIDDEN;
514 extern macdrv_view macdrv_create_view(CGRect rect) DECLSPEC_HIDDEN;
515 extern void macdrv_dispose_view(macdrv_view v) DECLSPEC_HIDDEN;
516 extern void macdrv_set_view_frame(macdrv_view v, CGRect rect) DECLSPEC_HIDDEN;
517 extern void macdrv_set_view_superview(macdrv_view v, macdrv_view s, macdrv_window w, macdrv_view p, macdrv_view n) DECLSPEC_HIDDEN;
518 extern void macdrv_set_view_hidden(macdrv_view v, int hidden) DECLSPEC_HIDDEN;
519 extern void macdrv_add_view_opengl_context(macdrv_view v, macdrv_opengl_context c) DECLSPEC_HIDDEN;
520 extern void macdrv_remove_view_opengl_context(macdrv_view v, macdrv_opengl_context c) DECLSPEC_HIDDEN;
521 extern int macdrv_get_view_backing_size(macdrv_view v, int backing_size[2]) DECLSPEC_HIDDEN;
522 extern void macdrv_set_view_backing_size(macdrv_view v, const int backing_size[2]) DECLSPEC_HIDDEN;
523 extern uint32_t macdrv_window_background_color(void) DECLSPEC_HIDDEN;
524 extern void macdrv_send_text_input_event(int pressed, unsigned int flags, int repeat, int keyc,
525 void* data, int* done) DECLSPEC_HIDDEN;
528 /* keyboard */
529 extern void macdrv_get_input_source_info(CFDataRef* uchr,CGEventSourceKeyboardType* keyboard_type, int* is_iso,
530 TISInputSourceRef* input_source) DECLSPEC_HIDDEN;
531 extern CFArrayRef macdrv_create_input_source_list(void) DECLSPEC_HIDDEN;
532 extern int macdrv_select_input_source(TISInputSourceRef input_source) DECLSPEC_HIDDEN;
533 extern const CFStringRef macdrv_input_source_input_key DECLSPEC_HIDDEN;
534 extern const CFStringRef macdrv_input_source_type_key DECLSPEC_HIDDEN;
535 extern const CFStringRef macdrv_input_source_lang_key DECLSPEC_HIDDEN;
536 extern int macdrv_layout_list_needs_update DECLSPEC_HIDDEN;
539 /* clipboard */
540 extern CFArrayRef macdrv_copy_pasteboard_types(CFTypeRef pasteboard) DECLSPEC_HIDDEN;
541 extern CFDataRef macdrv_copy_pasteboard_data(CFTypeRef pasteboard, CFStringRef type) DECLSPEC_HIDDEN;
542 extern int macdrv_is_pasteboard_owner(void) DECLSPEC_HIDDEN;
543 extern void macdrv_clear_pasteboard(void) DECLSPEC_HIDDEN;
544 extern int macdrv_set_pasteboard_data(CFStringRef type, CFDataRef data, macdrv_window w) DECLSPEC_HIDDEN;
547 /* opengl */
548 extern macdrv_opengl_context macdrv_create_opengl_context(void* cglctx) DECLSPEC_HIDDEN;
549 extern void macdrv_dispose_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;
550 extern void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v, CGRect r) DECLSPEC_HIDDEN;
551 extern void macdrv_update_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;
552 extern void macdrv_flush_opengl_context(macdrv_opengl_context c) DECLSPEC_HIDDEN;
555 /* systray / status item */
556 extern macdrv_status_item macdrv_create_status_item(macdrv_event_queue q) DECLSPEC_HIDDEN;
557 extern void macdrv_destroy_status_item(macdrv_status_item s) DECLSPEC_HIDDEN;
558 extern void macdrv_set_status_item_image(macdrv_status_item s, CGImageRef cgimage) DECLSPEC_HIDDEN;
559 extern void macdrv_set_status_item_tooltip(macdrv_status_item s, CFStringRef cftip) DECLSPEC_HIDDEN;
561 #endif /* __WINE_MACDRV_COCOA_H */