]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxBORDER_THEME, wxWindow::GetDefaultBorderForControl(), wxWindow::CanApplyTheme...
authorJulian Smart <julian@anthemion.co.uk>
Tue, 7 Aug 2007 19:22:43 +0000 (19:22 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 7 Aug 2007 19:22:43 +0000 (19:22 +0000)
wxTextCtrl and wxSearchCtrl now get the correct border on wxMSW, and the wxRichTextCtrl sample
also now demonstrates correct borders.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47927 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

30 files changed:
include/wx/bookctrl.h
include/wx/defs.h
include/wx/msw/button.h
include/wx/msw/checkbox.h
include/wx/msw/choice.h
include/wx/msw/datectrl.h
include/wx/msw/gauge95.h
include/wx/msw/listbox.h
include/wx/msw/radiobox.h
include/wx/msw/scrolbar.h
include/wx/msw/slider95.h
include/wx/msw/spinbutt.h
include/wx/msw/statbmp.h
include/wx/msw/statbox.h
include/wx/msw/textctrl.h
include/wx/msw/tglbtn.h
include/wx/msw/toplevel.h
include/wx/msw/treectrl.h
include/wx/msw/window.h
include/wx/richtext/richtextstyles.h
include/wx/vlbox.h
include/wx/window.h
samples/richtext/richtext.cpp
src/generic/srchctlg.cpp
src/generic/vlbox.cpp
src/msw/control.cpp
src/msw/textctrl.cpp
src/msw/window.cpp
src/richtext/richtextctrl.cpp
src/richtext/richtextstyles.cpp

index 181946ae04976796d90c748f4c8a77f2e0f2741c..15dd227715d3cf27ac11c4e4d1867c0af3073728 100644 (file)
@@ -233,6 +233,9 @@ public:
     // we don't want focus for ourselves
     virtual bool AcceptsFocus() const { return false; }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     // flags for DoSetSelection()
     enum
index b19d4d14d7eef42c7c493dd0ecb06fbce1e4d58f..43c15e50f30cf99e4d90e651d70dfa91ee36d10e 100644 (file)
@@ -1406,7 +1406,8 @@ enum wxBorder
     wxBORDER_SIMPLE = 0x02000000,
     wxBORDER_RAISED = 0x04000000,
     wxBORDER_SUNKEN = 0x08000000,
-    wxBORDER_DOUBLE = 0x10000000,
+    wxBORDER_DOUBLE = 0x10000000, /* deprecated */
+    wxBORDER_THEME  = 0x10000000,
 
     /*  a mask to extract border style from the combination of flags */
     wxBORDER_MASK   = 0x1f200000
index 33d8272b2b895d658a7ebb26bcbd43f3d0836d12..f7c34eae629c7faef513873d21b32faa5c8485c0 100644 (file)
@@ -58,6 +58,9 @@ public:
     virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 private:
     void MakeOwnerDrawn();
 
index c61399154eb53f7316f5c0efe7c3cfd24e50982a..c1b17cd5cfa65f4efed9632d00b4a0efa14b0059 100644 (file)
@@ -47,6 +47,9 @@ public:
     virtual bool SetForegroundColour(const wxColour& colour);
     virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
index 3d004d2ab68047ad65e31495cca2b5e90036cb4e..cff06ed33edd9c1c6c617e038e8913e8ed9288a2 100644 (file)
@@ -85,6 +85,9 @@ public:
     virtual bool MSWShouldPreProcessMessage(WXMSG *pMsg);
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     // common part of all ctors
     void Init() { m_lastAcceptedSelection = wxID_NONE; }
index c4078c6f6893edb7f64534a0109e465e8c1684f5..c5d43d93a2009e682cdcd3fd5ed3af9b7621983f 100644 (file)
@@ -57,6 +57,9 @@ public:
 
     virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
index 70390a958444269bf652e811c37adacf88cc9400..d5952426202c1d7a7c8c64c9a8cc0253b9f7efbb 100644 (file)
@@ -58,6 +58,9 @@ public:
 
     WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
index 13daa8a232414bbe8845d6f24319198b90ecb15c..3c48ad4edf94ec4cdf7f9b20c5fe3e42720087ab 100644 (file)
@@ -133,6 +133,9 @@ public:
         return GetCompositeControlsDefaultAttributes(variant);
     }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual void DoSetSelection(int n, bool select);
 
