3
* VBox frontends: Qt GUI ("VirtualBox"):
4
* Declarations of utility classes and functions for handling Darwin specific
9
* Copyright (C) 2009 Sun Microsystems, Inc.
11
* This file is part of VirtualBox Open Source Edition (OSE), as
12
* available from http://www.virtualbox.org. This file is free software;
13
* you can redistribute it and/or modify it under the terms of the GNU
14
* General Public License (GPL) as published by the Free Software
15
* Foundation, in version 2 as it comes in the "COPYING" file of the
16
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
19
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20
* Clara, CA 95054 USA or visit http://www.sun.com if you need
21
* additional information or have any questions.
24
#ifndef __VBoxUtils_darwin_h
25
#define __VBoxUtils_darwin_h
28
* Here is some really magic in. The "OS System native" methods are implemented
29
* in the current OS specific way. This means either Carbon
30
* (VBoxUtils-darwin-carbon.cpp) or Cocoa (VBoxUtils-darwin-cocoa.m). The Qt
31
* wrapper methods handle the conversion from Q* data types to the native one
32
* (VBoxUtils-darwin.cpp).
36
#import <AppKit/NSWindow.h>
38
typedef NSWindow *NativeWindowRef;
39
typedef NSView *NativeViewRef;
42
# include <qglobal.h> /* for QT_MAC_USE_COCOA */
45
# include <ApplicationServices/ApplicationServices.h>
52
# ifdef QT_MAC_USE_COCOA
53
/* Cast this to void, cause Cocoa classes aren't usable in the C++ context. */
54
typedef void *NativeWindowRef;
55
typedef void *NativeViewRef;
56
# else /* QT_MAC_USE_COCOA */
57
# include <Carbon/Carbon.h>
58
typedef WindowRef NativeWindowRef;
59
typedef HIViewRef NativeViewRef;
60
# endif /* QT_MAC_USE_COCOA */
63
#include <iprt/cdefs.h> /* for RT_C_DECLS_BEGIN/RT_C_DECLS_END & stuff */
67
/********************************************************************************
69
* Window/View management (OS System native)
71
********************************************************************************/
72
NativeWindowRef darwinToNativeWindowImpl (NativeViewRef aView);
73
NativeViewRef darwinToNativeViewImpl (NativeWindowRef aWindow);
75
/********************************************************************************
77
* Simple setter methods (OS System native)
79
********************************************************************************/
80
void darwinSetShowsToolbarButtonImpl (NativeWindowRef aWindow, bool aEnabled);
81
void darwinSetShowsResizeIndicatorImpl (NativeWindowRef aWindow, bool aEnabled);
82
void darwinSetHidesAllTitleButtonsImpl (NativeWindowRef aWindow);
83
void darwinSetShowsWindowTransparentImpl (NativeWindowRef aWindow, bool aEnabled);
84
void darwinSetMouseCoalescingEnabled (bool aEnabled);
86
/********************************************************************************
88
* Simple helper methods (OS System native)
90
********************************************************************************/
91
void darwinWindowAnimateResizeImpl (NativeWindowRef aWindow, int x, int y, int width, int height);
92
void darwinWindowInvalidateShapeImpl (NativeWindowRef aWindow);
93
void darwinWindowInvalidateShadowImpl (NativeWindowRef aWindow);
94
int darwinWindowToolBarHeight (NativeWindowRef aWindow);
99
/********************************************************************************
101
* Window/View management (Qt Wrapper)
103
********************************************************************************/
106
* Returns a reference to the native View of the QWidget.
108
* @returns either HIViewRef or NSView* of the QWidget.
109
* @param aWidget Pointer to the QWidget
111
NativeViewRef darwinToNativeView (QWidget *aWidget);
114
* Returns a reference to the native Window of the QWidget.
116
* @returns either WindowRef or NSWindow* of the QWidget.
117
* @param aWidget Pointer to the QWidget
119
NativeWindowRef darwinToNativeWindow (QWidget *aWidget);
121
/* This is necessary because of the C calling convention. Its a simple wrapper
122
for darwinToNativeWindowImpl to allow operator overloading which isn't
125
* Returns a reference to the native Window of the View..
127
* @returns either WindowRef or NSWindow* of the View.
128
* @param aWidget Pointer to the native View
130
NativeWindowRef darwinToNativeWindow (NativeViewRef aView);
133
* Returns a reference to the native View of the Window.
135
* @returns either HIViewRef or NSView* of the Window.
136
* @param aWidget Pointer to the native Window
138
NativeViewRef darwinToNativeView (NativeWindowRef aWindow);
140
/********************************************************************************
142
* Simple setter methods (Qt Wrapper)
144
********************************************************************************/
145
void darwinSetShowsToolbarButton (QToolBar *aToolBar, bool aEnabled);
146
void darwinSetShowsResizeIndicator (QWidget *aWidget, bool aEnabled);
147
void darwinSetHidesAllTitleButtons (QWidget *aWidget);
148
void darwinSetShowsWindowTransparent (QWidget *aWidget, bool aEnabled);
149
void darwinDisableIconsInMenus (void);
151
/********************************************************************************
153
* Simple helper methods (Qt Wrapper)
155
********************************************************************************/
156
void darwinWindowAnimateResize (QWidget *aWidget, const QRect &aTarget);
157
void darwinWindowInvalidateShape (QWidget *aWidget);
158
void darwinWindowInvalidateShadow (QWidget *aWidget);
159
int darwinWindowToolBarHeight (QWidget *aWidget);
160
QString darwinSystemLanguage (void);
161
QPixmap darwinCreateDragPixmap (const QPixmap& aPixmap, const QString &aText);
164
/********************************************************************************
166
* Graphics stuff (Qt Wrapper)
168
********************************************************************************/
170
* Returns a reference to the CGContext of the QWidget.
172
* @returns CGContextRef of the QWidget.
173
* @param aWidget Pointer to the QWidget
175
CGContextRef darwinToCGContextRef (QWidget *aWidget);
177
CGImageRef darwinToCGImageRef (const QImage *aImage);
178
CGImageRef darwinToCGImageRef (const QPixmap *aPixmap);
179
CGImageRef darwinToCGImageRef (const char *aSource);
181
DECLINLINE(CGRect) darwinToCGRect (const QRect& aRect) { return CGRectMake (aRect.x(), aRect.y(), aRect.width(), aRect.height()); }
182
DECLINLINE(CGRect) darwinFlipCGRect (CGRect aRect, int aTargetHeight) { aRect.origin.y = aTargetHeight - aRect.origin.y - aRect.size.height; return aRect; }
183
DECLINLINE(CGRect) darwinFlipCGRect (CGRect aRect, const CGRect &aTarget) { return darwinFlipCGRect (aRect, aTarget.size.height); }
184
DECLINLINE(CGRect) darwinCenterRectTo (CGRect aRect, const CGRect& aToRect)
186
aRect.origin.x = aToRect.origin.x + (aToRect.size.width - aRect.size.width) / 2.0;
187
aRect.origin.y = aToRect.origin.y + (aToRect.size.height - aRect.size.height) / 2.0;
195
/********************************************************************************
197
* Old carbon stuff. Have to be converted soon!
199
********************************************************************************/
203
# ifndef QT_MAC_USE_COCOA
205
/* Asserts if a != noErr and prints the error code */
206
# define AssertCarbonOSStatus(a) AssertMsg ((a) == noErr, ("Carbon OSStatus: %d\n", static_cast<int> (a)))
210
* Converts a QRect to a HIRect.
212
* @returns HIRect for the converted QRect.
213
* @param aRect the QRect to convert
215
DECLINLINE(HIRect) darwinToHIRect (const QRect &aRect)
217
return CGRectMake (aRect.x(), aRect.y(), aRect.width(), aRect.height());
220
/* Experimental region handler for the seamless mode */
221
OSStatus darwinRegionHandler (EventHandlerCallRef aInHandlerCallRef, EventRef aInEvent, void *aInUserData);
223
/* Handler for the OpenGL overlay window stuff & the possible messages. */
227
kEventClassVBox = 'vbox',
229
kEventVBoxShowWindow = 'swin',
230
kEventVBoxHideWindow = 'hwin',
231
kEventVBoxMoveWindow = 'mwin',
232
kEventVBoxResizeWindow = 'rwin',
233
kEventVBoxDisposeWindow = 'dwin',
234
kEventVBoxUpdateDock = 'udck',
235
kEventVBoxUpdateContext = 'uctx',
236
kEventVBoxBoundsChanged = 'bchg'
239
void PostBoundsChanged (const QRect& rect);
240
OSStatus darwinOverlayWindowHandler (EventHandlerCallRef aInHandlerCallRef, EventRef aInEvent, void *aInUserData);
242
bool darwinIsMenuOpen (void);
244
# endif /* !QT_MAC_USE_COCOA */
247
void darwinDebugPrintEvent (const char *aPrefix, EventRef aEvent);
250
#endif /* !__OBJC__ */
252
#endif /* __VBoxUtils_darwin_h */