]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/tooltip.cpp
support accelerators for buttons too (slightly modified patch 1549012)
[wxWidgets.git] / src / mac / carbon / tooltip.cpp
index 8ffbb4101a6009087cc2b48a2e2c26f9c36ce1e9..e4eebd10861713091bc5d76b322a6b9cefbf09f4 100644 (file)
 #ifndef WX_PRECOMP
     #include "wx/app.h"
     #include "wx/window.h"
+    #include "wx/dc.h"
+    #include "wx/timer.h"
 #endif // WX_PRECOMP
 
-#include "wx/dc.h"
-#include "wx/timer.h"
 #include "wx/geometry.h"
 #include "wx/mac/uma.h"
 
@@ -53,13 +53,15 @@ private :
     PicHandle    m_backpict ;
     bool        m_shown ;
     long        m_mark ;
+#if wxUSE_TIMER 
     wxMacToolTipTimer* m_timer ;
-
+#endif
 #if TARGET_CARBON
     wxMacCFStringHolder m_helpTextRef ;
 #endif
 } ;
 
+#if wxUSE_TIMER
 class wxMacToolTipTimer : public wxTimer
 {
 public:
@@ -77,6 +79,7 @@ protected:
     wxMacToolTip*     m_tip;
     long        m_mark ;
 };
+#endif // wxUSE_TIMER
 
 //-----------------------------------------------------------------------------
 // wxToolTip
@@ -181,19 +184,22 @@ void wxToolTip::RemoveToolTips()
 }
 
 // --- mac specific
-
+#if wxUSE_TIMER 
 wxMacToolTipTimer::wxMacToolTipTimer( wxMacToolTip *tip , int msec )
 {
     m_tip = tip;
     m_mark = tip->GetMark() ;
     Start(msec, true);
 }
+#endif // wxUSE_TIMER
 
 wxMacToolTip::wxMacToolTip()
 {
     m_window = NULL ;
     m_backpict = NULL ;
+#if wxUSE_TIMER 
     m_timer = NULL ;
+#endif
     m_mark = 0 ;
     m_shown = false ;
 }
@@ -208,21 +214,23 @@ void wxMacToolTip::Setup( WindowRef win  , const wxString& text , const wxPoint&
     m_window =win;
     s_ToolTipWindowRef = m_window ;
     m_backpict = NULL ;
-
+#if wxUSE_TIMER 
     if ( m_timer )
         delete m_timer ;
 
     m_timer = new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
+#endif // wxUSE_TIMER
 }
 
 wxMacToolTip::~wxMacToolTip()
 {
+#if wxUSE_TIMER 
     if ( m_timer )
     {
         delete m_timer ;
         m_timer = NULL;
     }
-
+#endif // wxUSE_TIMER
     if ( m_backpict )
         Clear() ;
 }