index 45cb608755ecde52ad3d5fe04550593a512d8853..c4e5b280a315fcb8fa47fe88e639e6e16550ae04 100644 (file)
@@ -115,6 +115,9 @@ public:
     // it to behave normally
     virtual bool AcceptsFocus() const { return wxControl::AcceptsFocus(); }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
     void SetLabelFont(const wxFont& WXUNUSED(font)) {}
     void SetButtonFont(const wxFont& font) { SetFont(font); }
 
index b1dc497e115b584a08de8c7e6f1858144fced82d..72073e490f3d4b70a1a5150707e92402e2940ebe 100644 (file)
@@ -58,6 +58,9 @@ public:
 
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
index 70ce173c7124016a3441cc5892d0d1aea1293a05..5702f1824a32f8fe915a8e85eb79085e8d04168d 100644 (file)
@@ -83,6 +83,8 @@ public:
     // we should let background show through the slider (and its labels)
     virtual bool HasTransparentBackground() { return true; }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
 
     void Command(wxCommandEvent& event);
     virtual bool MSWOnScroll(int orientation, WXWORD wParam,
index 56e69f30b816af38f52e90de39c62fdd571142b7..f57277f4ebce3b752abebfae4ae5f7a718d30f9c 100644 (file)
@@ -57,6 +57,9 @@ public:
     // a wxSpinButton can't do anything useful with focus, only wxSpinCtrl can
     virtual bool AcceptsFocus() const { return false; }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
    virtual wxSize DoGetBestSize() const;
 
index 883b52ae3725f51b07a2a06fae7e34002e4bbd25..7086e812dd29735cacb186f1aadbffd44dba4e41 100644 (file)
@@ -54,6 +54,9 @@ public:
 
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxBorder GetDefaultBorder() const;
     virtual wxSize DoGetBestSize() const;
index 34bf7ccc120e0472b461f480a321e93fa93224fe..8d48ba933e3d8dd4446c21d0e8e636b24bae2a00 100644 (file)
@@ -40,6 +40,9 @@ public:
 
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
 
index 8b3c71f4859732767575a6f5a3f9a30b53bbd9ea..09dc91bd0dcc3dfa3a6030108492220fb65791db 100644 (file)
@@ -170,6 +170,9 @@ public:
 
     virtual bool AcceptsFocus() const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const;
+
     // callbacks
     void OnDropFiles(wxDropFilesEvent& event);
     void OnChar(wxKeyEvent& event); // Process 'enter' if required
index a6dc79548637a82bfad6ee25ad87cd20198af8f2..9c3ef03c933d823361d69f71e1826d69dfd2600b 100644 (file)
@@ -48,6 +48,9 @@ public:
     virtual void Command(wxCommandEvent& event);
     virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const;
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     virtual wxSize DoGetBestSize() const;
     virtual wxBorder GetDefaultBorder() const;
index 48e7e512e4cda6450a498440d66e350768f5b410..82379ad36dc429355942422e9292af44262d1229 100644 (file)
@@ -107,6 +107,9 @@ public:
     // window proc for the frames
     WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     // common part of all ctors
     void Init();
index 117a79090c57684873bdb98da984df358b4b941e..cfb43004a0f0801076f6203ece02ad626c927270 100644 (file)
@@ -210,6 +210,9 @@ public:
     void SetState(const wxTreeItemId& node, int state);
     int GetState(const wxTreeItemId& node);
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return false; }
+
 protected:
     // SetImageList helper
     void SetAnyImageList(wxImageList *imageList, int which);
index 0a3600676c9b4708fc3572bc370a11a558dc9e50..2b56566a73b4623e952da2afa3fbfcde3034a3f3 100644 (file)
@@ -433,6 +433,11 @@ public:
     // check if a native double-buffering applies for this window
     virtual bool IsDoubleBuffered() const;
 
+    // this allows you to implement standard control borders without
+    // repeating the code in different classes that are not derived from
+    // wxControl
+    virtual wxBorder GetDefaultBorderForControl() const;
+
     // synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false
     void GenerateMouseLeave();
 
