]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxMSW wxChoice::GetClassDefaultAttributes(), initially used in wxComboCtrl
authorJaakko Salli <jaakko.salli@dnainternet.net>
Mon, 21 Dec 2009 15:20:37 +0000 (15:20 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Mon, 21 Dec 2009 15:20:37 +0000 (15:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62960 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/choice.h
include/wx/msw/combo.h
src/common/combocmn.cpp
src/msw/choice.cpp
src/msw/combo.cpp

index 5ddb312b116df4841750fe50434bb39547663189..c5cf8125bec33d370412ffa1a8c7cce81e023332 100644 (file)
@@ -77,6 +77,14 @@ public:
     virtual wxString GetString(unsigned int n) const;
     virtual void SetString(unsigned int n, const wxString& s);
 
     virtual wxString GetString(unsigned int n) const;
     virtual void SetString(unsigned int n, const wxString& s);
 
+    virtual wxVisualAttributes GetDefaultAttributes() const
+    {
+        return GetClassDefaultAttributes(GetWindowVariant());
+    }
+
+    static wxVisualAttributes
+    GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
+
     // MSW only
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
     // MSW only
     virtual bool MSWCommand(WXUINT param, WXWORD id);
     WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
index 78ef4f59eff6659312a2213c9e99865c11b89507..be85dbcf41ea3e99074de92bf2a7cae2bf8d15cd 100644 (file)
@@ -86,7 +86,6 @@ protected:
     // customization
     virtual void OnResize();
     virtual wxCoord GetNativeTextIndent() const;
     // customization
     virtual void OnResize();
     virtual wxCoord GetNativeTextIndent() const;
-    virtual void OnThemeChange();
 
     // event handlers
     void OnPaintEvent( wxPaintEvent& event );
 
     // event handlers
     void OnPaintEvent( wxPaintEvent& event );
index fe54d240198f846dd46cb82871ab658864f528ac..71b6075086ea69f2b9a609f27acb0d3f1de94852 100644 (file)
@@ -913,13 +913,27 @@ void wxComboCtrlBase::OnThemeChange()
     // be the correct colour and themed brush.  Instead we'll use
     // wxSYS_COLOUR_WINDOW in the EVT_PAINT handler as needed.
 #ifndef __WXMAC__
     // be the correct colour and themed brush.  Instead we'll use
     // wxSYS_COLOUR_WINDOW in the EVT_PAINT handler as needed.
 #ifndef __WXMAC__
+  #if defined(__WXMSW__) || defined(__WXGTK__)
+    wxVisualAttributes vattrs = wxComboBox::GetClassDefaultAttributes();
+  #else
+    wxVisualAttributes vattrs;
+    vattrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+    vattrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+  #endif
+
+    // Only change the colours if application has not specified
+    // custom ones.
+    if ( !m_hasFgCol )
+    {
+        SetOwnForegroundColour(vattrs.colFg);
+        m_hasFgCol = false;
+    }
     if ( !m_hasBgCol )
     {
     if ( !m_hasBgCol )
     {
-        wxColour bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
-        SetOwnBackgroundColour(bgCol);
+        SetOwnBackgroundColour(vattrs.colBg);
         m_hasBgCol = false;
     }
         m_hasBgCol = false;
     }
-#endif
+#endif // !__WXMAC__
 }
 
 wxComboCtrlBase::~wxComboCtrlBase()
 }
 
 wxComboCtrlBase::~wxComboCtrlBase()
index b6cdd7b9c9f12bce6e71e94067b9e444f7e2ccda..85eb015339bebc37e66624eaae8b95b288a6660c 100644 (file)
@@ -30,6 +30,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
 
 #ifndef WX_PRECOMP
     #include "wx/utils.h"
+    #include "wx/app.h"
     #include "wx/log.h"
     #include "wx/brush.h"
     #include "wx/settings.h"
     #include "wx/log.h"
     #include "wx/brush.h"
     #include "wx/settings.h"
@@ -220,6 +221,37 @@ WXDWORD wxChoice::MSWGetStyle(long style, WXDWORD *exstyle) const
     return msStyle;
 }
 
     return msStyle;
 }
 
+#ifndef EP_EDITTEXT
+    #define EP_EDITTEXT         1
+    #define ETS_NORMAL          1
+#endif
+
+wxVisualAttributes
+wxChoice::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
+{
+    // it is important to return valid values for all attributes from here,
+    // GetXXX() below rely on this
+    wxVisualAttributes attrs;
+
+    // FIXME: Use better dummy window?
+    wxWindow* wnd = wxTheApp->GetTopWindow();
+
+    attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+
+    // there doesn't seem to be any way to get the text colour using themes
+    // API: TMT_TEXTCOLOR doesn't work neither for EDIT nor COMBOBOX
+    attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+
+    // NB: use EDIT, not COMBOBOX (the latter works in XP but not Vista)
+    attrs.colBg = wnd->MSWGetThemeColour(L"EDIT",
+                                         EP_EDITTEXT, 
+                                         ETS_NORMAL,
+                                         ThemeColourBackground,
+                                         wxSYS_COLOUR_WINDOW);
+
+    return attrs;
+}
+
 wxChoice::~wxChoice()
 {
     Clear();
 wxChoice::~wxChoice()
 {
     Clear();
index 733e068430e5855adc385d7d4e706726a29cabe7..3cbae3b3358d5d0536cdbed23f2b0b1d55e2e353 100644 (file)
@@ -221,31 +221,6 @@ wxComboCtrl::~wxComboCtrl()
 {
 }
 
 {
 }
 
-void wxComboCtrl::OnThemeChange()
-{
-    // there doesn't seem to be any way to get the text colour using themes
-    // API: TMT_TEXTCOLOR doesn't work neither for EDIT nor COMBOBOX
-    if ( !m_hasFgCol )
-    {
-        wxColour fgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
-        SetForegroundColour(fgCol);
-        m_hasFgCol = false;
-    }
-
-    // NB: use EDIT, not COMBOBOX (the latter works in XP but not Vista)
-    wxColour bgCol = MSWGetThemeColour(L"EDIT",
-                                       EP_EDITTEXT,
-                                       ETS_NORMAL,
-                                       ThemeColourBackground,
-                                       wxSYS_COLOUR_WINDOW);
-
-    if ( !m_hasBgCol )
-    {
-        SetBackgroundColour(bgCol);
-        m_hasBgCol = false;
-    }
-}
-
 void wxComboCtrl::OnResize()
 {
     //
 void wxComboCtrl::OnResize()
 {
     //