Ejemplo n.º 1
0
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 );
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
//------------------------------------------------------------------------
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
		}
	}
}
Ejemplo n.º 4
0
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
    }
}