index 96659e7f9d1034785988ce9c17c1339a34dc30d4..d87b5bc3c5172f452b8223e5b810b0b42549b6cc 100644 (file)
@@ -580,12 +580,7 @@ public:
         m_value = -1;
     }
 
-    virtual bool Create( wxWindow* parent )
-    {
-        return wxRichTextStyleListBox::Create(parent, wxID_ANY,
-                                  wxPoint(0,0), wxDefaultSize,
-                                  wxSIMPLE_BORDER);
-    }
+    virtual bool Create( wxWindow* parent );
 
     virtual wxWindow *GetControl() { return this; }
 
index 62c145e4e2a5dc4cbc7528b5d495ac5cbbe38dec..2301f7c651b020ac61de115336a980f598409c2d 100644 (file)
@@ -201,6 +201,8 @@ public:
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 
+       virtual wxBorder GetDefaultBorder() const { return GetDefaultBorderForControl(); }
+
 protected:
     // the derived class must implement this function to actually draw the item
     // with the given index on the provided DC
index 9e3ace3a7d0483705194c745530fd9a74f8575c3..53aad4df97f478fdbced90454f74aae6ade14331 100644 (file)
@@ -1221,6 +1221,9 @@ public:
     // area (normal windows can't, but e.g. menubar or statusbar can):
     virtual bool CanBeOutsideClientArea() const { return false; }
 
+    // returns true if the platform should explicitly apply a theme border
+    virtual bool CanApplyThemeBorder() const { return true; }
+
 protected:
     // event handling specific to wxWindow
     virtual bool TryValidator(wxEvent& event);
@@ -1381,6 +1384,11 @@ protected:
     // specified) border for the window class
     virtual wxBorder GetDefaultBorder() const;
 
+    // this allows you to implement standard control borders without
+    // repeating the code in different classes that are not derived from
+    // wxControl
+    virtual wxBorder GetDefaultBorderForControl() const { return wxWindowBase::GetDefaultBorder(); }
+
     // Get the default size for the new window if no explicit size given. TLWs
     // have their own default size so this is just for non top-level windows.
     static int WidthDefault(int w) { return w == wxDefaultCoord ? 20 : w; }
index e76ed01d8c483a975cea429cc42d47bbf83b4d9a..ec71a3da79b928ab4356dca19aa911d2d47c8782 100644 (file)
@@ -682,13 +682,13 @@ MyFrame::MyFrame(const wxString& title, wxWindowID id, const wxPoint& pos,
 
     toolBar->Realize();
 
-    wxSplitterWindow* splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, GetClientSize(), wxSP_NO_XP_THEME|wxSP_3D|wxSP_LIVE_UPDATE);
+    wxSplitterWindow* splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, GetClientSize(), wxSP_LIVE_UPDATE);
 
     wxFont textFont = wxFont(12, wxROMAN, wxNORMAL, wxNORMAL);
     wxFont boldFont = wxFont(12, wxROMAN, wxNORMAL, wxBOLD);
     wxFont italicFont = wxFont(12, wxROMAN, wxITALIC, wxNORMAL);
 
-    m_richTextCtrl = new wxRichTextCtrl(splitter, ID_RICHTEXT_CTRL, wxEmptyString, wxDefaultPosition, wxSize(200, 200), wxVSCROLL|wxHSCROLL|wxNO_BORDER|wxWANTS_CHARS);
+    m_richTextCtrl = new wxRichTextCtrl(splitter, ID_RICHTEXT_CTRL, wxEmptyString, wxDefaultPosition, wxSize(200, 200), wxVSCROLL|wxHSCROLL|wxWANTS_CHARS);
     wxFont font(12, wxROMAN, wxNORMAL, wxNORMAL);
 
     m_richTextCtrl->SetFont(font);
