]> git.saurik.com Git - wxWidgets.git/blob - include/wx/osx/cocoa/private.h
new method for contentScaleFactor on main screen
[wxWidgets.git] / include / wx / osx / cocoa / private.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/cocoa/private.h
3 // Purpose: Private declarations: as this header is only included by
4 // wxWidgets itself, it may contain identifiers which don't start
5 // with "wx".
6 // Author: Stefan Csomor
7 // Modified by:
8 // Created: 1998-01-01
9 // RCS-ID: $Id$
10 // Copyright: (c) Stefan Csomor
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
13
14 #ifndef _WX_PRIVATE_COCOA_H_
15 #define _WX_PRIVATE_COCOA_H_
16
17 #include <ApplicationServices/ApplicationServices.h>
18
19 #ifdef __OBJC__
20 #import <Cocoa/Cocoa.h>
21 #endif
22
23 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
24 // available in 10.4 but not in the headers
25 enum {
26 kEventMouseScroll = 11
27 };
28 #endif
29 //
30 // shared between Cocoa and Carbon
31 //
32
33 // bring in theming types without pulling in the headers
34
35 #if wxUSE_GUI
36 typedef SInt16 ThemeBrush;
37 CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
38 OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
39 CGContextRef inContext,
40 const CGRect * inBounds,
41 CGImageRef inImage) ;
42 WX_NSImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromCGImage( CGImageRef image, double scale = 1.0 );
43 CGImageRef WXDLLIMPEXP_CORE wxOSXCreateCGImageFromNSImage( WX_NSImage nsimage, double *scale = NULL );
44 CGContextRef WXDLLIMPEXP_CORE wxOSXCreateBitmapContextFromNSImage( WX_NSImage nsimage);
45 double WXDLLIMPEXP_CORE wxOSXGetMainScreenContentScaleFactor();
46
47 wxBitmap WXDLLIMPEXP_CORE wxOSXCreateSystemBitmap(const wxString& id, const wxString &client, const wxSize& size);
48 WXWindow WXDLLIMPEXP_CORE wxOSXGetMainWindow();
49
50 class WXDLLIMPEXP_FWD_CORE wxDialog;
51
52 class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
53 {
54 public :
55 wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, bool isRootControl = false, bool isUserPane = false ) ;
56 wxWidgetCocoaImpl() ;
57 ~wxWidgetCocoaImpl();
58
59 void Init();
60
61 virtual bool IsVisible() const ;
62 virtual void SetVisibility(bool);
63
64 // we provide a static function which can be reused from
65 // wxNonOwnedWindowCocoaImpl too
66 static bool ShowViewOrWindowWithEffect(wxWindow *win,
67 bool show,
68 wxShowEffect effect,
69 unsigned timeout);
70
71 virtual bool ShowWithEffect(bool show,
72 wxShowEffect effect,
73 unsigned timeout);
74
75 virtual void Raise();
76
77 virtual void Lower();
78
79 virtual void ScrollRect( const wxRect *rect, int dx, int dy );
80
81 virtual WXWidget GetWXWidget() const { return m_osxView; }
82
83 virtual void SetBackgroundColour(const wxColour&);
84 virtual bool SetBackgroundStyle(wxBackgroundStyle style);
85
86 virtual void GetContentArea( int &left , int &top , int &width , int &height ) const;
87 virtual void Move(int x, int y, int width, int height);
88 virtual void GetPosition( int &x, int &y ) const;
89 virtual void GetSize( int &width, int &height ) const;
90 virtual void SetControlSize( wxWindowVariant variant );
91
92 virtual void SetNeedsDisplay( const wxRect* where = NULL );
93 virtual bool GetNeedsDisplay() const;
94
95 virtual void SetDrawingEnabled(bool enabled);
96
97 virtual bool CanFocus() const;
98 // return true if successful
99 virtual bool SetFocus();
100 virtual bool HasFocus() const;
101
102 void RemoveFromParent();
103 void Embed( wxWidgetImpl *parent );
104
105 void SetDefaultButton( bool isDefault );
106 void PerformClick();
107 virtual void SetLabel(const wxString& title, wxFontEncoding encoding);
108
109 void SetCursor( const wxCursor & cursor );
110 void CaptureMouse();
111 void ReleaseMouse();
112
113 void SetDropTarget(wxDropTarget* target);
114
115 wxInt32 GetValue() const;
116 void SetValue( wxInt32 v );
117 wxBitmap GetBitmap() const;
118 void SetBitmap( const wxBitmap& bitmap );
119 void SetBitmapPosition( wxDirection dir );
120 void SetupTabs( const wxNotebook &notebook );
121 void GetBestRect( wxRect *r ) const;
122 bool IsEnabled() const;
123 void Enable( bool enable );
124 bool ButtonClickDidStateChange() { return true ;}
125 void SetMinimum( wxInt32 v );
126 void SetMaximum( wxInt32 v );
127 wxInt32 GetMinimum() const;
128 wxInt32 GetMaximum() const;
129 void PulseGauge();
130 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
131
132 void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
133 void SetToolTip( wxToolTip* tooltip );
134
135 void InstallEventHandler( WXWidget control = NULL );
136
137 virtual bool DoHandleMouseEvent(NSEvent *event);
138 virtual bool DoHandleKeyEvent(NSEvent *event);
139 virtual bool DoHandleCharEvent(NSEvent *event, NSString *text);
140 virtual void DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow);
141
142 virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
143 virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
144 void SetupCoordinates(wxCoord &x, wxCoord &y, NSEvent *nsEvent);
145 virtual bool SetupCursor(NSEvent* event);
146
147
148 #if !wxOSX_USE_NATIVE_FLIPPED
149 void SetFlipped(bool flipped);
150 virtual bool IsFlipped() const { return m_isFlipped; }
151 #endif
152
153 virtual double GetContentScaleFactor() const;
154
155 // cocoa thunk connected calls
156
157 virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
158 virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
159 virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
160 virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
161 virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
162 virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
163 virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
164 virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
165 virtual bool performKeyEquivalent(WX_NSEvent event, WXWidget slf, void* _cmd);
166 virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
167 virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
168 virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
169 #if !wxOSX_USE_NATIVE_FLIPPED
170 virtual bool isFlipped(WXWidget slf, void* _cmd);
171 #endif
172 virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
173
174 virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
175 virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
176
177 // for wxTextCtrl-derived classes, put here since they don't all derive
178 // from the same pimpl class.
179 virtual void controlTextDidChange();
180
181 protected:
182 WXWidget m_osxView;
183 NSEvent* m_lastKeyDownEvent;
184 #if !wxOSX_USE_NATIVE_FLIPPED
185 bool m_isFlipped;
186 #endif
187 // if it the control has an editor, that editor will already send some
188 // events, don't resend them
189 bool m_hasEditor;
190
191 DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
192 };
193
194 DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
195
196 class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
197 {
198 public :
199 wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
200 wxNonOwnedWindowCocoaImpl();
201
202 virtual ~wxNonOwnedWindowCocoaImpl();
203
204 virtual void WillBeDestroyed() ;
205 void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
206 long style, long extraStyle, const wxString& name ) ;
207 void Create( wxWindow* parent, WXWindow nativeWindow );
208
209 WXWindow GetWXWindow() const;
210 void Raise();
211 void Lower();
212 bool Show(bool show);
213
214 virtual bool ShowWithEffect(bool show,
215 wxShowEffect effect,
216 unsigned timeout);
217
218 void Update();
219 bool SetTransparent(wxByte alpha);
220 bool SetBackgroundColour(const wxColour& col );
221 void SetExtraStyle( long exStyle );
222 void SetWindowStyleFlag( long style );
223 bool SetBackgroundStyle(wxBackgroundStyle style);
224 bool CanSetTransparent();
225
226 void MoveWindow(int x, int y, int width, int height);
227 void GetPosition( int &x, int &y ) const;
228 void GetSize( int &width, int &height ) const;
229
230 void GetContentArea( int &left , int &top , int &width , int &height ) const;
231 bool SetShape(const wxRegion& region);
232
233 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
234
235 virtual bool IsMaximized() const;
236
237 virtual bool IsIconized() const;
238
239 virtual void Iconize( bool iconize );
240
241 virtual void Maximize(bool maximize);
242
243 virtual bool IsFullScreen() const;
244
245 virtual bool ShowFullScreen(bool show, long style);
246
247 virtual void ShowWithoutActivating();
248
249 virtual void RequestUserAttention(int flags);
250
251 virtual void ScreenToWindow( int *x, int *y );
252
253 virtual void WindowToScreen( int *x, int *y );
254
255 virtual bool IsActive();
256
257 virtual void SetModified(bool modified);
258 virtual bool IsModified() const;
259
260 virtual void SetRepresentedFilename(const wxString& filename);
261
262 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
263
264 CGWindowLevel GetWindowLevel() const { return m_macWindowLevel; }
265 void RestoreWindowLevel();
266
267 static WX_NSResponder GetNextFirstResponder() ;
268 protected :
269 CGWindowLevel m_macWindowLevel;
270 WXWindow m_macWindow;
271 void * m_macFullScreenData ;
272 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl)
273 };
274
275 DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton );
276
277 class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl
278 {
279 public:
280 wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v);
281 virtual void SetBitmap(const wxBitmap& bitmap);
282 #if wxUSE_MARKUP
283 virtual void SetLabelMarkup(const wxString& markup);
284 #endif // wxUSE_MARKUP
285
286 void SetPressedBitmap( const wxBitmap& bitmap );
287 void GetLayoutInset(int &left , int &top , int &right, int &bottom) const;
288 void SetAcceleratorFromLabel(const wxString& label);
289
290 NSButton *GetNSButton() const;
291 };
292
293 #ifdef __OBJC__
294 typedef void (*wxOSX_TextEventHandlerPtr)(NSView* self, SEL _cmd, NSString *event);
295 typedef void (*wxOSX_EventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
296 typedef BOOL (*wxOSX_PerformKeyEventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
297 typedef BOOL (*wxOSX_FocusHandlerPtr)(NSView* self, SEL _cmd);
298
299
300 WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
301 WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
302 WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
303 WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
304 WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
305
306 NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
307 bool adjustForOrigin = true );
308
309 WXDLLIMPEXP_CORE NSView* wxOSXGetViewFromResponder( NSResponder* responder );
310
311 // used for many wxControls
312
313 @interface wxNSButton : NSButton
314 {
315 NSTrackingRectTag rectTag;
316 }
317
318 @end
319
320 @interface wxNSBox : NSBox
321 {
322 }
323
324 @end
325
326 @interface wxNSTextFieldEditor : NSTextView
327 {
328 NSEvent* lastKeyDownEvent;
329 }
330
331 @end
332
333 @interface wxNSTextField : NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
334 {
335 wxNSTextFieldEditor* fieldEditor;
336 }
337
338 - (wxNSTextFieldEditor*) fieldEditor;
339 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
340
341 @end
342
343 @interface wxNSSecureTextField : NSSecureTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>)
344 {
345 }
346
347 @end
348
349
350 @interface wxNSTextView : NSTextView wxOSX_10_6_AND_LATER(<NSTextViewDelegate>)
351 {
352 }
353
354 - (void)textDidChange:(NSNotification *)aNotification;
355
356 @end
357
358 @interface wxNSComboBox : NSComboBox
359 {
360 wxNSTextFieldEditor* fieldEditor;
361 }
362
363 - (wxNSTextFieldEditor*) fieldEditor;
364 - (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
365
366 @end
367
368
369
370 @interface wxNSMenu : NSMenu
371 {
372 wxMenuImpl* impl;
373 }
374
375 - (void) setImplementation:(wxMenuImpl*) item;
376 - (wxMenuImpl*) implementation;
377
378 @end
379
380 @interface wxNSMenuItem : NSMenuItem
381 {
382 wxMenuItemImpl* impl;
383 }
384
385 - (void) setImplementation:(wxMenuItemImpl*) item;
386 - (wxMenuItemImpl*) implementation;
387
388 - (void)clickedAction:(id)sender;
389 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
390
391 @end
392
393 void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c);
394
395 /*
396 We need this for ShowModal, as the sheet just disables the parent window and
397 returns control to the app, whereas we don't want to return from ShowModal
398 until the sheet has been dismissed.
399 */
400 @interface ModalDialogDelegate : NSObject
401 {
402 BOOL sheetFinished;
403 int resultCode;
404 wxDialog* impl;
405 }
406
407 - (void)setImplementation: (wxDialog *)dialog;
408 - (BOOL)finished;
409 - (int)code;
410 - (void)waitForSheetToFinish;
411 - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
412 @end
413
414 // This interface must be exported in shared 64 bit multilib build but
415 // using WXEXPORT with Objective C interfaces doesn't work with old (4.0.1)
416 // gcc when using 10.4 SDK. It does work with newer gcc even in 32 bit
417 // builds but seems to be unnecessary there so to avoid the expense of a
418 // configure check verifying if this does work or not with the current
419 // compiler we just only use it for 64 bit builds where this is always
420 // supported.
421 //
422 // NB: Currently this is the only place where we need to export an
423 // interface but if we need to do it elsewhere we should define a
424 // WXEXPORT_OBJC macro once and reuse it in all places it's needed
425 // instead of duplicating this preprocessor check.
426 #ifdef __LP64__
427 WXEXPORT
428 #endif // 64 bit builds
429 @interface wxNSAppController : NSObject wxOSX_10_6_AND_LATER(<NSApplicationDelegate>)
430 {
431 }
432
433 @end
434
435 #endif // __OBJC__
436
437 // NSCursor
438
439 WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
440 WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
441 void wxMacCocoaSetCursor( WX_NSCursor cursor );
442 void wxMacCocoaHideCursor();
443 void wxMacCocoaShowCursor();
444
445 typedef struct tagClassicCursor
446 {
447 wxUint16 bits[16];
448 wxUint16 mask[16];
449 wxInt16 hotspot[2];
450 }ClassicCursor;
451
452 const short kwxCursorBullseye = 0;
453 const short kwxCursorBlank = 1;
454 const short kwxCursorPencil = 2;
455 const short kwxCursorMagnifier = 3;
456 const short kwxCursorNoEntry = 4;
457 const short kwxCursorPaintBrush = 5;
458 const short kwxCursorPointRight = 6;
459 const short kwxCursorPointLeft = 7;
460 const short kwxCursorQuestionArrow = 8;
461 const short kwxCursorRightArrow = 9;
462 const short kwxCursorSizeNS = 10;
463 const short kwxCursorSize = 11;
464 const short kwxCursorSizeNESW = 12;
465 const short kwxCursorSizeNWSE = 13;
466 const short kwxCursorRoller = 14;
467 const short kwxCursorWatch = 15;
468 const short kwxCursorLast = kwxCursorWatch;
469
470 // exposing our fallback cursor map
471
472 extern ClassicCursor gMacCursors[];
473
474 extern NSLayoutManager* gNSLayoutManager;
475
476 #endif
477
478 #endif
479 // _WX_PRIVATE_COCOA_H_
480