Can suppress themed notebook page with wxNB_NOPAGETHEME or
setting system option msw.notebook.themed-background to 0 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31807 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -6,11 +6,11 @@
|
||||
\section{\class{wxArtProvider}}\label{wxartprovider}
|
||||
|
||||
wxArtProvider class is used to customize the look of wxWidgets application.
|
||||
When wxWidgets need to display an icon or a bitmap (e.g. in the standard file
|
||||
dialog), it does not use hard-coded resource but asks wxArtProvider for it
|
||||
instead. This way the users can plug in own wxArtProvider class and easily
|
||||
replace standard art with his/her own version. It is easy thing to do: all
|
||||
that is needed is to derive a class from wxArtProvider, override it's
|
||||
When wxWidgets needs to display an icon or a bitmap (e.g. in the standard file
|
||||
dialog), it does not use a hard-coded resource but asks wxArtProvider for it
|
||||
instead. This way users can plug in their own wxArtProvider class and easily
|
||||
replace standard art with their own version. All
|
||||
that is needed is to derive a class from wxArtProvider, override its
|
||||
\helpref{CreateBitmap}{wxartprovidercreatebitmap} method and register the
|
||||
provider with
|
||||
\helpref{wxArtProvider::PushProvider}{wxartproviderpushprovider}:
|
||||
|
@@ -30,8 +30,8 @@ group is formed by a contiguous range of radio items, i.e. it starts at the
|
||||
first item of this kind and ends with the first item of a different kind (or
|
||||
the end of the menu). Notice that because the radio groups are defined in terms
|
||||
of the item positions inserting or removing the items in the menu containing
|
||||
the radio items risks to not work correctly. Finally note that the radio items
|
||||
are only supported under Windows and GTK+ currently.
|
||||
the radio items risks to not work correctly. Finally note that radio items
|
||||
are not supported under Motif.
|
||||
|
||||
\wxheading{Allocation strategy}
|
||||
|
||||
|
@@ -29,6 +29,7 @@ managed by wxNotebook.
|
||||
\twocolitem{\windowstyle{wxNB\_BOTTOM}}{Place tabs under instead of above the notebook pages.}
|
||||
\twocolitem{\windowstyle{wxNB\_FIXEDWIDTH}}{(Windows only) All tabs will have same width.}
|
||||
\twocolitem{\windowstyle{wxNB\_MULTILINE}}{(Windows only) There can be several rows of tabs.}
|
||||
\twocolitem{\windowstyle{wxNB\_NOPAGETHEME}}{(Windows only) Display a solid colour on notebook pages, and not a gradient, which can reduce performance.}
|
||||
|
||||
\end{twocollist}
|
||||
|
||||
@@ -39,6 +40,38 @@ See also \helpref{window styles overview}{windowstyles}.
|
||||
|
||||
\input noteevt.inc
|
||||
|
||||
\wxheading{Page backgrounds}
|
||||
|
||||
On Windows XP, the default theme paints a gradient on the notebook's pages.
|
||||
If you wish to suppress this theme, for aesthetic or performance reasons,
|
||||
there are three ways of doing it. You can use wxNB\_NOPAGETHEME to disable
|
||||
themed drawing for a particular notebook, you can call {\tt wxSystemOptions::SetOption}
|
||||
to disable it for the whole application, or you can disable it for individual
|
||||
pages by using {\tt SetBackgroundColour}.
|
||||
|
||||
To disable themed pages globally:
|
||||
|
||||
\begin{verbatim}
|
||||
wxSystemOptions::SetOption(wxT("msw.notebook.themed-background"), 0);
|
||||
\end{verbatim}
|
||||
|
||||
Set the value to 1 to enable it again.
|
||||
|
||||
To give a single page a solid background that more or less fits in with the
|
||||
overall theme, use:
|
||||
|
||||
\begin{verbatim}
|
||||
wxColour col = notebook->GetThemeBackgroundColour();
|
||||
if (col.Ok())
|
||||
{
|
||||
page->SetBackgroundColour(col);
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
On platforms other than Windows, or if the application is not using Windows
|
||||
themes, {\tt GetThemeBackgroundColour} will return an uninitialised colour object,
|
||||
and the above code will therefore work on all platforms.
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
\helpref{wxNotebookEvent}{wxnotebookevent}, \helpref{wxImageList}{wximagelist},\rtfsp
|
||||
@@ -228,6 +261,13 @@ the platform and so\rtfsp
|
||||
\helpref{wxNotebookEvent::GetSelection}{wxnotebookeventgetselection} should be
|
||||
used instead in this case.
|
||||
|
||||
\membersection{wxNotebook::GetThemeBackgroundColour}\label{wxnotebookgetthemebackgroundcolour}
|
||||
|
||||
\constfunc{wxColour}{GetThemeBackgroundColour}{\void}
|
||||
|
||||
If running under Windows and themes are enabled for the application, this function
|
||||
returns a suitable colour for painting the background of a notebook page, and can be passed
|
||||
to {\tt SetBackgroundColour}. Otherwise, an uninitialised colour will be returned.
|
||||
|
||||
\membersection{wxNotebook::HitTest}\label{wxnotebookhittest}
|
||||
|
||||
|
@@ -1471,6 +1471,7 @@ enum wxBorder
|
||||
#define wxNB_RIGHT 0x0040
|
||||
#define wxNB_BOTTOM 0x0080
|
||||
#define wxNB_MULTILINE 0x0100
|
||||
#define wxNB_NOPAGETHEME 0x0200
|
||||
#define wxNB_DEFAULT wxNB_TOP
|
||||
|
||||
/*
|
||||
|
@@ -167,6 +167,8 @@ public:
|
||||
virtual bool DoPhase(int nPhase);
|
||||
#endif // wxUSE_CONSTRAINTS
|
||||
|
||||
// Attempts to get colour for UX theme page background
|
||||
wxColour GetThemeBackgroundColour() const;
|
||||
|
||||
// implementation only
|
||||
// -------------------
|
||||
|
@@ -91,6 +91,9 @@ public:
|
||||
// implement some base class functions
|
||||
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
|
||||
|
||||
// On platforms that support it, get the theme page background colour, else invalid colour
|
||||
virtual wxColour GetThemeBackgroundColour() const { return wxNullColour; }
|
||||
|
||||
protected:
|
||||
DECLARE_NO_COPY_CLASS(wxNotebookBase)
|
||||
};
|
||||
|
@@ -39,6 +39,7 @@
|
||||
#include "wx/textctrl.h"
|
||||
#endif
|
||||
|
||||
#include "wx/sysopt.h"
|
||||
#include "wx/bookctrl.h"
|
||||
#include "wx/sizer.h"
|
||||
#include "wx/colordlg.h"
|
||||
@@ -220,7 +221,7 @@ bool WidgetsApp::OnInit()
|
||||
{
|
||||
if ( !wxApp::OnInit() )
|
||||
return false;
|
||||
|
||||
|
||||
// the reason for having these ifdef's is that I often run two copies of
|
||||
// this sample side by side and it is useful to see which one is which
|
||||
wxString title;
|
||||
@@ -288,11 +289,15 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
|
||||
|
||||
wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
// we have 2 panes: book which pages demonstrating the controls in the
|
||||
// we have 2 panes: book with pages demonstrating the controls in the
|
||||
// upper one and the log window with some buttons in the lower
|
||||
|
||||
int style = wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN|wxBC_DEFAULT;
|
||||
// Uncomment to suppress page theme (draw in solid colour)
|
||||
// style |= wxNB_NOPAGETHEME;
|
||||
|
||||
m_book = new wxBookCtrl(m_panel, wxID_ANY, wxDefaultPosition,
|
||||
wxDefaultSize, wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN|wxBC_DEFAULT);
|
||||
wxDefaultSize, style);
|
||||
InitBook();
|
||||
|
||||
#ifndef __SMARTPHONE__
|
||||
@@ -377,6 +382,11 @@ void WidgetsFrame::InitBook()
|
||||
false, // don't select
|
||||
n // image id
|
||||
);
|
||||
|
||||
/*
|
||||
wxColour colour = m_book->MSWGetBgColourForChild(pages[n]);
|
||||
pages[n]->SetBackgroundColour(colour);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#include "wx/control.h"
|
||||
#include "wx/notebook.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/sysopt.h"
|
||||
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
@@ -681,6 +682,17 @@ bool wxNotebook::InsertPage(size_t nPage,
|
||||
SetSelection(selNew);
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
if (HasFlag(wxNB_NOPAGETHEME) || (wxSystemOptions::HasOption(wxT("msw.notebook.themed-background")) &&
|
||||
wxSystemOptions::GetOptionInt(wxT("msw.notebook.themed-background")) == 0))
|
||||
{
|
||||
wxColour col = GetThemeBackgroundColour();
|
||||
if (col.Ok())
|
||||
{
|
||||
pPage->SetBackgroundColour(col);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -993,6 +1005,53 @@ wxColour wxNotebook::MSWGetBgColourForChild(wxWindow *win)
|
||||
|
||||
#endif // wxUSE_UXTHEME
|
||||
|
||||
// Windows only: attempts to get colour for UX theme page background
|
||||
wxColour wxNotebook::GetThemeBackgroundColour() const
|
||||
{
|
||||
#if wxUSE_UXTHEME
|
||||
if (wxUxThemeEngine::Get())
|
||||
{
|
||||
wxUxThemeHandle hTheme((wxNotebook*) this, L"TAB");
|
||||
if (hTheme)
|
||||
{
|
||||
// This is total guesswork.
|
||||
// See PlatformSDK\Include\Tmschema.h for values
|
||||
COLORREF themeColor;
|
||||
wxUxThemeEngine::Get()->GetThemeColor(
|
||||
hTheme,
|
||||
10 /* TABP_BODY */,
|
||||
1 /* NORMAL */,
|
||||
3821 /* FILLCOLORHINT */,
|
||||
&themeColor);
|
||||
|
||||
/*
|
||||
[DS] Workaround for WindowBlinds:
|
||||
Some themes return a near black theme color using FILLCOLORHINT,
|
||||
this makes notebook pages have an ugly black background and makes
|
||||
text (usually black) unreadable. Retry again with FILLCOLOR.
|
||||
|
||||
This workaround potentially breaks appearance of some themes,
|
||||
but in practice it already fixes some themes.
|
||||
*/
|
||||
if (themeColor == 1)
|
||||
{
|
||||
wxUxThemeEngine::Get()->GetThemeColor(
|
||||
hTheme,
|
||||
10 /* TABP_BODY */,
|
||||
1 /* NORMAL */,
|
||||
3802 /* FILLCOLOR */,
|
||||
&themeColor);
|
||||
}
|
||||
|
||||
wxColour colour(GetRValue(themeColor), GetGValue(themeColor), GetBValue(themeColor));
|
||||
return colour;
|
||||
}
|
||||
}
|
||||
#endif // wxUSE_UXTHEME
|
||||
|
||||
return GetBackgroundColour();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook base class virtuals
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user