index 595398310994feaff307e7c20ee079da19844d80..f9ac1a41ddcb4cfefc65bb51ea9b7caa14fbb2fd 100644 (file)
@@ -325,6 +325,12 @@ bool wxSearchCtrl::Create(wxWindow *parent, wxWindowID id,
     style &= ~wxBORDER_MASK;
 #ifdef __WXGTK__
     style |= wxBORDER_SUNKEN;
+#elif defined(__WXMSW__)
+    // Don't set the style explicitly, let GetDefaultBorder() work it out, unless
+    // we will get a sunken border (e.g. on Windows 200) in which case we must
+    // override with a simple border.
+    if (GetDefaultBorder() == wxBORDER_SUNKEN)
+        style |= wxBORDER_SIMPLE;
 #else
     style |= wxBORDER_SIMPLE;
 #endif
index d9d03f063f23418679d86c1dc78600b3eda8d09a..9c9b8d06c87bed6f9429bc1cab8140cc4490c2ed 100644 (file)
@@ -77,6 +77,11 @@ bool wxVListBox::Create(wxWindow *parent,
                         long style,
                         const wxString& name)
 {
+#ifdef __WXMSW__
+       if ((style & wxBORDER_MASK) == wxDEFAULT)
+               style |= wxBORDER_THEME;
+#endif
+
     style |= wxWANTS_CHARS | wxFULL_REPAINT_ON_RESIZE;
     if ( !wxVScrolledWindow::Create(parent, id, pos, size, style, name) )
         return false;
index 99c79bcaa3c0b00d5656068b2042f16d396482fe..2f1ae919e766a43d58a4bc5eb01a9eb1e2b2ca0c 100644 (file)
@@ -228,14 +228,7 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
 
 wxBorder wxControl::GetDefaultBorder() const
 {
-    // we want to automatically give controls a sunken style (confusingly,
-    // it may not really mean sunken at all as we map it to WS_EX_CLIENTEDGE
-    // which is not sunken at all under Windows XP -- rather, just the default)
-#if defined(__POCKETPC__) || defined(__SMARTPHONE__)
-    return wxBORDER_SIMPLE;
-#else
-    return wxBORDER_SUNKEN;
-#endif
+       return GetDefaultBorderForControl();
 }
 
 WXDWORD wxControl::MSWGetStyle(long style, WXDWORD *exstyle) const
index 567a88962093cdb2b649e33097e03e0886585510..974fa7a30d37309c3ef3fe47f7de7f0f0b84b8a4 100644 (file)
@@ -301,11 +301,6 @@ bool wxTextCtrl::Create(wxWindow *parent,
                         const wxValidator& validator,
                         const wxString& name)
 {
-#ifdef __WXWINCE__
-    if ((style & wxBORDER_MASK) == 0)
-        style |= wxBORDER_SIMPLE;
-#endif
-
     // base initialization
     if ( !CreateControl(parent, id, pos, size, style, validator, name) )
         return false;
@@ -316,6 +311,17 @@ bool wxTextCtrl::Create(wxWindow *parent,
     return true;
 }
 
+// returns true if the platform should explicitly apply a theme border
+bool wxTextCtrl::CanApplyThemeBorder() const
+{
+#ifdef __WXWINCE__
+    return false;
+#else
+    // Standard text control already handles theming
+    return ((GetWindowStyle() & (wxTE_RICH|wxTE_RICH2)) != 0);
+#endif
+}
+
 bool wxTextCtrl::MSWCreateText(const wxString& value,
                                const wxPoint& pos,
                                const wxSize& size)
index e3531202d3efeb41adaad7a29c6726cb7a3866e4..e177b1a1208b55d4f719dbdb06d65135a026c768 100644 (file)
 #endif
 #endif
 
+#if wxUSE_UXTHEME
+    #include "wx/msw/uxtheme.h"
+    #define EP_EDITTEXT         1
+    #define ETS_NORMAL          1
+    #define ETS_HOT             2
+    #define ETS_SELECTED        3
+    #define ETS_DISABLED        4
+    #define ETS_FOCUSED         5
+    #define ETS_READONLY        6
+    #define ETS_ASSIST          7
+#endif
+
 #if defined(TME_LEAVE) && defined(WM_MOUSELEAVE) && wxUSE_DYNLIB_CLASS
     #define HAVE_TRACKMOUSEEVENT
 #endif // everything needed for TrackMouseEvent()
@@ -1274,6 +1286,27 @@ void wxWindowMSW::MSWUpdateStyle(long flagsOld, long exflagsOld)
     }
 }
 
+wxBorder wxWindowMSW::GetDefaultBorderForControl() const
+{
+    // we want to automatically give controls a sunken style (confusingly,
+    // it may not really mean sunken at all as we map it to WS_EX_CLIENTEDGE
+    // which is not sunken at all under Windows XP -- rather, just the default)
+
+#if defined(__POCKETPC__) || defined(__SMARTPHONE__)
+    return wxBORDER_SIMPLE;
+#else
+#if wxUSE_UXTHEME
+    if (CanApplyThemeBorder())
+    {
+        wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive();
+        if (theme)
+            return wxBORDER_THEME;
+    }
+#endif
+    return wxBORDER_SUNKEN;
+#endif
+}
+
 WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
 {
     // translate common wxWidgets styles to Windows ones
@@ -1328,6 +1361,7 @@ WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
 
             case wxBORDER_NONE:
             case wxBORDER_SIMPLE:
+            case wxBORDER_THEME:
                 break;
 
             case wxBORDER_STATIC:
@@ -1343,9 +1377,9 @@ WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
                 style &= ~WS_BORDER;
                 break;
 
-            case wxBORDER_DOUBLE:
-                *exstyle |= WS_EX_DLGMODALFRAME;
-                break;
+//            case wxBORDER_DOUBLE:
+//                *exstyle |= WS_EX_DLGMODALFRAME;
+//                break;
         }
 
         // wxUniv doesn't use Windows dialog navigation functions at all
@@ -2542,7 +2576,7 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l
                 }
             }
             break;
