add wxTLW::UseNativeDecorations[ByDefault]() to allow the programmer to control whether windows use native or custom decorations
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41428 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
b13862ee62
commit
b48f51ca74
@ -88,6 +88,10 @@ wxGTK:
|
|||||||
- Automatically use stock items for menu items with standard ids.
|
- Automatically use stock items for menu items with standard ids.
|
||||||
- Setting cursor now works for all controls.
|
- Setting cursor now works for all controls.
|
||||||
|
|
||||||
|
wxUniv:
|
||||||
|
|
||||||
|
- Added wxTLW::UseNativeDecorations() and UseNativeDecorationsByDefault()
|
||||||
|
|
||||||
|
|
||||||
2.7.0
|
2.7.0
|
||||||
-----
|
-----
|
||||||
|
@ -152,6 +152,21 @@ Returns \true if the window is iconized.
|
|||||||
Returns \true if the window is maximized.
|
Returns \true if the window is maximized.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxTopLevelWindow::IsUsingNativeDecorations}{wxtoplevelwindowisusingnativedecorations}
|
||||||
|
|
||||||
|
\constfunc{bool}{IsUsingNativeDecorations}{\void}
|
||||||
|
|
||||||
|
\bftt{This method is specific to wxUniversal port}
|
||||||
|
|
||||||
|
Returns \true if this window is using native decorations, \false if we draw
|
||||||
|
them ourselves.
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{UseNativeDecorations}{wxtoplevelwindowusenativedecorations},\\
|
||||||
|
\helpref{UseNativeDecorationsByDefault}{wxtoplevelwindowusenativedecorationsbydefault}
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxTopLevelWindow::Maximize}\label{wxtoplevelwindowmaximize}
|
\membersection{wxTopLevelWindow::Maximize}\label{wxtoplevelwindowmaximize}
|
||||||
|
|
||||||
\func{void}{Maximize}{\param{bool }{maximize}}
|
\func{void}{Maximize}{\param{bool }{maximize}}
|
||||||
@ -354,3 +369,46 @@ Note that showing a window full screen also actually
|
|||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
\helpref{wxTopLevelWindow::IsFullScreen}{wxtoplevelwindowisfullscreen}
|
\helpref{wxTopLevelWindow::IsFullScreen}{wxtoplevelwindowisfullscreen}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxTopLevelWindow::UseNativeDecorations}\label{wxtoplevelwindowusenativedecorations}
|
||||||
|
|
||||||
|
\func{void}{UseNativeDecorations}{\param{bool }{native = \true}}
|
||||||
|
|
||||||
|
\bftt{This method is specific to wxUniversal port}
|
||||||
|
|
||||||
|
Use native or custom-drawn decorations for this window only. Notice that to
|
||||||
|
have any effect this method must be called before really creating the window,
|
||||||
|
i.e. two step creation must be used:
|
||||||
|
\begin{verbatim}
|
||||||
|
MyFrame *frame = new MyFrame; // use default ctor
|
||||||
|
frame->UseNativeDecorations(false); // change from default "true"
|
||||||
|
frame->Create(parent, title, ...); // really create the frame
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{UseNativeDecorationsByDefault}{wxtoplevelwindowusenativedecorationsbydefault},\\
|
||||||
|
\helpref{IsUsingNativeDecorations}{wxtoplevelwindowisusingnativedecorations}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxTopLevelWindow::UseNativeDecorationsByDefault}\label{wxtoplevelwindowusenativedecorationsbydefault}
|
||||||
|
|
||||||
|
\func{void}{UseNativeDecorationsByDefault}{\param{bool }{native = \true}}
|
||||||
|
|
||||||
|
\bftt{This method is specific to wxUniversal port}
|
||||||
|
|
||||||
|
Top level windows in wxUniversal port can use either system-provided window
|
||||||
|
decorations (i.e. title bar and various icons, buttons and menus in it) or draw
|
||||||
|
the decorations themselves. By default the system decorations are used if they
|
||||||
|
are available, but this method can be called with \arg{native} set to \false to
|
||||||
|
change this for all windows created after this point.
|
||||||
|
|
||||||
|
Also note that if \texttt{WXDECOR} environment variable is set, then custom
|
||||||
|
decorations are used by default and so it may make sense to call this method
|
||||||
|
with default argument if the application can't use custom decorations at all
|
||||||
|
for some reason.
|
||||||
|
|
||||||
|
\wxheading{See also}
|
||||||
|
|
||||||
|
\helpref{UseNativeDecorations}{wxtoplevelwindowusenativedecorations}
|
||||||
|
@ -115,6 +115,18 @@ public:
|
|||||||
long style = wxDEFAULT_FRAME_STYLE,
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
const wxString& name = wxFrameNameStr);
|
const wxString& name = wxFrameNameStr);
|
||||||
|
|
||||||
|
// wxUniv-specific methods: do [not] use native decorations for this (or
|
||||||
|
// all) window(s)
|
||||||
|
//
|
||||||
|
// notice that this has no effect if the system doesn't support any native
|
||||||
|
// decorations anyhow and that by default native decorations are used
|
||||||
|
//
|
||||||
|
// if UseNativeDecorations() is used, it must be called before Create()
|
||||||
|
static UseNativeDecorationsByDefault(bool native = true);
|
||||||
|
void UseNativeDecorations(bool native = true);
|
||||||
|
bool IsUsingNativeDecorations() const;
|
||||||
|
|
||||||
|
|
||||||
// implement base class pure virtuals
|
// implement base class pure virtuals
|
||||||
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
|
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
|
||||||
virtual wxPoint GetClientAreaOrigin() const;
|
virtual wxPoint GetClientAreaOrigin() const;
|
||||||
@ -166,8 +178,11 @@ protected:
|
|||||||
static int ms_drawDecorations;
|
static int ms_drawDecorations;
|
||||||
// true if wxTLW can be iconized
|
// true if wxTLW can be iconized
|
||||||
static int ms_canIconize;
|
static int ms_canIconize;
|
||||||
|
|
||||||
|
// true if we're using native decorations
|
||||||
|
bool m_usingNativeDecorations;
|
||||||
// true for currently active frame
|
// true for currently active frame
|
||||||
bool m_isActive:1;
|
bool m_isActive;
|
||||||
// version of icon for titlebar (16x16)
|
// version of icon for titlebar (16x16)
|
||||||
wxIcon m_titlebarIcon;
|
wxIcon m_titlebarIcon;
|
||||||
// saved window style in fullscreen mdoe
|
// saved window style in fullscreen mdoe
|
||||||
|
@ -80,6 +80,15 @@ int wxTopLevelWindow::ms_canIconize = -1;
|
|||||||
|
|
||||||
void wxTopLevelWindow::Init()
|
void wxTopLevelWindow::Init()
|
||||||
{
|
{
|
||||||
|
// once-only ms_drawDecorations initialization
|
||||||
|
if ( ms_drawDecorations == -1 )
|
||||||
|
{
|
||||||
|
ms_drawDecorations =
|
||||||
|
!wxSystemSettings::HasFeature(wxSYS_CAN_DRAW_FRAME_DECORATIONS) ||
|
||||||
|
wxGetEnv(wxT("WXDECOR"), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_usingNativeDecorations = ms_drawDecorations == 0;
|
||||||
m_isActive = false;
|
m_isActive = false;
|
||||||
m_windowStyle = 0;
|
m_windowStyle = 0;
|
||||||
m_pressedButton = 0;
|
m_pressedButton = 0;
|
||||||
@ -97,21 +106,7 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
|
|||||||
long styleOrig = 0,
|
long styleOrig = 0,
|
||||||
exstyleOrig = 0;
|
exstyleOrig = 0;
|
||||||
|
|
||||||
if ( ms_drawDecorations == -1 )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
|
||||||
ms_drawDecorations =
|
|
||||||
!wxSystemSettings::HasFeature(wxSYS_CAN_DRAW_FRAME_DECORATIONS)
|
|
||||||
|| wxGetEnv(wxT("WXDECOR"), NULL);
|
|
||||||
// FIXME -- wxUniv should provide a way to force non-native decorations!
|
|
||||||
// $WXDECOR is just a hack in absence of better wxUniv solution
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ms_canIconize == -1 )
|
|
||||||
{
|
|
||||||
ms_canIconize = wxSystemSettings::HasFeature(wxSYS_CAN_ICONIZE_FRAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ms_drawDecorations )
|
|
||||||
{
|
{
|
||||||
CreateInputHandler(wxINP_HANDLER_TOPLEVEL);
|
CreateInputHandler(wxINP_HANDLER_TOPLEVEL);
|
||||||
|
|
||||||
@ -120,7 +115,7 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
|
|||||||
style &= ~(wxCAPTION | wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
|
style &= ~(wxCAPTION | wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
|
||||||
wxSYSTEM_MENU | wxRESIZE_BORDER | wxFRAME_TOOL_WINDOW |
|
wxSYSTEM_MENU | wxRESIZE_BORDER | wxFRAME_TOOL_WINDOW |
|
||||||
wxRESIZE_BORDER);
|
wxRESIZE_BORDER);
|
||||||
style |= wxSIMPLE_BORDER;
|
style |= wxBORDER_NONE;
|
||||||
SetExtraStyle(exstyleOrig & ~wxWS_EX_CONTEXTHELP);
|
SetExtraStyle(exstyleOrig & ~wxWS_EX_CONTEXTHELP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +123,7 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
|
|||||||
size, style, name) )
|
size, style, name) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
m_windowStyle = styleOrig;
|
m_windowStyle = styleOrig;
|
||||||
m_exStyle = exstyleOrig;
|
m_exStyle = exstyleOrig;
|
||||||
@ -141,7 +136,7 @@ bool wxTopLevelWindow::ShowFullScreen(bool show, long style)
|
|||||||
{
|
{
|
||||||
if ( show == IsFullScreen() ) return false;
|
if ( show == IsFullScreen() ) return false;
|
||||||
|
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
if ( show )
|
if ( show )
|
||||||
{
|
{
|
||||||
@ -160,12 +155,34 @@ bool wxTopLevelWindow::ShowFullScreen(bool show, long style)
|
|||||||
return wxTopLevelWindowNative::ShowFullScreen(show, style);
|
return wxTopLevelWindowNative::ShowFullScreen(show, style);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ wxTopLevelWindow::UseNativeDecorationsByDefault(bool native)
|
||||||
|
{
|
||||||
|
ms_drawDecorations = !native;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindow::UseNativeDecorations(bool native)
|
||||||
|
{
|
||||||
|
wxASSERT_MSG( !m_windowStyle, _T("must be called before Create()") );
|
||||||
|
|
||||||
|
m_usingNativeDecorations = native;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindow::IsUsingNativeDecorations() const
|
||||||
|
{
|
||||||
|
return m_usingNativeDecorations;
|
||||||
|
}
|
||||||
|
|
||||||
long wxTopLevelWindow::GetDecorationsStyle() const
|
long wxTopLevelWindow::GetDecorationsStyle() const
|
||||||
{
|
{
|
||||||
long style = 0;
|
long style = 0;
|
||||||
|
|
||||||
if ( m_windowStyle & wxCAPTION )
|
if ( m_windowStyle & wxCAPTION )
|
||||||
{
|
{
|
||||||
|
if ( ms_canIconize == -1 )
|
||||||
|
{
|
||||||
|
ms_canIconize = wxSystemSettings::HasFeature(wxSYS_CAN_ICONIZE_FRAME);
|
||||||
|
}
|
||||||
|
|
||||||
style |= wxTOPLEVEL_TITLEBAR | wxTOPLEVEL_BUTTON_CLOSE;
|
style |= wxTOPLEVEL_TITLEBAR | wxTOPLEVEL_BUTTON_CLOSE;
|
||||||
if ( (m_windowStyle & wxMINIMIZE_BOX) && ms_canIconize )
|
if ( (m_windowStyle & wxMINIMIZE_BOX) && ms_canIconize )
|
||||||
style |= wxTOPLEVEL_BUTTON_ICONIZE;
|
style |= wxTOPLEVEL_BUTTON_ICONIZE;
|
||||||
@ -209,7 +226,7 @@ void wxTopLevelWindow::RefreshTitleBar()
|
|||||||
|
|
||||||
wxPoint wxTopLevelWindow::GetClientAreaOrigin() const
|
wxPoint wxTopLevelWindow::GetClientAreaOrigin() const
|
||||||
{
|
{
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
int w, h;
|
int w, h;
|
||||||
wxTopLevelWindowNative::DoGetClientSize(&w, &h);
|
wxTopLevelWindowNative::DoGetClientSize(&w, &h);
|
||||||
@ -227,7 +244,7 @@ wxPoint wxTopLevelWindow::GetClientAreaOrigin() const
|
|||||||
|
|
||||||
void wxTopLevelWindow::DoGetClientSize(int *width, int *height) const
|
void wxTopLevelWindow::DoGetClientSize(int *width, int *height) const
|
||||||
{
|
{
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
int w, h;
|
int w, h;
|
||||||
wxTopLevelWindowNative::DoGetClientSize(&w, &h);
|
wxTopLevelWindowNative::DoGetClientSize(&w, &h);
|
||||||
@ -246,7 +263,7 @@ void wxTopLevelWindow::DoGetClientSize(int *width, int *height) const
|
|||||||
|
|
||||||
void wxTopLevelWindow::DoSetClientSize(int width, int height)
|
void wxTopLevelWindow::DoSetClientSize(int width, int height)
|
||||||
{
|
{
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
wxSize size = m_renderer->GetFrameTotalSize(wxSize(width, height),
|
wxSize size = m_renderer->GetFrameTotalSize(wxSize(width, height),
|
||||||
GetDecorationsStyle());
|
GetDecorationsStyle());
|
||||||
@ -258,9 +275,11 @@ void wxTopLevelWindow::DoSetClientSize(int width, int height)
|
|||||||
|
|
||||||
void wxTopLevelWindow::OnNcPaint(wxNcPaintEvent& event)
|
void wxTopLevelWindow::OnNcPaint(wxNcPaintEvent& event)
|
||||||
{
|
{
|
||||||
if ( !ms_drawDecorations || !m_renderer )
|
if ( m_usingNativeDecorations || !m_renderer )
|
||||||
|
{
|
||||||
event.Skip();
|
event.Skip();
|
||||||
else
|
}
|
||||||
|
else // we're drawing the decorations ourselves
|
||||||
{
|
{
|
||||||
// get the window rect
|
// get the window rect
|
||||||
wxRect rect(GetSize());
|
wxRect rect(GetSize());
|
||||||
@ -285,7 +304,7 @@ long wxTopLevelWindow::HitTest(const wxPoint& pt) const
|
|||||||
|
|
||||||
int wxTopLevelWindow::GetMinWidth() const
|
int wxTopLevelWindow::GetMinWidth() const
|
||||||
{
|
{
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
return wxMax(wxTopLevelWindowNative::GetMinWidth(),
|
return wxMax(wxTopLevelWindowNative::GetMinWidth(),
|
||||||
m_renderer->GetFrameMinSize(GetDecorationsStyle()).x);
|
m_renderer->GetFrameMinSize(GetDecorationsStyle()).x);
|
||||||
@ -296,7 +315,7 @@ int wxTopLevelWindow::GetMinWidth() const
|
|||||||
|
|
||||||
int wxTopLevelWindow::GetMinHeight() const
|
int wxTopLevelWindow::GetMinHeight() const
|
||||||
{
|
{
|
||||||
if ( ms_drawDecorations )
|
if ( !m_usingNativeDecorations )
|
||||||
{
|
{
|
||||||
return wxMax(wxTopLevelWindowNative::GetMinHeight(),
|
return wxMax(wxTopLevelWindowNative::GetMinHeight(),
|
||||||
m_renderer->GetFrameMinSize(GetDecorationsStyle()).y);
|
m_renderer->GetFrameMinSize(GetDecorationsStyle()).y);
|
||||||
@ -313,7 +332,7 @@ void wxTopLevelWindow::SetIcons(const wxIconBundle& icons)
|
|||||||
{
|
{
|
||||||
wxTopLevelWindowNative::SetIcons(icons);
|
wxTopLevelWindowNative::SetIcons(icons);
|
||||||
|
|
||||||
if ( ms_drawDecorations && m_renderer )
|
if ( !m_usingNativeDecorations && m_renderer )
|
||||||
{
|
{
|
||||||
wxSize size = m_renderer->GetFrameIconSize();
|
wxSize size = m_renderer->GetFrameIconSize();
|
||||||
const wxIcon& icon = icons.GetIcon( size );
|
const wxIcon& icon = icons.GetIcon( size );
|
||||||
|
Loading…
Reference in New Issue
Block a user