// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "stattext.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_STATTEXT
+#include "wx/stattext.h"
+
#ifndef WX_PRECOMP
#include "wx/event.h"
#include "wx/app.h"
#include "wx/settings.h"
#endif
-#include "wx/stattext.h"
#include "wx/msw/private.h"
#if wxUSE_EXTENDED_RTTI
else
msStyle |= SS_LEFT;
+ // this style is necessary to receive mouse events
+ msStyle |= SS_NOTIFY;
+
return msStyle;
}
wxSize wxStaticText::DoGetBestSize() const
{
wxClientDC dc(wx_const_cast(wxStaticText *, this));
- dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
+ wxFont font(GetFont());
+ if (!font.Ok())
+ font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+
+ dc.SetFont(font);
wxCoord widthTextMax, heightTextTotal;
- dc.GetMultiLineTextExtent(GetLabel(), &widthTextMax, &heightTextTotal);
+ dc.GetMultiLineTextExtent(::wxStripMenuCodes(GetLabel()),
+ &widthTextMax, &heightTextTotal);
#ifdef __WXWINCE__
if ( widthTextMax )
widthTextMax += 2;
#endif // __WXWINCE__
- return wxSize(widthTextMax, heightTextTotal);
+ // border takes extra space
+ //
+ // TODO: this is probably not wxStaticText-specific and should be moved
+ wxCoord border;
+ switch ( GetBorder() )
+ {
+ case wxBORDER_STATIC:
+ case wxBORDER_SIMPLE:
+ border = 1;
+ break;
+
+ case wxBORDER_SUNKEN:
+ border = 2;
+ break;
+
+ case wxBORDER_RAISED:
+ case wxBORDER_DOUBLE:
+ border = 3;
+ break;
+
+ default:
+ wxFAIL_MSG( _T("unknown border style") );
+ // fall through
+
+ case wxBORDER_NONE:
+ border = 0;
+ }
+
+ widthTextMax += 2*border;
+ heightTextTotal += 2*border;
+
+ wxSize best(widthTextMax, heightTextTotal);
+ CacheBestSize(best);
+ return best;
}
void wxStaticText::DoSetSize(int x, int y, int w, int h, int sizeFlags)