void wxMacToolTip::Draw() { if ( m_label.empty() ) return ; if ( m_window == s_ToolTipWindowRef ) { m_shown = true ; HMHelpContentRec tag ; tag.version = kMacHelpVersion; 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 ; tag.content[kHMMinimumContentIndex].u.tagCFString = m_helpTextRef ; tag.content[kHMMaximumContentIndex].contentType = kHMCFStringContent ; tag.content[kHMMaximumContentIndex].u.tagCFString = m_helpTextRef ; tag.tagSide = kHMDefaultSide; HMDisplayTag( &tag ); } }
void IGraphicsCarbon::ShowTooltip() { HMHelpContentRec helpTag; helpTag.version = kMacHelpVersion; helpTag.tagSide = kHMInsideTopLeftCorner; HIRect r = CGRectMake(mGraphicsMac->GetMouseX(), mGraphicsMac->GetMouseY() + 23, 1, 1); HIRectConvert(&r, kHICoordSpaceView, mView, kHICoordSpaceScreenPixel, NULL); helpTag.absHotRect.top = (int)r.origin.y; helpTag.absHotRect.left = (int)r.origin.x; helpTag.absHotRect.bottom = helpTag.absHotRect.top + (int)r.size.height; helpTag.absHotRect.right = helpTag.absHotRect.left + (int)r.size.width; helpTag.content[kHMMinimumContentIndex].contentType = kHMCFStringLocalizedContent; CFStringRef str = CFStringCreateWithCString(NULL, mTooltip, kCFStringEncodingUTF8); helpTag.content[kHMMinimumContentIndex].u.tagCFString = str; helpTag.content[kHMMaximumContentIndex].contentType = kHMNoContent; HMDisplayTag(&helpTag); CFRelease(str); mShowingTooltip = true; }
//------------------------------------------------------------------------ void CTooltipSupport::showTooltip () { if (currentView) { CRect r (currentView->getVisibleSize ()); CPoint p; currentView->localToFrame (p); r.offset (p.x, p.y); char* tooltip = getTooltipFromView (currentView); if (tooltip) { state = kForceVisible; #if MAC_COCOA if (frame->getNSView ()) { nsViewSetTooltip (currentView, tooltip); free (tooltip); return; } #endif #if MAC_CARBON CCoord x, y; currentView->getFrame ()->getPosition (x,y); r.offset (x, y); HMHelpContentRec helpContent = {0}; helpContent.version = 0; helpContent.absHotRect.left = r.left; helpContent.absHotRect.right = r.right; helpContent.absHotRect.top = r.top; helpContent.absHotRect.bottom = r.bottom; helpContent.tagSide = kHMDefaultSide; helpContent.content[0].contentType = kHMCFStringContent; helpContent.content[0].u.tagCFString = CFStringCreateWithCString (0, tooltip, kCFStringEncodingUTF8); HMDisplayTag(&helpContent); CFRelease (helpContent.content[0].u.tagCFString); #endif // MAC_CARBON #if WINDOWS UTF8StringHelper tooltipText (tooltip); if (platformObject) { RECT rc; rc.left = (LONG)r.left; rc.top = (LONG)r.top; rc.right = (LONG)r.right; rc.bottom = (LONG)r.bottom; TOOLINFO ti = {0}; ti.cbSize = sizeof(TOOLINFO); ti.hwnd = (HWND)frame->getSystemWindow (); ti.uId = 0; ti.rect = rc; ti.lpszText = (TCHAR*)(const TCHAR*)tooltipText; SendMessage ((HWND)platformObject, TTM_UPDATETIPTEXT, 0, (LPARAM)&ti); SendMessage ((HWND)platformObject, TTM_NEWTOOLRECT, 0, (LPARAM)&ti); SendMessage ((HWND)platformObject, TTM_POPUP, 0, 0); } #endif // WINDOWS free (tooltip); #if DEBUGLOG DebugPrint ("CTooltipSupport::showTooltip (%s)\n", currentView->getClassName ()); #endif } } }
void wxMacToolTip::Draw() { if ( m_label.Length() == 0 ) 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 ) ; m_helpTextRef.Assign( 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 ; } 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, &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 } }