X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4849f027a4c76fe0faaf27f79e4aa39e12bebcd0..f54e5c1a4f6952c62ed4480f7d26feddc20f98ba:/include/wx/osx/cocoa/private.h diff --git a/include/wx/osx/cocoa/private.h b/include/wx/osx/cocoa/private.h index 80e4b9dbb0..d1c7059d7e 100644 --- a/include/wx/osx/cocoa/private.h +++ b/include/wx/osx/cocoa/private.h @@ -16,16 +16,44 @@ #include "wx/osx/core/private.h" -#ifdef __OBJC__ +#include "wx/defs.h" + +#include +#if wxOSX_USE_ATSU_TEXT + // we need theming and atsu + #include +#endif + +#ifdef __OBJC__ #import +#endif - extern NSRect wxToNSRect( NSView* parent, const wxRect& r ); - extern wxRect wxFromNSRect( NSView* parent, const NSRect& rect ); - extern NSPoint wxToNSPoint( NSView* parent, const wxPoint& p ); - extern wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p ); +// +// shared between Cocoa and Carbon +// -#endif // __OBJC__ +// bring in themeing types without pulling in the headers + +#if wxUSE_GUI +typedef SInt16 ThemeBrush; +CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ; +OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage( + CGContextRef inContext, + const CGRect * inBounds, + CGImageRef inImage) ; +WX_NSImage WXDLLIMPEXP_CORE wxOSXCreateNSImageFromCGImage( CGImageRef image ); +#endif + +long UMAGetSystemVersion() ; +WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to ); +WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); +WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); +WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); + +// +// +// #if wxUSE_GUI @@ -39,7 +67,8 @@ public : void Init(); virtual bool IsVisible() const ; - + virtual void SetVisibility(bool); + virtual void Raise(); virtual void Lower(); @@ -48,10 +77,13 @@ public : virtual WXWidget GetWXWidget() const { return m_osxView; } + virtual void SetBackgroundColour(const wxColour&); + virtual void GetContentArea( int &left , int &top , int &width , int &height ) const; virtual void Move(int x, int y, int width, int height); virtual void GetPosition( int &x, int &y ) const; virtual void GetSize( int &width, int &height ) const; + virtual void SetControlSize( wxWindowVariant variant ); virtual void SetNeedsDisplay( const wxRect* where = NULL ); virtual bool GetNeedsDisplay() const; @@ -63,11 +95,45 @@ public : void RemoveFromParent(); void Embed( wxWidgetImpl *parent ); + + void SetDefaultButton( bool isDefault ); + void PerformClick(); + void SetLabel(const wxString& title, wxFontEncoding encoding); + + void SetCursor( const wxCursor & cursor ); + void CaptureMouse(); + void ReleaseMouse(); + + wxInt32 GetValue() const; + void SetValue( wxInt32 v ); + void SetBitmap( const wxBitmap& bitmap ); + void SetupTabs( const wxNotebook ¬ebook ); + void GetBestRect( wxRect *r ) const; + bool IsEnabled() const; + void Enable( bool enable ); + bool ButtonClickDidStateChange() { return true ;} + void SetMinimum( wxInt32 v ); + void SetMaximum( wxInt32 v ); + wxInt32 GetMinimum() const; + wxInt32 GetMaximum() const; + void PulseGauge(); + void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ); + + void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true ); + + void InstallEventHandler( WXWidget control = NULL ); + + virtual bool DoHandleMouseEvent(NSEvent *event); + virtual bool DoHandleKeyEvent(NSEvent *event); + virtual void DoNotifyFocusEvent(bool receivedFocus); + protected: WXWidget m_osxView; DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl) }; +DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow ); + class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl { public : @@ -122,11 +188,259 @@ public : wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; } protected : - WX_NSWindow m_macWindow; + WX_wxNSWindow m_macWindow; void * m_macFullScreenData ; DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl) }; +#ifdef __OBJC__ + + extern NSRect wxToNSRect( NSView* parent, const wxRect& r ); + extern wxRect wxFromNSRect( NSView* parent, const NSRect& rect ); + extern NSPoint wxToNSPoint( NSView* parent, const wxPoint& p ); + extern wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p ); + + NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , + bool adjustForOrigin = true ); + + // common code snippets for cocoa implementations + // later to be done using injection in method table + + #define WXCOCOAIMPL_COMMON_EVENTS_INTERFACE -(void)mouseDown:(NSEvent *)event ;\ + - (void)rightMouseDown:(NSEvent *)event ;\ + - (void)otherMouseDown:(NSEvent *)event ;\ + - (void)mouseUp:(NSEvent *)event ;\ + - (void)rightMouseUp:(NSEvent *)event ;\ + - (void)otherMouseUp:(NSEvent *)event ;\ + - (void)mouseMoved:(NSEvent *)event;\ + - (void)mouseDragged:(NSEvent *)event;\ + - (void)rightMouseDragged:(NSEvent *)event;\ + - (void)otherMouseDragged:(NSEvent *)event;\ + - (void)scrollWheel:(NSEvent *)theEvent;\ + - (void)mouseEntered:(NSEvent *)event;\ + - (void)mouseExited:(NSEvent *)event;\ + - (void)keyDown:(NSEvent *)event;\ + - (void)keyUp:(NSEvent *)event;\ + - (BOOL)performKeyEquivalent:(NSEvent *)event;\ + - (void)flagsChanged:(NSEvent *)event;\ + - (BOOL)becomeFirstResponder;\ + - (BOOL)resignFirstResponder;\ + - (void)resetCursorRects; + + + #define WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN -(void)rightMouseDown:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super rightMouseDown:event];\ + }\ + -(void)otherMouseDown:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super otherMouseDown:event];\ + }\ + -(void)mouseUp:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseUp:event];\ + }\ + -(void)rightMouseUp:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super rightMouseUp:event];\ + }\ + -(void)otherMouseUp:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super otherMouseUp:event];\ + }\ + -(void)mouseMoved:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseMoved:event];\ + }\ + -(void)mouseDragged:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseDragged:event];\ + }\ + -(void)rightMouseDragged:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super rightMouseDragged:event];\ + }\ + -(void)otherMouseDragged:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super otherMouseDragged:event];\ + }\ + -(void)scrollWheel:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super scrollWheel:event];\ + }\ + -(void)mouseEntered:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseEntered:event];\ + }\ + -(void)mouseExited:(NSEvent *)event\ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseExited:event];\ + }\ + -(BOOL)performKeyEquivalent:(NSEvent *)event\ + {\ + if ( !impl->DoHandleKeyEvent(event) )\ + return [super performKeyEquivalent:event];\ + return YES;\ + }\ + -(void)keyDown:(NSEvent *)event\ + {\ + if ( !impl->DoHandleKeyEvent(event) )\ + [super keyDown:event];\ + }\ + -(void)keyUp:(NSEvent *)event\ + {\ + if ( !impl->DoHandleKeyEvent(event) )\ + [super keyUp:event];\ + }\ + -(void)flagsChanged:(NSEvent *)event\ + {\ + if ( !impl->DoHandleKeyEvent(event) )\ + [super flagsChanged:event];\ + }\ + - (BOOL) becomeFirstResponder\ + {\ + BOOL r = [super becomeFirstResponder];\ + if ( r )\ + impl->DoNotifyFocusEvent( true );\ + return r;\ + }\ + - (BOOL) resignFirstResponder\ + {\ + BOOL r = [super resignFirstResponder];\ + if ( r )\ + impl->DoNotifyFocusEvent( false );\ + return r;\ + }\ + - (void) resetCursorRects\ + {\ + if ( impl )\ + {\ + wxWindow* wxpeer = impl->GetWXPeer();\ + if ( wxpeer )\ + {\ + NSCursor *cursor = (NSCursor*)wxpeer->GetCursor().GetHCURSOR();\ + if (cursor == NULL)\ + [super resetCursorRects];\ + else\ + [self addCursorRect: [self bounds]\ + cursor: cursor];\ + }\ + }\ + } + + #define WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION -(void)mouseDown:(NSEvent *)event \ + {\ + if ( !impl->DoHandleMouseEvent(event) )\ + [super mouseDown:event];\ + }\ + WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN + + #define WXCOCOAIMPL_COMMON_MEMBERS wxWidgetCocoaImpl* impl; + + #define WXCOCOAIMPL_COMMON_INTERFACE \ + - (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation;\ + - (wxWidgetCocoaImpl*) implementation;\ + - (BOOL) isFlipped;\ + WXCOCOAIMPL_COMMON_EVENTS_INTERFACE + + #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE - (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation\ + {\ + impl = theImplementation;\ + }\ + - (wxWidgetCocoaImpl*) implementation\ + {\ + return impl;\ + }\ + + #define WXCOCOAIMPL_COMMON_IMPLEMENTATION WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION \ + WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \ + - (BOOL) isFlipped\ + {\ + return YES;\ + } + + #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_NO_MOUSEDOWN WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION_NO_MOUSEDOWN \ + WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \ + - (BOOL) isFlipped\ + {\ + return YES;\ + } + + + #define WXCOCOAIMPL_COMMON_IMPLEMENTATION_NOT_FLIPPED WXCOCOAIMPL_COMMON_EVENTS_IMPLEMENTATION \ + WXCOCOAIMPL_COMMON_IMPLEMENTATION_BASE \ + - (BOOL) isFlipped\ + {\ + return NO;\ + } + + // used for many wxControls + + @interface wxNSButton : NSButton + { + WXCOCOAIMPL_COMMON_MEMBERS + } + + WXCOCOAIMPL_COMMON_INTERFACE + - (void) clickedAction: (id) sender; + + @end + + @interface wxNSBox : NSBox + { + WXCOCOAIMPL_COMMON_MEMBERS + } + + WXCOCOAIMPL_COMMON_INTERFACE + + @end + + @interface wxNSTextField : NSTextField + { + WXCOCOAIMPL_COMMON_MEMBERS + } + + WXCOCOAIMPL_COMMON_INTERFACE + + @end + + @interface wxNSMenu : NSMenu + { + wxMenuImpl* impl; + } + + - (void) setImplementation:(wxMenuImpl*) item; + - (wxMenuImpl*) implementation; + + @end + + @interface wxNSMenuItem : NSMenuItem + { + wxMenuItemImpl* impl; + } + + - (void) setImplementation:(wxMenuItemImpl*) item; + - (wxMenuItemImpl*) implementation; + + - (void)clickedAction:(id)sender; + - (BOOL)validateMenuItem:(NSMenuItem *)menuItem; + + @end + +#endif // __OBJC__ + // NSCursor WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type ); @@ -142,6 +456,27 @@ typedef struct tagClassicCursor wxInt16 hotspot[2]; }ClassicCursor; +const short kwxCursorBullseye = 0; +const short kwxCursorBlank = 1; +const short kwxCursorPencil = 2; +const short kwxCursorMagnifier = 3; +const short kwxCursorNoEntry = 4; +const short kwxCursorPaintBrush = 5; +const short kwxCursorPointRight = 6; +const short kwxCursorPointLeft = 7; +const short kwxCursorQuestionArrow = 8; +const short kwxCursorRightArrow = 9; +const short kwxCursorSizeNS = 10; +const short kwxCursorSize = 11; +const short kwxCursorSizeNESW = 12; +const short kwxCursorSizeNWSE = 13; +const short kwxCursorRoller = 14; +const short kwxCursorLast = kwxCursorRoller; + +// exposing our fallback cursor map + +extern ClassicCursor gMacCursors[]; + #endif #endif