X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7eb67c0012ec1ce0d6faafac1b2bc0eb37c0e891..9c11ecdbed3845da98e0b492b82d19fd668cffed:/src/mac/tooltip.cpp diff --git a/src/mac/tooltip.cpp b/src/mac/tooltip.cpp index 64ea19f58c..5d072cb098 100644 --- a/src/mac/tooltip.cpp +++ b/src/mac/tooltip.cpp @@ -50,6 +50,9 @@ class wxMacToolTip bool m_shown ; long m_mark ; wxMacToolTipTimer* m_timer ; +#ifdef TARGET_CARBON + CFStringRef m_helpTextRef ; +#endif } ; class wxMacToolTipTimer : public wxTimer @@ -183,6 +186,7 @@ wxMacToolTip::wxMacToolTip() m_mark = 0 ; m_shown = false ; m_timer = NULL ; + m_helpTextRef = NULL ; } void wxMacToolTip::Setup( WindowRef win , wxString text , wxPoint localPosition ) @@ -190,7 +194,10 @@ void wxMacToolTip::Setup( WindowRef win , wxString text , wxPoint localPosition m_mark++ ; Clear() ; m_position = localPosition ; - m_label = wxMacMakeMacStringFromPC( text ) ; + if( wxApp::s_macDefaultEncodingIsPC ) + m_label = wxMacMakeMacStringFromPC( text ) ; + else + m_label = text ; m_window =win; s_ToolTipWindowRef = m_window ; m_backpict = NULL ; @@ -201,10 +208,12 @@ void wxMacToolTip::Setup( WindowRef win , wxString text , wxPoint localPosition wxMacToolTip::~wxMacToolTip() { - if ( m_timer ) + if ( m_timer ) { delete m_timer ; - if ( m_backpict ) - Clear() ; + m_timer = NULL; + } + if ( m_backpict ) + Clear() ; } const short kTipBorder = 2 ; @@ -217,21 +226,39 @@ void wxMacToolTip::Draw() if ( m_window == s_ToolTipWindowRef ) { + m_shown = true ; #if TARGET_CARBON -/* if ( HMDisplayTag != (void*) kUnresolvedCFragSymbolAddress ) { - HMDisplayTag( + 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 ); + if( m_helpTextRef ) + { + CFRelease( m_helpTextRef ) ; + m_helpTextRef = NULL ; + } + m_helpTextRef = wxMacCreateCFString(m_label) ; + 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 -*/ #endif { wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) ); - +#if TARGET_CARBON bool useDrawThemeText = ( DrawThemeTextBox != (void*) kUnresolvedCFragSymbolAddress ) ; - - m_shown = true ; +#endif FontFamilyID fontId ; Str255 fontName ; @@ -280,27 +307,60 @@ void wxMacToolTip::Draw() m_rect.left = m_position.x + kTipOffset; m_rect.top = m_position.y + kTipOffset; m_rect.right = m_rect.left + width + 2 * kTipBorder; +#if TARGET_CARBON if ( useDrawThemeText ) m_rect.right += kTipBorder ; +#endif 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 ; + } 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(GetWindowPort(m_window)), + GetPortBitMapForCopyBits(port), &m_rect, &m_rect, srcCopy, NULL); - - ClosePicture(); - PenNormal() ; + ClosePicture(); + SetGWorld( origPort , origDevice ) ; + DisposeGWorld( port ) ; + PenNormal() ; RGBColor tooltipbackground = { 0xFFFF , 0xFFFF , 0xC000 } ; BackColor( whiteColor ) ; - RGBForeColor( &tooltipbackground ) ; + RGBForeColor( &tooltipbackground ) ; PaintRect( &m_rect ) ; ForeColor(blackColor ) ; @@ -316,6 +376,7 @@ void wxMacToolTip::Draw() { if( text[i] == 13 || text[i] == 10) { +#if TARGET_CARBON if ( useDrawThemeText ) { Rect frame ; @@ -335,6 +396,7 @@ void wxMacToolTip::Draw() height += lineh ; } else +#endif { ::DrawText( text , laststop , i - laststop ) ; height += lineh ; @@ -344,6 +406,7 @@ void wxMacToolTip::Draw() } i++ ; } +#if TARGET_CARBON if ( useDrawThemeText ) { Rect frame ; @@ -362,6 +425,7 @@ void wxMacToolTip::Draw() CFRelease( mString ) ; } else +#endif { ::DrawText( text , laststop , i - laststop ) ; } @@ -388,7 +452,14 @@ void wxMacToolTip::Clear() } if ( !m_shown ) return ; - +#if TARGET_CARBON + HMHideTag() ; + if( m_helpTextRef ) + { + CFRelease( m_helpTextRef ) ; + m_helpTextRef = NULL ; + } +#else if ( m_window == s_ToolTipWindowRef && m_backpict ) { wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ; @@ -401,6 +472,7 @@ void wxMacToolTip::Clear() KillPicture(m_backpict); m_backpict = NULL ; } +#endif } #endif