X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/991f71dcc80d5920d38de62fe0b449d5971e102a..6cef0db28018fd2644ee4e38af715872e5242459:/src/mac/carbon/tooltip.cpp?ds=sidebyside diff --git a/src/mac/carbon/tooltip.cpp b/src/mac/carbon/tooltip.cpp index 30d4ba508d..957feb0491 100644 --- a/src/mac/carbon/tooltip.cpp +++ b/src/mac/carbon/tooltip.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: tooltip.cpp +// Name: src/mac/carbon/tooltip.cpp // Purpose: wxToolTip implementation // Author: Stefan Csomor // Id: $Id$ @@ -11,11 +11,15 @@ #if wxUSE_TOOLTIPS -#include "wx/app.h" -#include "wx/dc.h" -#include "wx/window.h" #include "wx/tooltip.h" -#include "wx/timer.h" + +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/window.h" + #include "wx/dc.h" + #include "wx/timer.h" +#endif // WX_PRECOMP + #include "wx/geometry.h" #include "wx/mac/uma.h" @@ -23,39 +27,7 @@ // global data //----------------------------------------------------------------------------- -class wxMacToolTipTimer ; - -class wxMacToolTip -{ -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 ; -#endif -} ; - +#if wxUSE_TIMER class wxMacToolTipTimer : public wxTimer { public: @@ -66,13 +38,14 @@ public: void Notify() { if ( m_mark == m_tip->GetMark() ) - m_tip->Draw() ; + m_tip->Draw() ; } protected: wxMacToolTip* m_tip; long m_mark ; }; +#endif // wxUSE_TIMER //----------------------------------------------------------------------------- // wxToolTip @@ -100,15 +73,15 @@ wxToolTip::~wxToolTip() void wxToolTip::SetTip( const wxString &tip ) { m_text = 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); + + (void)SendTooltipMessage(GetToolTipCtrl(), TTM_UPDATETIPTEXT, 0, &ti); #endif } } @@ -123,7 +96,7 @@ void wxToolTip::Enable( bool flag ) if ( s_ShowToolTips != flag ) { s_ShowToolTips = flag ; - + if ( s_ShowToolTips ) { } @@ -139,6 +112,14 @@ void wxToolTip::SetDelay( long msecs ) s_ToolTipDelay = msecs ; } +void wxToolTip::SetAutoPop( long WXUNUSED(msecs) ) +{ +} + +void wxToolTip::SetReshow( long WXUNUSED(msecs) ) +{ +} + void wxToolTip::RelayEvent( wxWindow *win , wxMouseEvent &event ) { if ( s_ShowToolTips ) @@ -158,7 +139,7 @@ void wxToolTip::RelayEvent( wxWindow *win , wxMouseEvent &event ) s_ToolTip.Clear() ; s_ToolTipArea = wxRect2DInt( event.m_x - 2 , event.m_y - 2 , 4 , 4 ) ; s_LastWindowEntered = win ; - + WindowRef window = MAC_WXHWND( win->MacGetTopLevelWindowRef() ) ; int x = event.m_x ; int y = event.m_y ; @@ -177,24 +158,27 @@ 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 ; } -void wxMacToolTip::Setup( WindowRef win , const wxString& text , const wxPoint& localPosition ) +void wxMacToolTip::Setup( WindowRef win , const wxString& text , const wxPoint& localPosition ) { m_mark++ ; @@ -204,22 +188,24 @@ 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() +wxMacToolTip::~wxMacToolTip() { +#if wxUSE_TIMER if ( m_timer ) { delete m_timer ; m_timer = NULL; } - - if ( m_backpict ) +#endif // wxUSE_TIMER + if ( m_backpict ) Clear() ; } @@ -228,162 +214,31 @@ const short kTipOffset = 5 ; void wxMacToolTip::Draw() { - if ( m_label.Length() == 0 ) + if ( m_label.empty() ) return ; - + 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 ) ; - 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 ) ; + m_helpTextRef = wxCFStringRef( m_label , wxFONTENCODING_DEFAULT ) ; tag.content[kHMMinimumContentIndex].contentType = kHMCFStringContent ; tag.content[kHMMinimumContentIndex].u.tagCFString = m_helpTextRef ; tag.content[kHMMaximumContentIndex].contentType = kHMCFStringContent ; 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 } } -void wxToolTip::NotifyWindowDelete( WXHWND win ) +void wxToolTip::NotifyWindowDelete( WXHWND win ) { if ( win == s_ToolTipWindowRef ) s_ToolTipWindowRef = NULL ; @@ -392,34 +247,17 @@ 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 + HMHideTag() ; } -#endif - +#endif // wxUSE_TOOLTIPS