]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/utils.cpp
mention Solaris 7 compilation fix
[wxWidgets.git] / src / mac / carbon / utils.cpp
index 90fff0dd64bcd8a27c147f7ccd7f426bd353fc25..aae75333d7117258d6e46a5cc37e97212645e675 100644 (file)
 #include <string.h>
 #include <stdarg.h>
 
-#include "MoreFiles.h"
-#include "MoreFilesExtras.h"
+#ifdef __DARWIN__
+#  include "MoreFilesX.h"
+#else
+#  include "MoreFiles.h"
+#  include "MoreFilesExtras.h"
+#endif
 
 #ifndef __DARWIN__
 #include <Threads.h>
@@ -313,68 +317,57 @@ bool wxGetResource(const wxString& section, const wxString& entry, int *value, c
 }
 #endif // wxUSE_RESOURCES
 
-int wxBusyCursorCount = 0;
-extern CursHandle      gMacCurrentCursor ;
-CursHandle                     gMacStoredActiveCursor = NULL ;
+int gs_wxBusyCursorCount = 0;
+extern wxCursor        gMacCurrentCursor ;
+wxCursor               gMacStoredActiveCursor ;
 
 // Set the cursor to the busy cursor for all windows
 void wxBeginBusyCursor(wxCursor *cursor)
 {
-  wxBusyCursorCount ++;
-  if (wxBusyCursorCount == 1)
+  if (gs_wxBusyCursorCount++ == 0)
   {
        gMacStoredActiveCursor = gMacCurrentCursor ;
-               ::SetCursor( *::GetCursor( watchCursor ) ) ;
-  }
-  else
-  {
-        // TODO
+       cursor->MacInstall() ;
   }
+  //else: nothing to do, already set
 }
 
 // Restore cursor to normal
 void wxEndBusyCursor()
 {
-  if (wxBusyCursorCount == 0)
-    return;
+    wxCHECK_RET( gs_wxBusyCursorCount > 0,
+                 wxT("no matching wxBeginBusyCursor() for wxEndBusyCursor()") );
 
-  wxBusyCursorCount --;
-  if (wxBusyCursorCount == 0)
+  if (--gs_wxBusyCursorCount == 0)
   {
-    if ( gMacStoredActiveCursor )
-       ::SetCursor( *gMacStoredActiveCursor ) ;
-    else
-    {
-               Cursor          MacArrow ;
-       ::SetCursor( GetQDGlobalsArrow( &MacArrow ) ) ;
-    }
-       gMacStoredActiveCursor = NULL ;
+       gMacStoredActiveCursor.MacInstall() ;
+       gMacStoredActiveCursor = wxNullCursor ;
   }
 }
 
 // TRUE if we're between the above two calls
 bool wxIsBusy()
 {
-  return (wxBusyCursorCount > 0);
+  return (gs_wxBusyCursorCount > 0);
 }
 
 wxString wxMacFindFolder( short        vol,
                          OSType       folderType,
                          Boolean      createFolder)
 {
-       short           vRefNum  ;
-       long            dirID ;
-       wxString strDir ;
-
-       if ( FindFolder( vol, folderType, createFolder, &vRefNum, &dirID) == noErr)
-       {
-               FSSpec file ;
-               if ( FSMakeFSSpec( vRefNum , dirID , "\p" , &file ) == noErr )
-               {
-                       strDir = wxMacFSSpec2MacFilename( &file ) + wxFILE_SEP_PATH ;
-               }
-       }
-       return strDir ;
+    short    vRefNum  ;
+    long     dirID ;
+    wxString strDir ;
+    
+    if ( FindFolder( vol, folderType, createFolder, &vRefNum, &dirID) == noErr)
+    {
+        FSSpec file ;
+        if ( FSMakeFSSpec( vRefNum , dirID , "\p" , &file ) == noErr )
+        {
+            strDir = wxMacFSSpec2MacFilename( &file ) + wxFILE_SEP_PATH ;
+        }
+    }
+    return strDir ;
 }
 
 #ifndef __DARWIN__
@@ -461,34 +454,42 @@ int wxDisplayDepth()
 // Get size of display
 void wxDisplaySize(int *width, int *height)
 {
-       BitMap screenBits;
-       GetQDGlobalsScreenBits( &screenBits );
+       BitMap screenBits;
+       GetQDGlobalsScreenBits( &screenBits );
 
     *width = screenBits.bounds.right - screenBits.bounds.left  ;
     *height = screenBits.bounds.bottom - screenBits.bounds.top ;
-#if TARGET_CARBON
-       SInt16 mheight ;
-       GetThemeMenuBarHeight( &mheight ) ;
-     *height -= mheight ;
-#else
-     *height -= LMGetMBarHeight() ;
-#endif
 }
 
 void wxDisplaySizeMM(int *width, int *height)
 {
-   wxDisplaySize(width, height);
+    wxDisplaySize(width, height);
+    // on mac 72 is fixed (at least now ;-)
+    float cvPt2Mm = 25.4 / 72;
+    *width = int( *width * cvPt2Mm );
+    *height = int( *height * cvPt2Mm );
 }
 
 void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 {
-    // This is supposed to return desktop dimensions minus any window
-    // manager panels, menus, taskbars, etc.  If there is a way to do that
-    // for this platform please fix this function, otherwise it defaults
-    // to the entire desktop.
+    BitMap screenBits;
+    GetQDGlobalsScreenBits( &screenBits );
+
     if (x) *x = 0;
     if (y) *y = 0;
-    wxDisplaySize(width, height);
+
+    *width = screenBits.bounds.right - screenBits.bounds.left  ;
+    *height = screenBits.bounds.bottom - screenBits.bounds.top ;
+
+    SInt16 mheight ;
+#if TARGET_CARBON
+    GetThemeMenuBarHeight( &mheight ) ;
+#else
+    mheight = LMGetMBarHeight() ;
+#endif
+    *height -= mheight ;
+    if ( y )
+        *y = mheight ;
 }
 
 wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
@@ -506,3 +507,18 @@ wxString wxGetOsDescription()
 #endif
 }
 
+//---------------------------------------------------------------------------
+// wxMac Specific utility functions
+//---------------------------------------------------------------------------
+
+#if TARGET_CARBON
+// converts this string into a carbon foundation string with optional pc 2 mac encoding
+CFStringRef wxMacCreateCFString( const wxString &str , bool pc2macEncoding ) 
+{
+       return CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
+               pc2macEncoding ? 
+               kCFStringEncodingWindowsLatin1 : CFStringGetSystemEncoding() ) ;
+}
+
+#endif //TARGET_CARBON
+