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