-
+#if 0
         case WM_ENTERSIZEMOVE:
             {
                 processed = HandleEnterSizeMove();
@@ -2554,7 +2588,7 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l
                 processed = HandleExitSizeMove();
             }
             break;
-
+#endif
         case WM_SIZING:
             {
                 LPRECT pRect = (LPRECT)lParam;
@@ -3200,6 +3234,94 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l
             break;
 #endif // __WXWINCE__
 
+#if wxUSE_UXTHEME
+        // If we want the default themed border then we need to draw it ourselves
+        case WM_NCCALCSIZE:
+            {
+                wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive();
+                if (theme && GetBorder() == wxBORDER_THEME)
+                {
+                    // first ask the widget to calculate the border size
+                    rc.result = MSWDefWindowProc(message, wParam, lParam);
+                    processed = true;
+
+                    // now alter the client size making room for drawing a themed border
+                    NCCALCSIZE_PARAMS *csparam = NULL;
+                    RECT rect;
+                    if (wParam)
+                    {
+                        csparam = (NCCALCSIZE_PARAMS*)lParam;
+                        rect = csparam->rgrc[0];
+                    }
+                    else
+                    {
+                        rect = *((RECT*)lParam);
+                    }
+                    wxUxThemeHandle hTheme(this, L"EDIT");
+                    RECT rcClient = { 0, 0, 0, 0 };
+                    wxClientDC dc(this);
+
+                    if (theme->GetThemeBackgroundContentRect(
+                            hTheme, GetHdcOf(dc), EP_EDITTEXT, ETS_NORMAL,
+                            &rect, &rcClient) == S_OK)
+                    {
+                        InflateRect(&rcClient, -1, -1);
+                        if (wParam)
+                            csparam->rgrc[0] = rcClient;
+                        else
+                            *((RECT*)lParam) = rcClient;
+                        rc.result = WVR_REDRAW;
+                    }
+                }
+            }
+            break;
+
+        case WM_NCPAINT:
+            {
+                wxUxThemeEngine* theme = wxUxThemeEngine::GetIfActive();
+                if (theme && GetBorder() == wxBORDER_THEME)
+                {
+                    // first ask the widget to paint its non-client area, such as scrollbars, etc.
+                    rc.result = MSWDefWindowProc(message, wParam, lParam);
+                    processed = true;
+
+                    wxUxThemeHandle hTheme(this, L"EDIT");
+                    wxWindowDC dc(this);
+
+                    // Clip the DC so that you only draw on the non-client area
+                    RECT rcBorder;
+                    wxCopyRectToRECT(GetSize(), rcBorder);
+
+                    RECT rcClient;
+                    theme->GetThemeBackgroundContentRect(
+                        hTheme, GetHdcOf(dc), EP_EDITTEXT, ETS_NORMAL, &rcBorder, &rcClient);
+                    InflateRect(&rcClient, -1, -1);
+
+                    ::ExcludeClipRect(GetHdcOf(dc), rcClient.left, rcClient.top,
+                                      rcClient.right, rcClient.bottom);
+
+                    // Make sure the background is in a proper state
+                    if (theme->IsThemeBackgroundPartiallyTransparent(hTheme, EP_EDITTEXT, ETS_NORMAL))
+                    {
+                        theme->DrawThemeParentBackground(GetHwnd(), GetHdcOf(dc), &rcBorder);
+                    }
+
+                    // Draw the border
+                    int nState;
+                    if ( !IsEnabled() )
+                        nState = ETS_DISABLED;
+                    // should we check this?
+                    //else if ( ::GetWindowLong(GetHwnd(), GWL_STYLE) & ES_READONLY)
+                    //    nState = ETS_READONLY;
+                    else
+                        nState = ETS_NORMAL;
+                    theme->DrawThemeBackground(hTheme, GetHdcOf(dc), EP_EDITTEXT, nState, &rcBorder, NULL);
+                }
+            }
+            break;
+
+#endif // wxUSE_UXTHEME
+
         default:
             // try a custom message handler
             const MSWMessageHandlers::const_iterator
index bf06f72f309d7581073f5482dfd17ca1458709ad..b23a95f9495f24eb04ec94717565eb691b325297 100644 (file)
@@ -129,6 +129,14 @@ wxRichTextCtrl::wxRichTextCtrl(wxWindow* parent,
 bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style,
                              const wxValidator& validator, const wxString& name)
 {
+       // Try to make this only necessary in 2.8
+#if 0
+#ifdef __WXMSW__
+       if ((style & wxBORDER_MASK) == wxDEFAULT)
+               style |= wxBORDER_THEME;
+#endif
+#endif
+
     if (!wxTextCtrlBase::Create(parent, id, pos, size,
                                 style|wxFULL_REPAINT_ON_RESIZE,
                                 validator, name))
index 0b8782c75605f29f419fc42a82d7de74241c4556..5fa16bb54e441fa446b1d742b6423af150bba83f 100644 (file)
@@ -822,7 +822,7 @@ bool wxRichTextStyleListCtrl::Create(wxWindow* parent, wxWindowID id, const wxPo
 
     bool showSelector = ((style & wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR) == 0);
 
-    m_styleListBox = new wxRichTextStyleListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, showSelector ? wxSIMPLE_BORDER : wxNO_BORDER);
+    m_styleListBox = new wxRichTextStyleListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, showSelector ? wxBORDER_DEFAULT : wxBORDER_NONE);
 
     wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL);
 
