]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/tooltip.cpp
1. added wxUpdateUIEvent handling to wxMGL
[wxWidgets.git] / src / mac / tooltip.cpp
index ada78751e77358e00532c012bb364d23ed2f0480..6e86ca590cdb5452ad64e5a771f62702977f78fc 100644 (file)
     #pragma implementation "tooltip.h"
 #endif
 
-#include "wx/setup.h"
+#include "wx/defs.h"
 
 #if wxUSE_TOOLTIPS
 
 #include "wx/app.h"
+#include "wx/dc.h"
 #include "wx/window.h"
 #include "wx/tooltip.h"
 #include "wx/timer.h"
 #include "wx/geometry.h"
-#include "wx/mac/aga.h"
 #include "wx/mac/uma.h"
 
 //-----------------------------------------------------------------------------
 // global data
 //-----------------------------------------------------------------------------
 
+class wxMacToolTipTimer ;
+
 class wxMacToolTip
 {
        public :
@@ -47,24 +49,23 @@ class wxMacToolTip
                PicHandle       m_backpict ;
                bool            m_shown ;
                long            m_mark ;
+               wxMacToolTipTimer* m_timer ;
 } ;
 
-class wxMacToolTipTimer : wxTimer
+class wxMacToolTipTimer : public wxTimer
 {
 public:
-       wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;
-
-       void Notify()
-       {
-               if ( m_mark == m_tip->GetMark() )
-                       m_tip->Draw() ;
-
-               delete this;
-       }
-       
+    wxMacToolTipTimer() {} ;
+    wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;
+    virtual ~wxMacToolTipTimer() {} ;
+    void Notify()
+    {
+        if ( m_mark == m_tip->GetMark() )
+            m_tip->Draw() ;    
+    }
 protected:
-       wxMacToolTip*   m_tip;
-       long                    m_mark ;
+    wxMacToolTip*      m_tip;
+    long               m_mark ;
 };
 
 //-----------------------------------------------------------------------------
@@ -147,7 +148,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 = win->GetMacRootWindow() ;
+                               WindowRef window = MAC_WXHWND( win->MacGetRootWindow() ) ;
                                int x = event.m_x ;
                                int y = event.m_y ;
                                wxPoint local( x , y ) ;
@@ -178,22 +179,27 @@ wxMacToolTip::wxMacToolTip()
        m_backpict = NULL ;
        m_mark = 0 ;
        m_shown = false ;
+    m_timer = NULL ;
 }
 
 void wxMacToolTip::Setup( WindowRef window  , wxString text , wxPoint localPosition ) 
 {
        m_mark++ ;
        Clear() ;
-       m_position = localPosition ; 
+       m_position = localPosition ;
        m_label = wxMacMakeMacStringFromPC( text ) ;
        m_window = window ;
        s_ToolTipWindowRef = window ;
        m_backpict = NULL ;
-       new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
+       if ( m_timer )
+           delete m_timer ;
+       m_timer = new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
 }
 
 wxMacToolTip::~wxMacToolTip() 
 {
+    if ( m_timer )
+        delete m_timer ;
        if ( m_backpict ) 
                Clear() ;
 }
