]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/tooltip.cpp
Warning fix.
[wxWidgets.git] / src / mac / carbon / tooltip.cpp
index 042a6f2c35e3902fd35e127b135ba72d5fe5d0e3..30d4ba508df4b7697c4ecb2d3a5124b293abc1ff 100644 (file)
@@ -1,17 +1,13 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        tooltip.cpp
 // Purpose:     wxToolTip implementation
-// Author:      Robert Roebling
+// Author:      Stefan Csomor
 // Id:          $Id$
-// Copyright:   (c) 1998 Robert Roebling
+// Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-    #pragma implementation "tooltip.h"
-#endif
-
-#include "wx/defs.h"
+#include "wx/wxprec.h"
 
 #if wxUSE_TOOLTIPS
 
@@ -31,41 +27,48 @@ class wxMacToolTipTimer ;
 
 class wxMacToolTip
 {
-    public :
-        wxMacToolTip( ) ;
-        ~wxMacToolTip() ;
-        
-        void            Setup( WindowRef window  , const wxString& text , wxPoint localPosition ) ;
-        long            GetMark() { return m_mark ; }
-        void             Draw() ;
-        void            Clear() ;
-        bool            IsShown() { return m_shown  ; }
-    private :
-        
-        wxString    m_label ;
-        wxPoint m_position ;
-        Rect            m_rect ;
-        WindowRef    m_window ;    
-        PicHandle    m_backpict ;
-        bool        m_shown ;
-        long        m_mark ;
-        wxMacToolTipTimer* m_timer ;
+public :
+    wxMacToolTip() ;
+    ~wxMacToolTip() ;
+    
+    void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ;
+    void Draw() ;
+    void Clear() ;
+
+    long GetMark()
+    { return m_mark ; }
+
+    bool IsShown()
+    { return m_shown ; }
+
+private :
+    wxString    m_label ;
+    wxPoint m_position ;
+    Rect            m_rect ;
+    WindowRef    m_window ;    
+    PicHandle    m_backpict ;
+    bool        m_shown ;
+    long        m_mark ;
+    wxMacToolTipTimer* m_timer ;
+
 #if TARGET_CARBON
-        wxMacCFStringHolder m_helpTextRef ;
+    wxMacCFStringHolder m_helpTextRef ;
 #endif
 } ;
 
 class wxMacToolTipTimer : public wxTimer
 {
 public:
-    wxMacToolTipTimer() {} ;
     wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;
+    wxMacToolTipTimer() {} ;
     virtual ~wxMacToolTipTimer() {} ;
+
     void Notify()
     {
         if ( m_mark == m_tip->GetMark() )
             m_tip->Draw() ;    
     }
+
 protected:
     wxMacToolTip*     m_tip;
     long        m_mark ;
@@ -83,6 +86,7 @@ static WindowRef s_ToolTipWindowRef = NULL ;
 
 IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject)
 
+
 wxToolTip::wxToolTip( const wxString &tip )
 {
     m_text = tip;
@@ -99,13 +103,13 @@ void wxToolTip::SetTip( const wxString &tip )
     
     if ( m_window )
     {
-    /*
+#if 0
     // update it immediately
     wxToolInfo ti(GetHwndOf(m_window));
     ti.lpszText = (wxChar *)m_text.c_str();
     
       (void)SendTooltipMessage(GetToolTipCtrl(), TTM_UPDATETIPTEXT, 0, &ti);
-        */
+#endif
     }
 }
 
