]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/classic/app.cpp
adding raster op hook to graphics context (10.4 only, partial XOR/INVERT support)
[wxWidgets.git] / src / mac / classic / app.cpp
index c2aaf86cd00aa46a4322579e189a7cb88e2e1ded..80a5cd86da8ff4f325f14900f4ad662d06a250a1 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        app.cpp
+// Name:        src/mac/classic/app.cpp
 // Purpose:     wxApp
 // Author:      Stefan Csomor
 // Modified by:
@@ -9,33 +9,37 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "app.h"
-#endif
+#include "wx/wxprec.h"
 
-#include "wx/defs.h"
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
 
-#include "wx/window.h"
-#include "wx/frame.h"
-#include "wx/button.h"
 #include "wx/app.h"
-#include "wx/utils.h"
-#include "wx/gdicmn.h"
-#include "wx/pen.h"
-#include "wx/brush.h"
-#include "wx/cursor.h"
-#include "wx/intl.h"
-#include "wx/icon.h"
-#include "wx/palette.h"
-#include "wx/dc.h"
-#include "wx/dialog.h"
-#include "wx/msgdlg.h"
-#include "wx/log.h"
-#include "wx/module.h"
-#include "wx/memory.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/utils.h"
+    #include "wx/window.h"
+    #include "wx/frame.h"
+    #include "wx/dc.h"
+    #include "wx/button.h"
+    #include "wx/menu.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/palette.h"
+    #include "wx/icon.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/msgdlg.h"
+    #include "wx/textctrl.h"
+    #include "wx/memory.h"
+    #include "wx/gdicmn.h"
+    #include "wx/module.h"
+#endif
+
 #include "wx/tooltip.h"
-#include "wx/textctrl.h"
-#include "wx/menu.h"
 #include "wx/docview.h"
 #include "wx/filename.h"
 
@@ -44,9 +48,9 @@
 // mac
 
 #ifndef __DARWIN__
-  #if __option(profile)
-    #include <profiler.h>
-  #endif
+    #if __option(profile)
+        #include <profiler.h>
+    #endif
 #endif
 
 #include "apprsrc.h"
@@ -76,24 +80,21 @@ extern size_t g_numberOfThreads;
 
 // statics for implementation
 
-static bool s_inYield = FALSE;
+static bool s_inYield = false;
 
 #if TARGET_CARBON
-static bool s_inReceiveEvent = FALSE ;
+static bool s_inReceiveEvent = false ;
 static EventTime sleepTime = kEventDurationNoWait ;
 #else
 static long sleepTime = 0 ;
 #endif
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
 BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
     EVT_IDLE(wxApp::OnIdle)
     EVT_END_SESSION(wxApp::OnEndSession)
     EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession)
 END_EVENT_TABLE()
-#endif
-
 
 const short    kMacMinHeap = (29 * 1024) ;
 // platform specific static variables
