#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
- #include "wx/tooltip.h"
#include "wx/window.h"
#endif //WX_PRECOMP
+#include "wx/tooltip.h"
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
#import <AppKit/NSColor.h>
#import <AppKit/NSClipView.h>
#import <Foundation/NSException.h>
-#import <Foundation/NSString.h>
-
-#include <objc/objc-runtime.h>
// Turn this on to paint green over the dummy views for debugging
#undef WXCOCOA_FILL_DUMMY_VIEW
#import <AppKit/NSBezierPath.h>
#endif //def WXCOCOA_FILL_DUMMY_VIEW
+// A category for methods that are only present in Panther's SDK
+@interface NSView(wxNSViewPrePantherCompatibility)
+- (void)getRectsBeingDrawn:(const NSRect **)rects count:(int *)count;
+@end
+
// ========================================================================
// wxWindowCocoaHider
// ========================================================================
const NSRect *rects = ▭ // The bounding box of the region
int countRects = 1;
// Try replacing the larger rectangle with a list of smaller ones:
-NS_DURING
- //getRectsBeingDrawn:count: is a optimization that is only available on
- //Panthar (10.3) and higher. Check to see if it supports it -
- if ( [GetNSView() respondsToSelector:@selector(getRectsBeingDrawn:count:)] ) objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects);
-NS_HANDLER
-NS_ENDHANDLER
+ if ([GetNSView() respondsToSelector:@selector(getRectsBeingDrawn:count:)])
+ [GetNSView() getRectsBeingDrawn:&rects count:&countRects];
m_updateRegion = wxRegion(rects,countRects);
wxPaintEvent event(m_windowId);
DoMoveWindow(x,y,width,height);
}
-//We should really get rid of wxToolTip :)
-IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject)
+#if wxUSE_TOOLTIPS
void wxWindowCocoa::DoSetToolTip( wxToolTip *tip )
{
wxWindowBase::DoSetToolTip(tip);
- wxAutoNSAutoreleasePool pool;
-
if ( m_tooltip )
{
m_tooltip->SetWindow((wxWindow *)this);
- [GetNSView() setToolTip:wxNSStringWithWxString(m_tooltip->GetTip())];
}
}
+#endif
+
void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height)
{
wxAutoNSAutoreleasePool pool;
return m_cocoaNSView;
}
+wxWindow* wxWindow::GetWxWindow() const
+{
+ return (wxWindow*) this;
+}
+
void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{
[m_cocoaNSView setNeedsDisplay:YES];
void wxWindow::SetFocus()
{
- // TODO
+#ifdef __WXDEBUG__
+ bool bOK =
+#endif
+ [GetNSView() lockFocusIfCanDraw];
+
+ //Note that the normal lockFocus works on hidden and minimized windows
+ //and has no return value - which probably isn't what we want
+ wxASSERT(bOK);
}
void wxWindow::DoCaptureMouse()
// Get the window with the focus
wxWindow *wxWindowBase::DoFindFocus()
{
- // TODO
- return NULL;
+ wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa([NSView focusView]);
+
+ if (!win)
+ return NULL;
+
+ return win->GetWxWindow();
}
/* static */ wxWindow *wxWindowBase::GetCapture()