// Created: 13.11.97
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#include "wx/dcmemory.h"
#include "wx/menu.h"
#include "wx/utils.h"
+ #include "wx/module.h"
#endif
#include "wx/settings.h"
#if wxUSE_OWNER_DRAWN
+class wxMSWSystemMenuFontModule : public wxModule
+{
+public:
+
+ virtual bool OnInit()
+ {
+ ms_systemMenuFont = new wxFont;
+
+#if defined(__WXMSW__) && defined(__WIN32__) && defined(SM_CXMENUCHECK)
+ NONCLIENTMETRICS nm;
+ nm.cbSize = sizeof(NONCLIENTMETRICS);
+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS,0,&nm,0);
+
+ ms_systemMenuButtonWidth = nm.iMenuHeight;
+ ms_systemMenuHeight = nm.iMenuHeight;
+
+ // create menu font
+ wxNativeFontInfo info;
+ memcpy(&info.lf, &nm.lfMenuFont, sizeof(LOGFONT));
+ ms_systemMenuFont->Create(info);
+#endif
+
+ return true;
+ }
+
+ virtual void OnExit()
+ {
+ delete ms_systemMenuFont;
+ ms_systemMenuFont = NULL;
+ }
+
+ static wxFont* ms_systemMenuFont;
+ static int ms_systemMenuButtonWidth; // windows clean install default
+ static int ms_systemMenuHeight; // windows clean install default
+private:
+ DECLARE_DYNAMIC_CLASS(wxMSWSystemMenuFontModule)
+};
+
+// these static variables are by the wxMSWSystemMenuFontModule object
+// and reflect the system settings returned by the Win32 API's
+// SystemParametersInfo() call.
+
+wxFont* wxMSWSystemMenuFontModule::ms_systemMenuFont = NULL;
+int wxMSWSystemMenuFontModule::ms_systemMenuButtonWidth = 18; // windows clean install default
+int wxMSWSystemMenuFontModule::ms_systemMenuHeight = 18; // windows clean install default
+
+IMPLEMENT_DYNAMIC_CLASS(wxMSWSystemMenuFontModule, wxModule)
// ============================================================================
// implementation of wxOwnerDrawn class
// ctor
// ----
wxOwnerDrawn::wxOwnerDrawn(const wxString& str,
- bool bCheckable, bool WXUNUSED(bMenuItem))
+ bool bCheckable, bool bMenuItem)
: m_strName(str)
{
-#if defined(__WXMSW__) && defined(__WIN32__) && defined(SM_CXMENUCHECK)
// get the default menu height and font from the system
NONCLIENTMETRICS nm;
nm.cbSize = sizeof (NONCLIENTMETRICS);
// menu icons and checkmarks
if (ms_nDefaultMarginWidth == 0)
{
- ms_nDefaultMarginWidth = nm.iMenuWidth;
- ms_nLastMarginWidth = nm.iMenuWidth;
+ ms_nDefaultMarginWidth = wxMSWSystemMenuFontModule::ms_systemMenuButtonWidth;
+ ms_nLastMarginWidth = wxMSWSystemMenuFontModule::ms_systemMenuButtonWidth;
}
- wxNativeFontInfo info;
- memcpy(&info.lf, &nm.lfMenuFont, sizeof(LOGFONT));
- m_font.Create(info);
-#else
- // windows clean install default
- m_nMinHeight = 18;
-
- if (ms_nDefaultMarginWidth == 0)
+ if (wxMSWSystemMenuFontModule::ms_systemMenuFont->Ok() && bMenuItem)
{
- ms_nDefaultMarginWidth = 18;
- ms_nLastMarginWidth = 18;
+ m_font = *wxMSWSystemMenuFontModule::ms_systemMenuFont;
+ }
+ else
+ {
+ m_font = *wxNORMAL_FONT;
}
- if (wxNORMAL_FONT)
- m_font = *wxNORMAL_FONT;
-#endif
m_bCheckable = bCheckable;
m_bOwnerDrawn = FALSE;
m_nHeight = 0;
m_nMarginWidth = ms_nLastMarginWidth;
+ m_nMinHeight = wxMSWSystemMenuFontModule::ms_systemMenuHeight;
}
// get drawn embossed? How can we tell DrawState that we don't want the
// embossing?
-#if defined(__WIN32__) && !defined(__SC__) && !defined(__TWIN32__)
+#if defined(__WIN32__) && !defined(__SYMANTEC__) && !defined(__TWIN32__)
#define O_DRAW_NATIVE_API // comments below explain why I use it
#endif