@@ -837,7 +837,7 @@ bool wxRichTextStyleListCtrl::Create(wxWindow* parent, wxWindowID id, const wxPo
         m_styleChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices);
 
         boxSizer->Add(m_styleListBox, 1, wxALL|wxEXPAND, 5);
-        boxSizer->Add(m_styleChoice, 0, wxALL|wxEXPAND, 5);
+        boxSizer->Add(m_styleChoice, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, 5);
     }
     else
     {
@@ -998,6 +998,17 @@ BEGIN_EVENT_TABLE(wxRichTextStyleComboPopup, wxRichTextStyleListBox)
     EVT_LEFT_DOWN(wxRichTextStyleComboPopup::OnMouseClick)
 END_EVENT_TABLE()
 
+bool wxRichTextStyleComboPopup::Create( wxWindow* parent )
+{
+       int borderStyle = GetDefaultBorder();
+       if (borderStyle == wxBORDER_SUNKEN)
+           borderStyle = wxBORDER_SIMPLE;
+
+    return wxRichTextStyleListBox::Create(parent, wxID_ANY,
+                                  wxPoint(0,0), wxDefaultSize,
+                                  borderStyle);
+}
+
 void wxRichTextStyleComboPopup::SetStringValue( const wxString& s )
 {
     m_value = SetStyleSelection(s);