@@ -208,99 +214,104 @@ void wxMacToolTip::Draw()
                
        if ( m_window == s_ToolTipWindowRef )
        {
-               #if TARGET_CARBON
-               AGAPortHelper help( GetWindowPort( m_window ) );
-               #else
-               AGAPortHelper help( ( m_window ) );
-               #endif
-               m_shown = true ;
-
-               SetOrigin( 0 , 0 ) ;
-               TextFont( kFontIDGeneva ) ;
-               TextSize( 9 ) ;
-               TextFace( 0 ) ;
-               FontInfo fontInfo;
-               ::GetFontInfo(&fontInfo);
-               short lineh = fontInfo.ascent + fontInfo.descent + fontInfo.leading;
-               short height = 0 ;
-       //      short width = TextWidth( m_label , 0 ,m_label.Length() ) ;
-               
-               int i = 0 ;
-               int length = m_label.Length() ;
-               int width = 0 ;
-               int thiswidth = 0 ;
-               int laststop = 0 ;
-               const char *text = m_label ;
-               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;
-               ClipRect( &m_rect ) ;
-               BackColor( whiteColor ) ;
-               ForeColor(blackColor ) ;
-               m_backpict = OpenPicture(&m_rect);
-
-               CopyBits(GetPortBitMapForCopyBits(GetWindowPort(m_window)), 
-                                  GetPortBitMapForCopyBits(GetWindowPort(m_window)), 
-                                  &m_rect, 
-                                  &m_rect, 
-                                  srcCopy, 
-                                  NULL);
-
-               ClosePicture();
-               RGBColor yellow = { 0xFFFF  , 0xFFFF , (153<<8)+153 } ;
-               RGBBackColor( &yellow ) ;
-               EraseRect( &m_rect ) ;
-               FrameRect( &m_rect ) ;
-               BackColor( whiteColor ) ;
-               ForeColor(blackColor ) ;
-               ::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 ) ;
-               
-       //      DrawText( m_label , 0 , m_label.Length() ) ;
+#if TARGET_CARBON
+/*
+         if ( HMDisplayTag != (void*) kUnresolvedCFragSymbolAddress )
+         {
+           HMDisplayTag( 
+         }
+         else
+*/
+#endif
+         {
+               wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
+               m_shown = true ;
+
+               TextFont( kFontIDGeneva ) ;
+               TextSize( 10 ) ;
+               TextFace( 0 ) ;
+               FontInfo fontInfo;
+               ::GetFontInfo(&fontInfo);
+               short lineh = fontInfo.ascent + fontInfo.descent + fontInfo.leading;
+               short height = 0 ;
+       //      short width = TextWidth( m_label , 0 ,m_label.Length() ) ;
+               
+               int i = 0 ;
+               int length = m_label.Length() ;
+               int width = 0 ;
+               int thiswidth = 0 ;
+               int laststop = 0 ;
+               const char *text = m_label ;
+               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;
+               ClipRect( &m_rect ) ;
+               BackColor( whiteColor ) ;
+               ForeColor(blackColor ) ;
+               m_backpict = OpenPicture(&m_rect);
+
+               CopyBits(GetPortBitMapForCopyBits(GetWindowPort(m_window)), 
+                                  GetPortBitMapForCopyBits(GetWindowPort(m_window)), 
+                                  &m_rect, 
+                                  &m_rect, 
+                                  srcCopy, 
+                                  NULL);
+
+               ClosePicture();
+      PenNormal() ;
+               SetThemeBackground(kThemeBrushNotificationWindowBackground,32,true) ;
+               SetThemeTextColor(kThemeTextColorNotification,32,true) ;
+               EraseRect( &m_rect ) ;
+               FrameRect( &m_rect ) ;
+               ::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 ) ;           
+       //      DrawText( m_label , 0 , m_label.Length() ) ;
+       }
        }
 }
 
-void wxToolTip::NotifyWindowDelete( WindowRef win ) 
+void wxToolTip::NotifyWindowDelete( WXHWND win ) 
 {
        if ( win == s_ToolTipWindowRef )
        {
@@ -311,19 +322,20 @@ void wxToolTip::NotifyWindowDelete( WindowRef win )
 void wxMacToolTip::Clear()
 {
        m_mark++ ;
+       if ( m_timer )
+       {
+           delete m_timer ;
+           m_timer = NULL ;
+       }
        if ( !m_shown )
                return ;
                 
        if ( m_window == s_ToolTipWindowRef && m_backpict )
        {
-               #if TARGET_CARBON
-               AGAPortHelper help( GetWindowPort(m_window) ) ;
-               #else
-               AGAPortHelper help( (m_window) ) ;
-               #endif
+               wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
+
                m_shown = false ;
 
-               SetOrigin( 0 , 0 ) ;
                BackColor( whiteColor ) ;
                ForeColor(blackColor ) ;
                DrawPicture(m_backpict, &m_rect);