@@ -236,7 +237,7 @@ short wxApp::MacHandleAEQuit(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNU
     {
         wxCommandEvent exitEvent(wxEVT_COMMAND_MENU_SELECTED, s_macExitMenuItemId);
         if (!win->ProcessEvent(exitEvent))
-            win->Close(TRUE ) ;
+            win->Close(true) ;
     }
     else
     {
@@ -280,7 +281,7 @@ void wxApp::MacPrintFile(const wxString & fileName )
                 if (printout)
                 {
                     wxPrinter printer;
-                    printer.Print(view->GetFrame(), printout, TRUE);
+                    printer.Print(view->GetFrame(), printout, true);
                     delete printout;
                 }
             }
@@ -335,17 +336,17 @@ static pascal OSStatus
 MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
 {
     wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar();
-    
+
     if ( mbar )
     {
         wxFrame* win = mbar->GetFrame();
         if ( win )
         {
-            
+
             // VZ: we could find the menu from its handle here by examining all
             //     the menus in the menu bar recursively but knowing that neither
             //     wxMSW nor wxGTK do it why bother...
- #if 0
+#if 0
             MenuRef menuRef;
 
             GetEventParameter(event,
@@ -353,9 +354,9 @@ MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
                               typeMenuRef, NULL,
                               sizeof(menuRef), NULL,
                               &menuRef);
- #endif // 0
+#endif // 0
 
-            wxEventType type=0;        
+            wxEventType type=0;
             MenuCommand cmd=0;
             switch (GetEventKind(event))
             {
@@ -389,7 +390,7 @@ MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
 
 // due to the rather low-level event API of wxWidgets, we cannot use RunApplicationEventLoop
 // but have to use ReceiveNextEvent dealing with events manually, therefore we also have
-// deal with clicks in the menu bar explicitely
+// to deal with clicks in the menu bar explicitly
 
 pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) ;
 
@@ -636,7 +637,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
         UMAShowArrowCursor() ;
         ParamText("\pFatal Error", message, (ConstStr255Param)"\p", (ConstStr255Param)"\p");
         itemHit = Alert(128, nil);
-      return FALSE ;
+        return false ;
   }
 
 #ifndef __DARWIN__
@@ -742,7 +743,7 @@ bool wxApp::OnInitGui()
 #endif
     }
 
-    return TRUE ;
+    return true ;
 }
 
 void wxApp::CleanUp()
@@ -1076,18 +1077,18 @@ pascal OSStatus wxMacApplicationEventHandler( EventHandlerCallRef handler , Even
 
 wxApp::wxApp()
 {
-  m_printMode = wxPRINT_WINDOWS;
-  m_auto3D = TRUE;
+    m_printMode = wxPRINT_WINDOWS;
+    m_auto3D = true;
 
-  m_macCurrentEvent = NULL ;
+    m_macCurrentEvent = NULL ;
 #if TARGET_CARBON
-  m_macCurrentEventHandlerCallRef = NULL ;
+    m_macCurrentEventHandlerCallRef = NULL ;
 #endif
 }
 
 int wxApp::MainLoop()
 {
-    m_keepGoing = TRUE;
+    m_keepGoing = true;
 
     while (m_keepGoing)
     {
@@ -1099,7 +1100,7 @@ int wxApp::MainLoop()
 
 void wxApp::ExitMainLoop()
 {
-      m_keepGoing = FALSE;
+    m_keepGoing = false;
 }
 
 // Is a message/event pending?
@@ -1109,7 +1110,7 @@ bool wxApp::Pending()
     // without the receive event (with pull param = false ) nothing is ever reported
     EventRef theEvent;
     ReceiveNextEvent (0, NULL, kEventDurationNoWait, false, &theEvent);
-    return GetNumEventsInQueue( GetMainEventQueue() ) > 0 ; 
+    return GetNumEventsInQueue( GetMainEventQueue() ) > 0 ;
 #else
     EventRecord event ;
 
@@ -1152,7 +1153,7 @@ void wxApp::Exit()
 void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event))
 {
     if (GetTopWindow())
-        GetTopWindow()->Close(TRUE);
+        GetTopWindow()->Close(true);
 }
 
 // Default behaviour: close the application with prompts. The
@@ -1162,7 +1163,7 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event)
     if (GetTopWindow())
     {
         if (!GetTopWindow()->Close(!event.CanVeto()))
-            event.Veto(TRUE);
+            event.Veto(true);
     }
 }
 
@@ -1183,10 +1184,10 @@ bool wxApp::Yield(bool onlyIfNeeded)
             wxFAIL_MSG( wxT("wxYield called recursively" ) );
         }
 
-        return FALSE;
+        return false;
     }
 
-    s_inYield = TRUE;
+    s_inYield = true;
 
 #if wxUSE_THREADS
     YieldToAnyThread() ;
@@ -1237,9 +1238,9 @@ bool wxApp::Yield(bool onlyIfNeeded)
 #endif
 
     wxMacProcessNotifierAndPendingEvents() ;
-    s_inYield = FALSE;
+    s_inYield = false;
 
-    return TRUE;
+    return true;
 }
 
 // platform specifics
@@ -1388,7 +1389,7 @@ void wxApp::MacDoOneEvent()
 
 /*virtual*/ void wxApp::MacHandleUnhandledEvent( WXEVENTREF evr )
 {
-    // Override to process unhandled events as you please    
+    // Override to process unhandled events as you please
 }
 
 void wxApp::MacHandleOneEvent( WXEVENTREF evr )