@@ -119,6 +123,7 @@ void wxToolTip::Enable( bool flag )
     if ( s_ShowToolTips != flag )
     {
         s_ShowToolTips = flag ;
         if ( s_ShowToolTips )
         {
         }
@@ -154,7 +159,7 @@ void wxToolTip::RelayEvent( wxWindow *win , wxMouseEvent &event )
                 s_ToolTipArea = wxRect2DInt( event.m_x - 2 , event.m_y - 2 , 4 , 4 ) ;
                 s_LastWindowEntered = win ;
                 
-                WindowRef window = MAC_WXHWND( win->MacGetRootWindow() ) ;
+                WindowRef window = MAC_WXHWND( win->MacGetTopLevelWindowRef() ) ;
                 int x = event.m_x ;
                 int y = event.m_y ;
                 wxPoint local( x , y ) ;
@@ -170,6 +175,7 @@ void wxToolTip::RemoveToolTips()
 {
     s_ToolTip.Clear() ;
 }
+
 // --- mac specific
 
 wxMacToolTipTimer::wxMacToolTipTimer( wxMacToolTip *tip , int msec )
@@ -183,31 +189,36 @@ wxMacToolTip::wxMacToolTip()
 {
     m_window = NULL ;
     m_backpict = NULL ;
+    m_timer = NULL ;
     m_mark = 0 ;
     m_shown = false ;
-    m_timer = NULL ;
 }
 
-void wxMacToolTip::Setup( WindowRef win  , const wxString& text , wxPoint localPosition ) 
+void wxMacToolTip::Setup( WindowRef win  , const wxString& text , const wxPoint& localPosition ) 
 {
     m_mark++ ;
+
     Clear() ;
     m_position = localPosition ;
     m_label = text ;
     m_window =win;
     s_ToolTipWindowRef = m_window ;
     m_backpict = NULL ;
+
     if ( m_timer )
         delete m_timer ;
+
     m_timer = new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
 }
 
 wxMacToolTip::~wxMacToolTip() 
 {
-    if ( m_timer ) {
+    if ( m_timer )
+    {
         delete m_timer ;
         m_timer = NULL;
     }
+
     if ( m_backpict ) 
         Clear() ;
 }
@@ -223,17 +234,15 @@ void wxMacToolTip::Draw()
     if ( m_window == s_ToolTipWindowRef )
     {
         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 ) ;
-        GrafPtr port ;
-        GetPort( &port ) ;
-        SetPortWindowPort(m_window) ;
-        LocalToGlobal( (Point *) &tag.absHotRect.top );
-        LocalToGlobal( (Point *) &tag.absHotRect.bottom );
-        SetPort( port );
-        m_helpTextRef = m_label ;
+
+        QDLocalToGlobalRect( GetWindowPort( m_window ) , &tag.absHotRect ) ;
+
+        m_helpTextRef.Assign( m_label , wxFONTENCODING_DEFAULT ) ;
         tag.content[kHMMinimumContentIndex].contentType = kHMCFStringContent ;
         tag.content[kHMMinimumContentIndex].u.tagCFString = m_helpTextRef ;
         tag.content[kHMMaximumContentIndex].contentType = kHMCFStringContent ;
@@ -241,14 +250,14 @@ void wxMacToolTip::Draw()
         tag.tagSide = kHMDefaultSide;
         HMDisplayTag( &tag );
 #else
-        wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
+        wxMacPortStateHelper help( (GrafPtr)GetWindowPort( m_window ) );
         FontFamilyID fontId ;
         Str255 fontName ;
         SInt16 fontSize ;
         Style fontStyle ;
-        GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
+        GetThemeFont( kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
         GetFNum( fontName, &fontId );
-        
+
         TextFont( fontId ) ;
         TextSize( fontSize ) ;
         TextFace( fontStyle ) ;
@@ -256,27 +265,29 @@ void wxMacToolTip::Draw()
         ::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 = wxMacStringToCString( m_label ) ;
+        wxCharBuffer text = m_label.mb_str( wxConvLocal ) ;
 
-        while( i < length )
+        while ( i < length )
         {
-            if( text[i] == 13 || text[i] == 10)
+            if ( text[i] == 13 || text[i] == 10)
             {
                 thiswidth = ::TextWidth( text , laststop , i - laststop ) ;
                 if ( thiswidth > width )
                     width = thiswidth ;
-                
+
                 height += lineh ;
-                laststop = i+1 ;
+                laststop = i + 1 ;
             }
+
             i++ ;
         }
+
         if ( i - laststop > 0 )
         {
             thiswidth = ::TextWidth( text , laststop , i - laststop ) ;
@@ -284,13 +295,14 @@ void wxMacToolTip::Draw()
                 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 )
         {
@@ -312,19 +324,21 @@ void wxMacToolTip::Draw()
             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 ) ;
-        GWorldPtr port ;            
         NewGWorld( &port , wxDisplayDepth() , &m_rect , NULL , NULL , 0 ) ;
-        CGrafPtr    origPort ;
-        GDHandle    origDevice ;
-        
+
         GetGWorld( &origPort , &origDevice ) ;
         SetGWorld( port , NULL ) ;
-        
+
         m_backpict = OpenPicture(&m_rect);
-        
+
         CopyBits(GetPortBitMapForCopyBits(GetWindowPort(m_window)), 
             GetPortBitMapForCopyBits(port), 
             &m_rect, 
@@ -335,11 +349,11 @@ void wxMacToolTip::Draw()
         SetGWorld( origPort , origDevice ) ;
         DisposeGWorld( port ) ;
         PenNormal() ;
-        
+
         RGBColor tooltipbackground = { 0xFFFF , 0xFFFF , 0xC000 } ;
         BackColor( whiteColor ) ;
         RGBForeColor( &tooltipbackground ) ;
-        
+
         PaintRect( &m_rect ) ;
         ForeColor(blackColor ) ;
         FrameRect( &m_rect ) ;
@@ -350,17 +364,19 @@ void wxMacToolTip::Draw()
         laststop = 0 ;
         height = 0 ;
         
-        while( i < length )
+        while ( i < length )
         {
-            if( text[i] == 13 || text[i] == 10)
+            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
@@ -370,35 +386,36 @@ void wxMacToolTip::Draw()
 void wxToolTip::NotifyWindowDelete( WXHWND win ) 
 {
     if ( win == s_ToolTipWindowRef )
-    {
         s_ToolTipWindowRef = NULL ;
-    }
 }
 
 void wxMacToolTip::Clear()
 {
     m_mark++ ;
+
     if ( m_timer )
     {
         delete m_timer ;
         m_timer = NULL ;
     }
+
     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) ) ;
+        wxMacPortStateHelper help( (GrafPtr)GetWindowPort( m_window ) ) ;
 
         m_shown = false ;
 
         BackColor( whiteColor ) ;
-        ForeColor(blackColor ) ;
-        DrawPicture(m_backpict, &m_rect);
-        KillPicture(m_backpict);
+        ForeColor( blackColor ) ;
+        DrawPicture( m_backpict, &m_rect );
+        KillPicture( m_backpict );
         m_backpict = NULL ;
     }
 #endif