no changes, just some minor cleanup
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59367 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -325,98 +325,98 @@ void wxToolTip::Add(WXHWND hWnd)
|
|||||||
// NMTTDISPINFO struct -- and setting the tooltip here we can have tooltips
|
// NMTTDISPINFO struct -- and setting the tooltip here we can have tooltips
|
||||||
// of any length
|
// of any length
|
||||||
ti.hwnd = hwnd;
|
ti.hwnd = hwnd;
|
||||||
ti.lpszText = (wxChar *)m_text.wx_str(); // const_cast
|
ti.lpszText = const_cast<wxChar *>(m_text.wx_str());
|
||||||
|
|
||||||
if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, &ti) )
|
if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, &ti) )
|
||||||
{
|
{
|
||||||
wxLogDebug(_T("Failed to create the tooltip '%s'"), m_text.c_str());
|
wxLogDebug(_T("Failed to create the tooltip '%s'"), m_text.c_str());
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef TTM_SETMAXTIPWIDTH
|
|
||||||
if ( wxApp::GetComCtl32Version() >= 470 )
|
|
||||||
{
|
|
||||||
// use TTM_SETMAXTIPWIDTH to make tooltip multiline using the
|
|
||||||
// extent of its first line as max value
|
|
||||||
HFONT hfont = (HFONT)
|
|
||||||
SendTooltipMessage(GetToolTipCtrl(), WM_GETFONT, 0);
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef TTM_SETMAXTIPWIDTH
|
||||||
|
if ( wxApp::GetComCtl32Version() >= 470 )
|
||||||
|
{
|
||||||
|
// use TTM_SETMAXTIPWIDTH to make tooltip multiline using the
|
||||||
|
// extent of its first line as max value
|
||||||
|
HFONT hfont = (HFONT)
|
||||||
|
SendTooltipMessage(GetToolTipCtrl(), WM_GETFONT, 0);
|
||||||
|
|
||||||
|
if ( !hfont )
|
||||||
|
{
|
||||||
|
hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
||||||
if ( !hfont )
|
if ( !hfont )
|
||||||
{
|
{
|
||||||
hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
wxLogLastError(wxT("GetStockObject(DEFAULT_GUI_FONT)"));
|
||||||
if ( !hfont )
|
|
||||||
{
|
|
||||||
wxLogLastError(wxT("GetStockObject(DEFAULT_GUI_FONT)"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MemoryHDC hdc;
|
|
||||||
if ( !hdc )
|
|
||||||
{
|
|
||||||
wxLogLastError(wxT("CreateCompatibleDC(NULL)"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !SelectObject(hdc, hfont) )
|
|
||||||
{
|
|
||||||
wxLogLastError(wxT("SelectObject(hfont)"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the width of the widest line
|
|
||||||
int maxWidth = 0;
|
|
||||||
wxStringTokenizer tokenizer(m_text, _T("\n"));
|
|
||||||
while ( tokenizer.HasMoreTokens() )
|
|
||||||
{
|
|
||||||
const wxString token = tokenizer.GetNextToken();
|
|
||||||
|
|
||||||
SIZE sz;
|
|
||||||
if ( !::GetTextExtentPoint32(hdc, token.wx_str(),
|
|
||||||
token.length(), &sz) )
|
|
||||||
{
|
|
||||||
wxLogLastError(wxT("GetTextExtentPoint32"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( sz.cx > maxWidth )
|
|
||||||
maxWidth = sz.cx;
|
|
||||||
}
|
|
||||||
|
|
||||||
// limit size to ms_maxWidth, if set
|
|
||||||
if ( ms_maxWidth == 0 )
|
|
||||||
{
|
|
||||||
// this is more or less arbitrary but seems to work well
|
|
||||||
static const int DEFAULT_MAX_WIDTH = 400;
|
|
||||||
|
|
||||||
ms_maxWidth = wxGetClientDisplayRect().width / 2;
|
|
||||||
|
|
||||||
if ( ms_maxWidth > DEFAULT_MAX_WIDTH )
|
|
||||||
ms_maxWidth = DEFAULT_MAX_WIDTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ms_maxWidth != -1 && maxWidth > ms_maxWidth )
|
|
||||||
maxWidth = ms_maxWidth;
|
|
||||||
|
|
||||||
// only set a new width if it is bigger than the current setting:
|
|
||||||
// otherwise adding a tooltip with shorter line(s) than a previous
|
|
||||||
// one would result in breaking the longer lines unnecessarily as
|
|
||||||
// all our tooltips share the same maximal width
|
|
||||||
if ( maxWidth > SendTooltipMessage(GetToolTipCtrl(),
|
|
||||||
TTM_GETMAXTIPWIDTH, 0) )
|
|
||||||
{
|
|
||||||
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
|
|
||||||
wxUIntToPtr(maxWidth));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#endif // TTM_SETMAXTIPWIDTH
|
|
||||||
{
|
|
||||||
// replace the '\n's with spaces because otherwise they appear as
|
|
||||||
// unprintable characters in the tooltip string
|
|
||||||
m_text.Replace(_T("\n"), _T(" "));
|
|
||||||
ti.lpszText = (wxChar *)m_text.wx_str(); // const_cast
|
|
||||||
|
|
||||||
if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, &ti) )
|
MemoryHDC hdc;
|
||||||
|
if ( !hdc )
|
||||||
|
{
|
||||||
|
wxLogLastError(wxT("CreateCompatibleDC(NULL)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !SelectObject(hdc, hfont) )
|
||||||
|
{
|
||||||
|
wxLogLastError(wxT("SelectObject(hfont)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the width of the widest line
|
||||||
|
int maxWidth = 0;
|
||||||
|
wxStringTokenizer tokenizer(m_text, _T("\n"));
|
||||||
|
while ( tokenizer.HasMoreTokens() )
|
||||||
|
{
|
||||||
|
const wxString token = tokenizer.GetNextToken();
|
||||||
|
|
||||||
|
SIZE sz;
|
||||||
|
if ( !::GetTextExtentPoint32(hdc, token.wx_str(),
|
||||||
|
token.length(), &sz) )
|
||||||
{
|
{
|
||||||
wxLogDebug(_T("Failed to create the tooltip '%s'"), m_text.c_str());
|
wxLogLastError(wxT("GetTextExtentPoint32"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( sz.cx > maxWidth )
|
||||||
|
maxWidth = sz.cx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// limit size to ms_maxWidth, if set
|
||||||
|
if ( ms_maxWidth == 0 )
|
||||||
|
{
|
||||||
|
// this is more or less arbitrary but seems to work well
|
||||||
|
static const int DEFAULT_MAX_WIDTH = 400;
|
||||||
|
|
||||||
|
ms_maxWidth = wxGetClientDisplayRect().width / 2;
|
||||||
|
|
||||||
|
if ( ms_maxWidth > DEFAULT_MAX_WIDTH )
|
||||||
|
ms_maxWidth = DEFAULT_MAX_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ms_maxWidth != -1 && maxWidth > ms_maxWidth )
|
||||||
|
maxWidth = ms_maxWidth;
|
||||||
|
|
||||||
|
// only set a new width if it is bigger than the current setting:
|
||||||
|
// otherwise adding a tooltip with shorter line(s) than a previous
|
||||||
|
// one would result in breaking the longer lines unnecessarily as
|
||||||
|
// all our tooltips share the same maximal width
|
||||||
|
if ( maxWidth > SendTooltipMessage(GetToolTipCtrl(),
|
||||||
|
TTM_GETMAXTIPWIDTH, 0) )
|
||||||
|
{
|
||||||
|
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
|
||||||
|
wxUIntToPtr(maxWidth));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif // TTM_SETMAXTIPWIDTH
|
||||||
|
{
|
||||||
|
// replace the '\n's with spaces because otherwise they appear as
|
||||||
|
// unprintable characters in the tooltip string
|
||||||
|
m_text.Replace(_T("\n"), _T(" "));
|
||||||
|
ti.lpszText = const_cast<wxChar *>(m_text.wx_str());
|
||||||
|
|
||||||
|
if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, &ti) )
|
||||||
|
{
|
||||||
|
wxLogDebug(_T("Failed to create the tooltip '%s'"), m_text.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user