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}
|
\section{\class{wxArtProvider}}\label{wxartprovider}
|
||||||
|
|
||||||
wxArtProvider class is used to customize the look of wxWidgets application.
|
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
|
When wxWidgets needs 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
|
dialog), it does not use a hard-coded resource but asks wxArtProvider for it
|
||||||
instead. This way the users can plug in own wxArtProvider class and easily
|
instead. This way users can plug in their own wxArtProvider class and easily
|
||||||
replace standard art with his/her own version. It is easy thing to do: all
|
replace standard art with their own version. All
|
||||||
that is needed is to derive a class from wxArtProvider, override it's
|
that is needed is to derive a class from wxArtProvider, override its
|
||||||
\helpref{CreateBitmap}{wxartprovidercreatebitmap} method and register the
|
\helpref{CreateBitmap}{wxartprovidercreatebitmap} method and register the
|
||||||
provider with
|
provider with
|
||||||
\helpref{wxArtProvider::PushProvider}{wxartproviderpushprovider}:
|
\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
|
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
|
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
|
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
|
the radio items risks to not work correctly. Finally note that radio items
|
||||||
are only supported under Windows and GTK+ currently.
|
are not supported under Motif.
|
||||||
|
|
||||||
\wxheading{Allocation strategy}
|
\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\_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\_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\_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}
|
\end{twocollist}
|
||||||
|
|
||||||
@@ -39,6 +40,38 @@ See also \helpref{window styles overview}{windowstyles}.
|
|||||||
|
|
||||||
\input noteevt.inc
|
\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}
|
\wxheading{See also}
|
||||||
|
|
||||||
\helpref{wxNotebookEvent}{wxnotebookevent}, \helpref{wxImageList}{wximagelist},\rtfsp
|
\helpref{wxNotebookEvent}{wxnotebookevent}, \helpref{wxImageList}{wximagelist},\rtfsp
|
||||||
@@ -228,6 +261,13 @@ the platform and so\rtfsp
|
|||||||
\helpref{wxNotebookEvent::GetSelection}{wxnotebookeventgetselection} should be
|
\helpref{wxNotebookEvent::GetSelection}{wxnotebookeventgetselection} should be
|
||||||
used instead in this case.
|
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}
|
\membersection{wxNotebook::HitTest}\label{wxnotebookhittest}
|
||||||
|
|
||||||
|
@@ -1471,6 +1471,7 @@ enum wxBorder
|
|||||||
#define wxNB_RIGHT 0x0040
|
#define wxNB_RIGHT 0x0040
|
||||||
#define wxNB_BOTTOM 0x0080
|
#define wxNB_BOTTOM 0x0080
|
||||||
#define wxNB_MULTILINE 0x0100
|
#define wxNB_MULTILINE 0x0100
|
||||||
|
#define wxNB_NOPAGETHEME 0x0200
|
||||||
#define wxNB_DEFAULT wxNB_TOP
|
#define wxNB_DEFAULT wxNB_TOP
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -167,6 +167,8 @@ public:
|
|||||||
virtual bool DoPhase(int nPhase);
|
virtual bool DoPhase(int nPhase);
|
||||||
#endif // wxUSE_CONSTRAINTS
|
#endif // wxUSE_CONSTRAINTS
|
||||||
|
|
||||||
|
// Attempts to get colour for UX theme page background
|
||||||
|
wxColour GetThemeBackgroundColour() const;
|
||||||
|
|
||||||
// implementation only
|
// implementation only
|
||||||
// -------------------
|
// -------------------
|
||||||
|
@@ -91,6 +91,9 @@ public:
|
|||||||
// implement some base class functions
|
// implement some base class functions
|
||||||
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
|
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:
|
protected:
|
||||||
DECLARE_NO_COPY_CLASS(wxNotebookBase)
|
DECLARE_NO_COPY_CLASS(wxNotebookBase)
|
||||||
};
|
};
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
#include "wx/textctrl.h"
|
#include "wx/textctrl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "wx/sysopt.h"
|
||||||
#include "wx/bookctrl.h"
|
#include "wx/bookctrl.h"
|
||||||
#include "wx/sizer.h"
|
#include "wx/sizer.h"
|
||||||
#include "wx/colordlg.h"
|
#include "wx/colordlg.h"
|
||||||
@@ -220,7 +221,7 @@ bool WidgetsApp::OnInit()
|
|||||||
{
|
{
|
||||||
if ( !wxApp::OnInit() )
|
if ( !wxApp::OnInit() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// the reason for having these ifdef's is that I often run two copies of
|
// 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
|
// this sample side by side and it is useful to see which one is which
|
||||||
wxString title;
|
wxString title;
|
||||||
@@ -288,11 +289,15 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
|
|||||||
|
|
||||||
wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
|
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
|
// 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,
|
m_book = new wxBookCtrl(m_panel, wxID_ANY, wxDefaultPosition,
|
||||||
wxDefaultSize, wxNO_FULL_REPAINT_ON_RESIZE|wxCLIP_CHILDREN|wxBC_DEFAULT);
|
wxDefaultSize, style);
|
||||||
InitBook();
|
InitBook();
|
||||||
|
|
||||||
#ifndef __SMARTPHONE__
|
#ifndef __SMARTPHONE__
|
||||||
@@ -377,6 +382,11 @@ void WidgetsFrame::InitBook()
|
|||||||
false, // don't select
|
false, // don't select
|
||||||
n // image id
|
n // image id
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
wxColour colour = m_book->MSWGetBgColourForChild(pages[n]);
|
||||||
|
pages[n]->SetBackgroundColour(colour);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include "wx/control.h"
|
#include "wx/control.h"
|
||||||
#include "wx/notebook.h"
|
#include "wx/notebook.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
|
#include "wx/sysopt.h"
|
||||||
|
|
||||||
#include "wx/msw/private.h"
|
#include "wx/msw/private.h"
|
||||||
|
|
||||||
@@ -681,6 +682,17 @@ bool wxNotebook::InsertPage(size_t nPage,
|
|||||||
SetSelection(selNew);
|
SetSelection(selNew);
|
||||||
|
|
||||||
InvalidateBestSize();
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -993,6 +1005,53 @@ wxColour wxNotebook::MSWGetBgColourForChild(wxWindow *win)
|
|||||||
|
|
||||||
#endif // wxUSE_UXTHEME
|
#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
|
// wxNotebook base class virtuals
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user