From 34040e3126a6714928377e6f81cc2a9eb476075f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 1 Apr 2004 00:07:32 +0000 Subject: [PATCH] default implementation of Get(Class)DefaultAttributes() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26523 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/control.h | 20 ++++++++- src/msw/control.cpp | 95 +++++++++++++++++++++++++++++++++------- src/msw/window.cpp | 2 - 3 files changed, 97 insertions(+), 20 deletions(-) diff --git a/include/wx/msw/control.h b/include/wx/msw/control.h index 2549f9b989..0856025577 100644 --- a/include/wx/msw/control.h +++ b/include/wx/msw/control.h @@ -22,7 +22,8 @@ class WXDLLEXPORT wxControl : public wxControlBase { public: - wxControl(); + wxControl() { } + wxControl(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, @@ -43,9 +44,18 @@ public: // Simulates an event virtual void Command(wxCommandEvent& event) { ProcessCommand(event); } + // implementation from now on // -------------------------- + virtual wxVisualAttributes GetDefaultAttributes() const + { + return GetClassDefaultAttributes(GetWindowVariant()); + } + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + // Calls the callback and appropriate event handlers bool ProcessCommand(wxCommandEvent& event); @@ -105,6 +115,14 @@ protected: // default style for the control include WS_TABSTOP if it AcceptsFocus() virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; + // this is a helper for the derived class GetClassDefaultAttributes() + // implementation: it returns the right colours for the classes which + // contain something else (e.g. wxListBox, wxTextCtrl, ...) instead of + // being simple controls (such as wxButton, wxCheckBox, ...) + static wxVisualAttributes + GetCompositeControlsDefaultAttributes(wxWindowVariant variant); + + // for controls like radiobuttons which are really composite this array // holds the ids (not HWNDs!) of the sub controls wxArrayLong m_subControls; diff --git a/src/msw/control.cpp b/src/msw/control.cpp index df2d8b1109..9b38d3d935 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -9,6 +9,14 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "control.h" #endif @@ -27,6 +35,7 @@ #include "wx/app.h" #include "wx/dcclient.h" #include "wx/log.h" + #include "wx/settings.h" #endif #include "wx/control.h" @@ -37,22 +46,32 @@ #include #endif +// ---------------------------------------------------------------------------- +// wxWin macros +// ---------------------------------------------------------------------------- + IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow) BEGIN_EVENT_TABLE(wxControl, wxWindow) EVT_ERASE_BACKGROUND(wxControl::OnEraseBackground) END_EVENT_TABLE() -// Item members -wxControl::wxControl() -{ -} +// ============================================================================ +// wxControl implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxControl ctor/dtor +// ---------------------------------------------------------------------------- wxControl::~wxControl() { m_isBeingDeleted = TRUE; } +// ---------------------------------------------------------------------------- +// control window creation +// ---------------------------------------------------------------------------- bool wxControl::Create(wxWindow *parent, wxWindowID id, @@ -147,8 +166,9 @@ bool wxControl::MSWCreateControl(const wxChar *classname, // install wxWindows window proc for this window SubclassWin(m_hWnd); - // controls use the same font and colours as their parent dialog by default + // set up fonts and colours InheritAttributes(); + SetFont(GetDefaultAttributes().font); // set the size now if no initial size specified if ( w <= 0 || h <= 0 ) @@ -159,6 +179,10 @@ bool wxControl::MSWCreateControl(const wxChar *classname, return TRUE; } +// ---------------------------------------------------------------------------- +// various accessors +// ---------------------------------------------------------------------------- + wxBorder wxControl::GetDefaultBorder() const { // we want to automatically give controls a sunken style (confusingly, @@ -167,11 +191,57 @@ wxBorder wxControl::GetDefaultBorder() const return wxBORDER_SUNKEN; } +WXDWORD wxControl::MSWGetStyle(long style, WXDWORD *exstyle) const +{ + long msStyle = wxWindow::MSWGetStyle(style, exstyle); + + if ( AcceptsFocus() ) + { + msStyle |= WS_TABSTOP; + } + + return msStyle; +} + wxSize wxControl::DoGetBestSize() const { return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT); } +/* static */ wxVisualAttributes +wxControl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) +{ + wxVisualAttributes attrs; + + // old school (i.e. not "common") controls use the standard dialog font + // by default + attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + + // most, or at least many, of the controls use the same colours as the + // buttons -- others will have to override this (and possibly simply call + // GetCompositeControlsDefaultAttributes() from their versions) + attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT); + attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); + + return attrs; +} + +// another version for the "composite", i.e. non simple controls +/* static */ wxVisualAttributes +wxControl::GetCompositeControlsDefaultAttributes(wxWindowVariant variant) +{ + wxVisualAttributes attrs; + attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + + return attrs; +} + +// ---------------------------------------------------------------------------- +// message handling +// ---------------------------------------------------------------------------- + bool wxControl::ProcessCommand(wxCommandEvent& event) { return GetEventHandler()->ProcessEvent(event); @@ -283,22 +353,13 @@ WXHBRUSH wxControl::OnCtlColor(WXHDC pDC, WXHWND WXUNUSED(pWnd), WXUINT WXUNUSED return (WXHBRUSH)brush->GetResourceHandle(); } -WXDWORD wxControl::MSWGetStyle(long style, WXDWORD *exstyle) const -{ - long msStyle = wxWindow::MSWGetStyle(style, exstyle); - - if ( AcceptsFocus() ) - { - msStyle |= WS_TABSTOP; - } - - return msStyle; -} - // --------------------------------------------------------------------------- // global functions // --------------------------------------------------------------------------- +// this is used in radiobox.cpp and slider95.cpp and should be removed as soon +// as it is not needed there any more! +// // Call this repeatedly for several wnds to find the overall size // of the widget. // Call it initially with -1 for all values in rect. diff --git a/src/msw/window.cpp b/src/msw/window.cpp index ab71a46b95..fc14d47191 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -3137,8 +3137,6 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass, SubclassWin(m_hWnd); - SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); - return true; } -- 2.45.2