@@ -239,12 +247,12 @@ void wxMacToolTip::Draw()
     {
         m_shown = true ;
 
-#if TARGET_CARBON
         HMHelpContentRec tag ;
         tag.version = kMacHelpVersion;
-        SetRect( &tag.absHotRect , m_position.x - 2 , m_position.y - 2 , m_position.x + 2 , m_position.y + 2 ) ;
 
-        QDLocalToGlobalRect( GetWindowPort( m_window ) , &tag.absHotRect ) ;
+        Point p = { m_position.y , m_position.x };
+        wxMacLocalToGlobal( m_window , &p ) ;
+        SetRect( &tag.absHotRect , p.h - 2 , p.v - 2 , p.h + 2 , p.v + 2 );
 
         m_helpTextRef.Assign( m_label , wxFONTENCODING_DEFAULT ) ;
         tag.content[kHMMinimumContentIndex].contentType = kHMCFStringContent ;
@@ -253,137 +261,6 @@ void wxMacToolTip::Draw()
         tag.content[kHMMaximumContentIndex].u.tagCFString = m_helpTextRef ;
         tag.tagSide = kHMDefaultSide;
         HMDisplayTag( &tag );
-#else
-        wxMacPortStateHelper help( (GrafPtr)GetWindowPort( m_window ) );
-        FontFamilyID fontId ;
-        Str255 fontName ;
-        SInt16 fontSize ;
-        Style fontStyle ;
-        GetThemeFont( kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
-        GetFNum( fontName, &fontId );
-
-        TextFont( fontId ) ;
-        TextSize( fontSize ) ;
-        TextFace( fontStyle ) ;
-        FontInfo fontInfo;
-        ::GetFontInfo(&fontInfo);
-        short lineh = fontInfo.ascent + fontInfo.descent + fontInfo.leading;
-        short height = 0 ;
-
-        int i = 0 ;
-        int length = m_label.length() ;
-        int width = 0 ;
-        int thiswidth = 0 ;
-        int laststop = 0 ;
-        wxCharBuffer text = m_label.mb_str( wxConvLocal ) ;
-
-        while ( i < length )
-        {
-            if ( text[i] == 13 || text[i] == 10)
-            {
-                thiswidth = ::TextWidth( text , laststop , i - laststop ) ;
-                if ( thiswidth > width )
-                    width = thiswidth ;
-
-                height += lineh ;
-                laststop = i + 1 ;
-            }
-
-            i++ ;
-        }
-
-        if ( i - laststop > 0 )
-        {
-            thiswidth = ::TextWidth( text , laststop , i - laststop ) ;
-            if ( thiswidth > width )
-                width = thiswidth ;
-            height += lineh ;
-        }
-
-        m_rect.left = m_position.x + kTipOffset;
-        m_rect.top = m_position.y + kTipOffset;
-        m_rect.right = m_rect.left + width + 2 * kTipBorder;
-
-        m_rect.bottom = m_rect.top + height + 2 * kTipBorder;
-        Rect r ;
-
-        GetPortBounds( GetWindowPort( m_window ) , &r ) ;
-        if ( m_rect.top < 0 )
-        {
-            m_rect.bottom += -m_rect.top ;
-            m_rect.top = 0 ;
-        }
-        if ( m_rect.left < 0 )
-        {
-            m_rect.right += -m_rect.left ;
-            m_rect.left = 0 ;
-        }
-        if ( m_rect.right > r.right )
-        {
-            m_rect.left -= (m_rect.right - r.right ) ;
-            m_rect.right = r.right ;
-        }
-        if ( m_rect.bottom > r.bottom )
-        {
-            m_rect.top -= (m_rect.bottom - r.bottom) ;
-            m_rect.bottom = r.bottom ;
-        }
-
-        GWorldPtr port ;
-        CGrafPtr  origPort ;
-        GDHandle  origDevice ;
-
-        ClipRect( &m_rect ) ;
-        BackColor( whiteColor ) ;
-        ForeColor(blackColor ) ;
-        NewGWorld( &port , wxDisplayDepth() , &m_rect , NULL , NULL , 0 ) ;
-
-        GetGWorld( &origPort , &origDevice ) ;
-        SetGWorld( port , NULL ) ;
-
-        m_backpict = OpenPicture(&m_rect);
-
-        CopyBits(GetPortBitMapForCopyBits(GetWindowPort(m_window)),
-            GetPortBitMapForCopyBits(port),
-            &m_rect,
-            &m_rect,
-            srcCopy,
-            NULL);
-        ClosePicture();
-        SetGWorld( origPort , origDevice ) ;
-        DisposeGWorld( port ) ;
-        PenNormal() ;
-
-        RGBColor tooltipbackground = { 0xFFFF , 0xFFFF , 0xC000 } ;
-        BackColor( whiteColor ) ;
-        RGBForeColor( &tooltipbackground ) ;
-
-        PaintRect( &m_rect ) ;
-        ForeColor(blackColor ) ;
-        FrameRect( &m_rect ) ;
-        SetThemeTextColor(kThemeTextColorNotification,wxDisplayDepth(),true) ;
-        ::MoveTo( m_rect.left + kTipBorder , m_rect.top + fontInfo.ascent + kTipBorder);
-
-        i = 0 ;
-        laststop = 0 ;
-        height = 0 ;
-
-        while ( i < length )
-        {
-            if ( text[i] == 13 || text[i] == 10)
-            {
-                ::DrawText( text , laststop , i - laststop ) ;
-                height += lineh ;
-                ::MoveTo( m_rect.left + kTipBorder , m_rect.top + fontInfo.ascent + kTipBorder + height );
-                laststop = i+1 ;
-            }
-
-            i++ ;
-        }
-
-        ::DrawText( text , laststop , i - laststop ) ;
-        ::TextMode( srcOr ) ;
-#endif
     }
 }
 
@@ -396,33 +273,18 @@ void wxToolTip::NotifyWindowDelete( WXHWND win )
 void wxMacToolTip::Clear()
 {
     m_mark++ ;
-
+#if wxUSE_TIMER 
     if ( m_timer )
     {
         delete m_timer ;
         m_timer = NULL ;
     }
-
+#endif // wxUSE_TIMER
     if ( !m_shown )
         return ;
 
-#if TARGET_CARBON
     HMHideTag() ;
     m_helpTextRef.Release() ;
-#else
-    if ( m_window == s_ToolTipWindowRef && m_backpict )
-    {
-        wxMacPortStateHelper help( (GrafPtr)GetWindowPort( m_window ) ) ;
-
-        m_shown = false ;
-
-        BackColor( whiteColor ) ;
-        ForeColor( blackColor ) ;
-        DrawPicture( m_backpict, &m_rect );
-        KillPicture( m_backpict );
-        m_backpict = NULL ;
-    }
-#endif
 }
 
-#endif
+#endif // wxUSE_TOOLTIPS