@@ -1515,7 +1516,7 @@ void wxApp::MacHandleHighLevelEvent( WXEVENTREF evr )
 {
     // we must avoid reentrancy problems when processing high level events eg printing
     bool former = s_inYield ;
-    s_inYield = TRUE ;
+    s_inYield = true ;
     EventRecord* ev = (EventRecord*) evr ;
     ::AEProcessAppleEvent( ev ) ;
     s_inYield = former ;
@@ -1856,14 +1857,9 @@ bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below
     wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key !=
         WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons"));
 
-#if __WXMAC_CARBON__
-//TODO: Low get map...
-   return !!(GetCurrentKeyModifiers() & wxKeyCodeToMacModifier(key)); 
-#else
-       KeyMap keymap; 
-       GetKeys(keymap);
-       return !!(BitTst(keymap, (sizeof(KeyMap)*8) - key));
-#endif
+    KeyMap keymap;
+    GetKeys(keymap);
+    return !!(BitTst(keymap, (sizeof(KeyMap)*8) - key));
 }
 
 #if !TARGET_CARBON
@@ -1985,7 +1981,7 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi
     }
     if (!handled)
     {
-        event.Skip( FALSE ) ;
+        event.Skip( false ) ;
         event.SetEventType( wxEVT_CHAR ) ;
         // raw value again
         event.m_keyCode = realkeyval ;
@@ -2019,31 +2015,34 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi
     // backdoor handler for default return and command escape
     if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )
     {
-          // if window is not having a focus still testing for default enter or cancel
-          // TODO add the UMA version for ActiveNonFloatingWindow
-          wxWindow* focus = wxFindWinFromMacWindow( (WXWindow) FrontWindow() ) ;
-          if ( focus )
-          {
+        // if window is not having a focus still testing for default enter or cancel
+        // TODO add the UMA version for ActiveNonFloatingWindow
+        wxWindow* focus = wxFindWinFromMacWindow( (WXWindow) FrontWindow() ) ;
+        if ( focus )
+        {
             if ( keyval == WXK_RETURN )
             {
-                 wxButton *def = wxDynamicCast(focus->GetDefaultItem(),
-                                                       wxButton);
-                 if ( def && def->IsEnabled() )
-                 {
-                     wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
-                     event.SetEventObject(def);
-                     def->Command(event);
-                     return true ;
+                wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+                if ( tlw && tlw->GetDefaultItem() )
+                {
+                    wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+                    if ( def && def->IsEnabled() )
+                    {
+                        wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+                        event.SetEventObject(def);
+                        def->Command(event);
+                        return true ;
+                    }
                 }
             }
             /* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
             else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
             {
-                  wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
-                  new_event.SetEventObject( focus );
-                  handled = focus->GetEventHandler()->ProcessEvent( new_event );
+                wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
+                new_event.SetEventObject( focus );
+                handled = focus->GetEventHandler()->ProcessEvent( new_event );
             }
-          }
+        }
     }
     return handled ;
 }
@@ -2214,7 +2213,7 @@ void wxApp::MacHandleOSEvent( WXEVENTREF evr )
                     bool controlDown = ev->modifiers & controlKey ; // for simulating right mouse
 
                     event.m_leftDown = isDown && !controlDown;
-                    event.m_middleDown = FALSE;
+                    event.m_middleDown = false;
                     event.m_rightDown = isDown && controlDown;
                     event.m_shiftDown = ev->modifiers & shiftKey;
                     event.m_controlDown = ev->modifiers & controlKey;
@@ -2315,7 +2314,7 @@ void wxApp::MacHandleMouseMovedEvent(wxInt32 x , wxInt32 y ,wxUint32 modifiers ,
 
         event.m_leftDown = isDown && !controlDown;
 
-        event.m_middleDown = FALSE;
+        event.m_middleDown = false;
         event.m_rightDown = isDown && controlDown;
 
         event.m_shiftDown = modifiers & shiftKey;