#include "wx/wxprec.h"
#ifndef WX_PRECOMP
-#include "wx/nonownedwnd.h"
+ #include "wx/nonownedwnd.h"
+ #include "wx/log.h"
#endif
#ifdef __WXMAC__
- (void)setFloatValue:(float)aFloat;
- (void)setDoubleValue:(double)aDouble;
+- (double)minValue;
+- (double)maxValue;
- (void)setMinValue:(double)aDouble;
- (void)setMaxValue:(double)aDouble;
- (id)contentView;
@end
-long wxOSXTranslateCocoaKey(unsigned short code, int unichar )
+long wxOSXTranslateCocoaKey( int unichar )
{
- long retval = code;
+ long retval = unichar;
switch( unichar )
{
case NSUpArrowFunctionKey :
wxevent.m_controlDown = modifiers & NSControlKeyMask;
wxevent.m_altDown = modifiers & NSAlternateKeyMask;
wxevent.m_metaDown = modifiers & NSCommandKeyMask;
-
- wxString chars;
- if ( eventType != NSFlagsChanged )
- {
- NSString* nschars = [nsEvent characters];
- if ( nschars )
- {
- wxCFStringRef cfchars((CFStringRef)[nschars retain]);
- chars = cfchars.AsString();
- }
- }
- int unichar = chars.Length() > 0 ? chars[0] : 0;
-
-#if wxUSE_UNICODE
- wxevent.m_uniChar = unichar;
-#endif
- wxevent.m_keyCode = wxOSXTranslateCocoaKey( [nsEvent keyCode], unichar ) ;
-// wxevent.m_rawCode = keymessage;
+ wxevent.m_rawCode = [nsEvent keyCode];
wxevent.m_rawFlags = modifiers;
wxevent.SetTimestamp( [nsEvent timestamp] * 1000.0 ) ;
default :
break ;
}
+
+ wxString chars;
+ if ( eventType != NSFlagsChanged )
+ {
+ NSString* nschars = [nsEvent characters];
+ if ( nschars )
+ {
+ wxCFStringRef cfchars((CFStringRef)[nschars retain]);
+ chars = cfchars.AsString();
+ }
+ }
+
+ int unichar = chars.Length() > 0 ? chars[0] : 0;
+ long keyval = wxOSXTranslateCocoaKey(unichar) ;
+ if ( keyval == unichar && ( wxevent.GetEventType() == wxEVT_KEY_UP || wxevent.GetEventType() == wxEVT_KEY_DOWN ) )
+ keyval = wxToupper( keyval ) ;
+
+#if wxUSE_UNICODE
+ wxevent.m_uniChar = unichar;
+#endif
+ wxevent.m_keyCode = keyval;
}
+UInt32 g_lastButton = 0 ;
+bool g_lastButtonWasFakeRight = false ;
+
void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
{
UInt32 modifiers = [nsEvent modifierFlags] ;
wxevent.m_metaDown = modifiers & NSCommandKeyMask;
wxevent.m_clickCount = clickCount;
wxevent.SetTimestamp( [nsEvent timestamp] * 1000.0 ) ;
-/*
- UInt32 mouseChord = 0; // TODO does this exist for cocoa
+
+ UInt32 mouseChord = 0;
+ int eventType = [nsEvent type];
+
+ switch (eventType)
+ {
+ case NSLeftMouseDown :
+ case NSLeftMouseDragged :
+ mouseChord = 1U;
+ break;
+ case NSRightMouseDown :
+ case NSRightMouseDragged :
+ mouseChord = 2U;
+ break;
+ case NSOtherMouseDown :
+ case NSOtherMouseDragged :
+ mouseChord = 4U;
+ break;
+ }
+
// a control click is interpreted as a right click
bool thisButtonIsFakeRight = false ;
- if ( button == kEventMouseButtonPrimary && (modifiers & controlKey) )
+ if ( button == 0 && (modifiers & NSControlKeyMask) )
{
- button = kEventMouseButtonSecondary ;
+ button = 1 ;
thisButtonIsFakeRight = true ;
}
// otherwise we report double clicks by connecting a left click with a ctrl-left click
if ( clickCount > 1 && button != g_lastButton )
clickCount = 1 ;
+
// we must make sure that our synthetic 'right' button corresponds in
// mouse down, moved and mouse up, and does not deliver a right down and left up
-
- if ( cEvent.GetKind() == kEventMouseDown )
+ switch (eventType)
{
- g_lastButton = button ;
- g_lastButtonWasFakeRight = thisButtonIsFakeRight ;
- }
+ case NSLeftMouseDown :
+ case NSRightMouseDown :
+ case NSOtherMouseDown :
+ g_lastButton = button ;
+ g_lastButtonWasFakeRight = thisButtonIsFakeRight ;
+ break;
+ }
if ( button == 0 )
{
g_lastButton = 0 ;
g_lastButtonWasFakeRight = false ;
}
- else if ( g_lastButton == kEventMouseButtonSecondary && g_lastButtonWasFakeRight )
+ else if ( g_lastButton == 1 && g_lastButtonWasFakeRight )
button = g_lastButton ;
// Adjust the chord mask to remove the primary button and add the
if(mouseChord & 4U)
wxevent.m_middleDown = true ;
-*/
// translate into wx types
- int eventType = [nsEvent type];
switch (eventType)
{
case NSLeftMouseDown :
void wxWidgetCocoaImpl::ScrollRect( const wxRect *rect, int dx, int dy )
{
+#if 1
+ SetNeedsDisplay() ;
+#else
+ // We should do something like this, but it wasn't working in 10.4.
+ if (GetNeedsDisplay() )
+ {
+ SetNeedsDisplay() ;
+ }
+ NSRect r = wxToNSRect( [m_osxView superview], *rect );
+ NSSize offset = NSMakeSize((float)dx, (float)dy);
+ [m_osxView scrollRect:r by:offset];
+#endif
}
void wxWidgetCocoaImpl::Move(int x, int y, int width, int height)
}
}
+wxInt32 wxWidgetCocoaImpl::GetMinimum() const
+{
+ if ( [m_osxView respondsToSelector:@selector(getMinValue:)] )
+ {
+ return [m_osxView minValue];
+ }
+ return 0;
+}
+
+wxInt32 wxWidgetCocoaImpl::GetMaximum() const
+{
+ if ( [m_osxView respondsToSelector:@selector(getMaxValue:)] )
+ {
+ return [m_osxView maxValue];
+ }
+ return 0;
+}
+
void wxWidgetCocoaImpl::SetBitmap( const wxBitmap& bitmap )
{
if ( [m_osxView respondsToSelector:@selector(setImage:)] )
{
wxKeyEvent wxevent(wxEVT_KEY_DOWN);
SetupKeyEvent( wxevent, event );
- return GetWXPeer()->HandleWindowEvent(wxevent);
+
+ return GetWXPeer()->HandleKeyEvent(wxevent);
}
bool wxWidgetCocoaImpl::DoHandleMouseEvent(NSEvent *event)
}
}
+void wxWidgetCocoaImpl::SetCursor(const wxCursor& cursor)
+{
+ NSPoint location = [NSEvent mouseLocation];
+ location = [[m_osxView window] convertScreenToBase:location];
+ NSPoint locationInView = [m_osxView convertPoint:location fromView:nil];
+
+ if( NSMouseInRect(locationInView, [m_osxView bounds], YES) )
+ {
+ [(NSCursor*)cursor.GetHCURSOR() set];
+ }
+ [[m_osxView window] invalidateCursorRectsForView:m_osxView];
+}
+
+void wxWidgetCocoaImpl::CaptureMouse()
+{
+ [[m_osxView window] disableCursorRects];
+}
+
+void wxWidgetCocoaImpl::ReleaseMouse()
+{
+ [[m_osxView window] enableCursorRects];
+}
//
// Factory methods