Three more attempts to get metal look.

- Added a few flags for inheriting background.
     - Added wxWindow param to wxR::DrawBackground()
     - Added wxR::DrawButtonSurface()
     - Removed wxR::DrawBackground() from wxR::DrawButtonBorder()
     - Adde DrawMetal to Metal theme
  Fixed minor bug in wxGTK scrollbar.
  Changed code in wxX11 wxTLW so that startup flicker no
    longer occurs in wxFrame.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15136 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-04-14 14:42:43 +00:00
parent aaae829664
commit 193e19cfdf
23 changed files with 142 additions and 89 deletions

View File

@@ -81,6 +81,10 @@ public:
virtual void InitDialog(); virtual void InitDialog();
#ifdef __WXUNIV__
virtual bool ProvidesBackground() { return TRUE; }
#endif
WX_DECLARE_CONTROL_CONTAINER(); WX_DECLARE_CONTROL_CONTAINER();
protected: protected:

View File

@@ -109,6 +109,8 @@ protected:
long numArg = -1, long numArg = -1,
const wxString& strArg = wxEmptyString); const wxString& strArg = wxEmptyString);
virtual wxSize DoGetBestClientSize() const; virtual wxSize DoGetBestClientSize() const;
virtual bool DoDrawBackground(wxDC& dc);
virtual void DoDraw(wxControlRenderer *renderer); virtual void DoDraw(wxControlRenderer *renderer);
virtual bool CanBeHighlighted() const { return TRUE; } virtual bool CanBeHighlighted() const { return TRUE; }

View File

@@ -101,6 +101,8 @@ public:
// overridden base class virtuals // overridden base class virtuals
virtual bool IsPressed() const { return m_isPressed; } virtual bool IsPressed() const { return m_isPressed; }
virtual bool HasTransparentBackground() { return TRUE; }
protected: protected:
virtual bool PerformAction(const wxControlAction& action, virtual bool PerformAction(const wxControlAction& action,
long numArg = -1, long numArg = -1,

View File

@@ -69,7 +69,16 @@ public:
virtual void DrawBackground(wxDC& dc, virtual void DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags) = 0; int flags,
wxWindow *window = NULL ) = 0;
// draw the button surface
virtual void DrawButtonSurface(wxDC& dc,
const wxColour& col,
const wxRect& rect,
int flags )
{ DrawBackground( dc, col, rect, flags ); }
// draw the label inside the given rectangle with the specified alignment // draw the label inside the given rectangle with the specified alignment
// and optionally emphasize the character with the given index // and optionally emphasize the character with the given index
@@ -497,8 +506,9 @@ public:
virtual void DrawBackground(wxDC& dc, virtual void DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags) int flags,
{ m_renderer->DrawBackground(dc, col, rect, flags); } wxWindow *window = NULL )
{ m_renderer->DrawBackground(dc, col, rect, flags, window ); }
virtual void DrawLabel(wxDC& dc, virtual void DrawLabel(wxDC& dc,
const wxString& label, const wxString& label,
const wxRect& rect, const wxRect& rect,

View File

@@ -63,6 +63,8 @@ public:
wxIcon GetIcon() const; wxIcon GetIcon() const;
virtual bool HasTransparentBackground() { return TRUE; }
private: private:
virtual void DoDraw(wxControlRenderer *renderer); virtual void DoDraw(wxControlRenderer *renderer);

View File

@@ -51,6 +51,8 @@ public:
// take account of this // take account of this
virtual wxPoint GetBoxAreaOrigin() const; virtual wxPoint GetBoxAreaOrigin() const;
virtual bool HasTransparentBackground() { return TRUE; }
protected: protected:
// draw the control // draw the control
virtual void DoDraw(wxControlRenderer *renderer); virtual void DoDraw(wxControlRenderer *renderer);

View File

@@ -55,6 +55,8 @@ public:
virtual void SetLabel(const wxString& label); virtual void SetLabel(const wxString& label);
virtual bool HasTransparentBackground() { return TRUE; }
protected: protected:
// calculate the optimal size for the label // calculate the optimal size for the label
virtual wxSize DoGetBestClientSize() const; virtual wxSize DoGetBestClientSize() const;

View File

@@ -143,6 +143,8 @@ public:
virtual int GetMinWidth() const; virtual int GetMinWidth() const;
virtual int GetMinHeight() const; virtual int GetMinHeight() const;
virtual bool ProvidesBackground() { return TRUE; }
protected: protected:
// handle titlebar button click event // handle titlebar button click event
virtual void ClickTitleBarButton(long button); virtual void ClickTitleBarButton(long button);

View File

@@ -171,6 +171,16 @@ public:
// control (e.g. a button, checkbox, ...) // control (e.g. a button, checkbox, ...)
virtual bool IsContainerWindow() const { return FALSE; } virtual bool IsContainerWindow() const { return FALSE; }
// returns TRUE if the control has "transparent" areas such
// as a wxStaticText and wxCheckBox and the background should
// be adapted from a parent window
virtual bool HasTransparentBackground() { return FALSE; }
// to be used with function above: transparent windows get
// their background from parents that return TRUE here,
// so this is mostly for wxPanel, wxTopLevelWindow etc.
virtual bool ProvidesBackground() { return FALSE; }
// return TRUE if this control can be highlighted when the mouse is over // return TRUE if this control can be highlighted when the mouse is over
// it (the theme decides itself whether it is really highlighted or not) // it (the theme decides itself whether it is really highlighted or not)
virtual bool CanBeHighlighted() const { return FALSE; } virtual bool CanBeHighlighted() const { return FALSE; }
@@ -201,9 +211,6 @@ public:
// erase part of the control // erase part of the control
virtual void EraseBackground(wxDC& dc, const wxRect& rect); virtual void EraseBackground(wxDC& dc, const wxRect& rect);
// see below
bool HasDialogBackground() { return m_hasDialogBackground; }
// overridden base class methods // overridden base class methods
// ----------------------------- // -----------------------------
@@ -270,10 +277,6 @@ protected:
// the renderer we use // the renderer we use
wxRenderer *m_renderer; wxRenderer *m_renderer;
// background like a dialog (e.g. wxStaticText,
// wxRadioButton), not with a surface (wxButton)
bool m_hasDialogBackground;
// background bitmap info // background bitmap info
wxBitmap m_bitmapBg; wxBitmap m_bitmapBg;
int m_alignBgBitmap; int m_alignBgBitmap;

View File

@@ -114,9 +114,9 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
{ {
wxEventType command = wxEVT_SCROLL_THUMBRELEASE; wxEventType command = wxEVT_SCROLL_THUMBRELEASE;
int value = (int)ceil(win->m_adjust->value); int value = (int)ceil(win->m_adjust->value);
int dir = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL; int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL;
wxScrollEvent event( command, value, dir ); wxScrollEvent event( command, win->GetId(), value, orient );
event.SetEventObject( win ); event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( event ); win->GetEventHandler()->ProcessEvent( event );
} }

View File

@@ -114,9 +114,9 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
{ {
wxEventType command = wxEVT_SCROLL_THUMBRELEASE; wxEventType command = wxEVT_SCROLL_THUMBRELEASE;
int value = (int)ceil(win->m_adjust->value); int value = (int)ceil(win->m_adjust->value);
int dir = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL; int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL;
wxScrollEvent event( command, value, dir ); wxScrollEvent event( command, win->GetId(), value, orient );
event.SetEventObject( win ); event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( event ); win->GetEventHandler()->ProcessEvent( event );
} }

View File

@@ -39,6 +39,7 @@
#include "wx/univ/renderer.h" #include "wx/univ/renderer.h"
#include "wx/univ/inphand.h" #include "wx/univ/inphand.h"
#include "wx/univ/theme.h" #include "wx/univ/theme.h"
#include "wx/univ/colschem.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// constants // constants
@@ -162,6 +163,30 @@ void wxButton::DoDraw(wxControlRenderer *renderer)
renderer->DrawLabel(m_bitmap, m_marginBmpX, m_marginBmpY); renderer->DrawLabel(m_bitmap, m_marginBmpX, m_marginBmpY);
} }
bool wxButton::DoDrawBackground(wxDC& dc)
{
wxRect rect;
wxSize size = GetSize();
rect.width = size.x;
rect.height = size.y;
if ( GetBackgroundBitmap().Ok() )
{
// get the bitmap and the flags
int alignment;
wxStretch stretch;
wxBitmap bmp = GetBackgroundBitmap(&alignment, &stretch);
wxControlRenderer::DrawBitmap(dc, bmp, rect, alignment, stretch);
}
else
{
m_renderer->DrawButtonSurface(dc, wxTHEME_BG_COLOUR(this),
rect, GetStateFlags());
}
return TRUE;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// input processing // input processing
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -70,8 +70,6 @@ bool wxCheckBox::Create(wxWindow *parent,
if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE; return FALSE;
m_hasDialogBackground = TRUE;
SetLabel(label); SetLabel(label);
SetBestSize(size); SetBestSize(size);

View File

@@ -468,7 +468,8 @@ void wxControlRenderer::DrawButtonBorder()
m_renderer->DrawButtonBorder(m_dc, m_rect, flags, &m_rect); m_renderer->DrawButtonBorder(m_dc, m_rect, flags, &m_rect);
m_renderer->DrawBackground(m_dc, wxTHEME_BG_COLOUR(m_window), m_rect, flags); // Why do this here?
// m_renderer->DrawButtonSurface(m_dc, wxTHEME_BG_COLOUR(m_window), m_rect, flags );
} }
void wxControlRenderer::DrawBitmap(const wxBitmap& bitmap) void wxControlRenderer::DrawBitmap(const wxBitmap& bitmap)

View File

@@ -60,8 +60,6 @@ bool wxStaticBitmap::Create(wxWindow *parent,
if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE; return FALSE;
m_hasDialogBackground = TRUE;
// set bitmap first // set bitmap first
SetBitmap(label); SetBitmap(label);

View File

@@ -58,8 +58,6 @@ bool wxStaticBox::Create(wxWindow *parent,
if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE; return FALSE;
m_hasDialogBackground = TRUE;
SetLabel(label); SetLabel(label);
return TRUE; return TRUE;

View File

@@ -59,8 +59,6 @@ bool wxStaticText::Create(wxWindow *parent,
if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE; return FALSE;
m_hasDialogBackground = TRUE;
SetLabel(label); SetLabel(label);
SetBestSize(size); SetBestSize(size);

View File

@@ -77,7 +77,8 @@ public:
virtual void DrawBackground(wxDC& dc, virtual void DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags = 0); int flags = 0,
wxWindow *window = NULL );
virtual void DrawLabel(wxDC& dc, virtual void DrawLabel(wxDC& dc,
const wxString& label, const wxString& label,
const wxRect& rect, const wxRect& rect,
@@ -336,7 +337,8 @@ protected:
// draw the background with any colour, not only the default one(s) // draw the background with any colour, not only the default one(s)
void DoDrawBackground(wxDC& dc, void DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect); const wxRect& rect,
wxWindow *window = NULL);
// DrawBorder() helpers: all of them shift and clip the DC after drawing // DrawBorder() helpers: all of them shift and clip the DC after drawing
// the border // the border
@@ -2280,7 +2282,8 @@ void wxGTKRenderer::GetComboBitmaps(wxBitmap *bmpNormal,
void wxGTKRenderer::DoDrawBackground(wxDC& dc, void wxGTKRenderer::DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect) const wxRect& rect,
wxWindow *window )
{ {
wxBrush brush(col, wxSOLID); wxBrush brush(col, wxSOLID);
dc.SetBrush(brush); dc.SetBrush(brush);
@@ -2291,10 +2294,11 @@ void wxGTKRenderer::DoDrawBackground(wxDC& dc,
void wxGTKRenderer::DrawBackground(wxDC& dc, void wxGTKRenderer::DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags) int flags,
wxWindow *window )
{ {
wxColour colBg = col.Ok() ? col : GetBackgroundColour(flags); wxColour colBg = col.Ok() ? col : GetBackgroundColour(flags);
DoDrawBackground(dc, colBg, rect); DoDrawBackground(dc, colBg, rect, window );
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -143,12 +143,20 @@ public:
// ctor // ctor
wxMetalRenderer(const wxColourScheme *scheme); wxMetalRenderer(const wxColourScheme *scheme);
// Metal gradient
void DrawMetal(wxDC &dc, const wxRect &rect );
// implement the base class pure virtuals // implement the base class pure virtuals
virtual void DrawBackground(wxDC& dc, virtual void DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags = 0); int flags = 0,
wxWindow *window = NULL );
virtual void DrawButtonSurface(wxDC& dc,
const wxColour& col,
const wxRect& rect,
int flags );
virtual void DrawLabel(wxDC& dc, virtual void DrawLabel(wxDC& dc,
const wxString& label, const wxString& label,
const wxRect& rect, const wxRect& rect,
@@ -404,7 +412,8 @@ protected:
// DrawButtonBorder() helper // DrawButtonBorder() helper
void DoDrawBackground(wxDC& dc, void DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect); const wxRect& rect,
wxWindow *window = NULL );
// DrawBorder() helpers: all of them shift and clip the DC after drawing // DrawBorder() helpers: all of them shift and clip the DC after drawing
// the border // the border
@@ -1331,12 +1340,6 @@ wxColour wxMetalColourScheme::GetBackground(wxWindow *win) const
} }
else else
{ {
if ( win->HasDialogBackground() )
{
col = win->GetParent()->GetBackgroundColour();
return col;
}
int flags = win->GetStateFlags(); int flags = win->GetStateFlags();
// the colour set by the user should be used for the normal state // the colour set by the user should be used for the normal state
@@ -3203,40 +3206,53 @@ void wxMetalRenderer::GetComboBitmaps(wxBitmap *bmpNormal,
} }
} }
// ----------------------------------------------------------------------------
// metal gradient
// ----------------------------------------------------------------------------
void wxMetalRenderer::DrawMetal(wxDC &dc, const wxRect &rect )
{
dc.SetPen(*wxTRANSPARENT_PEN);
for (int y = rect.y; y < rect.height+rect.y; y++)
{
int intens = 230 + 80 * (rect.y-y) / rect.height;
dc.SetBrush( wxBrush( wxColour(intens,intens,intens), wxSOLID ) );
dc.DrawRectangle( rect.x, y, rect.width, 1 );
}
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// background // background
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxMetalRenderer::DrawButtonSurface(wxDC& dc,
const wxColour& col,
const wxRect& rect,
int flags )
{
DrawMetal( dc, rect );
}
void wxMetalRenderer::DoDrawBackground(wxDC& dc, void wxMetalRenderer::DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect) const wxRect& rect,
wxWindow *window )
{ {
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
if (col == wxTheme::Get()->GetColourScheme()->Get( wxColourScheme::CONTROL )) wxBrush brush(col, wxSOLID);
{ dc.SetBrush(brush);
for (int y = rect.y; y < rect.height+rect.y; y++) dc.DrawRectangle(rect);
{
int intens = 230 + 80 * (rect.y-y) / rect.height;
dc.SetBrush( wxBrush( wxColour(intens,intens,intens), wxSOLID ) );
dc.DrawRectangle( rect.x, y, rect.width, 1 );
}
}
else
{
wxBrush brush(col, wxSOLID);
dc.SetBrush(brush);
dc.DrawRectangle(rect);
}
} }
void wxMetalRenderer::DrawBackground(wxDC& dc, void wxMetalRenderer::DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags) int flags,
wxWindow *window )
{ {
// just fill it with the given or default bg colour // just fill it with the given or default bg colour
wxColour colBg = col.Ok() ? col : wxSCHEME_COLOUR(m_scheme, CONTROL); wxColour colBg = col.Ok() ? col : wxSCHEME_COLOUR(m_scheme, CONTROL);
DoDrawBackground(dc, colBg, rect); DoDrawBackground(dc, colBg, rect, window);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -3302,7 +3318,7 @@ void wxMetalRenderer::DrawArrowButton(wxDC& dc,
wxArrowStyle arrowStyle) wxArrowStyle arrowStyle)
{ {
wxRect rect = rectAll; wxRect rect = rectAll;
DoDrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL), rect); DrawMetal( dc, rect );
DrawArrowBorder(dc, &rect, arrowStyle == Arrow_Pressed); DrawArrowBorder(dc, &rect, arrowStyle == Arrow_Pressed);
DrawArrow(dc, rect, arrowDir, arrowStyle); DrawArrow(dc, rect, arrowDir, arrowStyle);
} }
@@ -3315,7 +3331,7 @@ void wxMetalRenderer::DrawScrollbarThumb(wxDC& dc,
// we don't use the flags, the thumb never changes appearance // we don't use the flags, the thumb never changes appearance
wxRect rectThumb = rect; wxRect rectThumb = rect;
DrawArrowBorder(dc, &rectThumb); DrawArrowBorder(dc, &rectThumb);
DrawBackground(dc, wxNullColour, rectThumb); DrawMetal( dc, rectThumb );
} }
void wxMetalRenderer::DrawScrollbarShaft(wxDC& dc, void wxMetalRenderer::DrawScrollbarShaft(wxDC& dc,
@@ -3323,10 +3339,7 @@ void wxMetalRenderer::DrawScrollbarShaft(wxDC& dc,
const wxRect& rectBar, const wxRect& rectBar,
int flags) int flags)
{ {
wxColourScheme::StdColour col = flags & wxCONTROL_PRESSED DrawMetal( dc, rectBar );
? wxColourScheme::SCROLLBAR_PRESSED
: wxColourScheme::SCROLLBAR;
DoDrawBackground(dc, m_scheme->Get(col), rectBar);
} }
void wxMetalRenderer::DrawScrollCorner(wxDC& dc, const wxRect& rect) void wxMetalRenderer::DrawScrollCorner(wxDC& dc, const wxRect& rect)

View File

@@ -148,7 +148,8 @@ public:
virtual void DrawBackground(wxDC& dc, virtual void DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags = 0); int flags = 0,
wxWindow *window = NULL);
virtual void DrawLabel(wxDC& dc, virtual void DrawLabel(wxDC& dc,
const wxString& label, const wxString& label,
const wxRect& rect, const wxRect& rect,
@@ -404,7 +405,8 @@ protected:
// DrawButtonBorder() helper // DrawButtonBorder() helper
void DoDrawBackground(wxDC& dc, void DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect); const wxRect& rect,
wxWindow *window = NULL );
// DrawBorder() helpers: all of them shift and clip the DC after drawing // DrawBorder() helpers: all of them shift and clip the DC after drawing
// the border // the border
@@ -3203,7 +3205,8 @@ void wxWin32Renderer::GetComboBitmaps(wxBitmap *bmpNormal,
void wxWin32Renderer::DoDrawBackground(wxDC& dc, void wxWin32Renderer::DoDrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect) const wxRect& rect,
wxWindow *window )
{ {
wxBrush brush(col, wxSOLID); wxBrush brush(col, wxSOLID);
dc.SetBrush(brush); dc.SetBrush(brush);
@@ -3214,11 +3217,12 @@ void wxWin32Renderer::DoDrawBackground(wxDC& dc,
void wxWin32Renderer::DrawBackground(wxDC& dc, void wxWin32Renderer::DrawBackground(wxDC& dc,
const wxColour& col, const wxColour& col,
const wxRect& rect, const wxRect& rect,
int flags) int flags,
wxWindow *window )
{ {
// just fill it with the given or default bg colour // just fill it with the given or default bg colour
wxColour colBg = col.Ok() ? col : wxSCHEME_COLOUR(m_scheme, CONTROL); wxColour colBg = col.Ok() ? col : wxSCHEME_COLOUR(m_scheme, CONTROL);
DoDrawBackground(dc, colBg, rect); DoDrawBackground(dc, colBg, rect, window );
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -111,8 +111,6 @@ void wxWindow::Init()
m_oldSize.x = -1; m_oldSize.x = -1;
m_oldSize.y = -1; m_oldSize.y = -1;
m_hasDialogBackground = FALSE;
} }
bool wxWindow::Create(wxWindow *parent, bool wxWindow::Create(wxWindow *parent,
@@ -304,7 +302,7 @@ bool wxWindow::DoDrawBackground(wxDC& dc)
void wxWindow::EraseBackground(wxDC& dc, const wxRect& rect) void wxWindow::EraseBackground(wxDC& dc, const wxRect& rect)
{ {
// TODO: handle bg bitmaps here! // TODO: handle bg bitmaps here!
m_renderer->DrawBackground(dc, wxTHEME_BG_COLOUR(this), rect, GetStateFlags()); m_renderer->DrawBackground(dc, wxTHEME_BG_COLOUR(this), rect, GetStateFlags());
} }

View File

@@ -924,8 +924,6 @@ bool wxApp::SendIdleEvents(wxWindow* win)
win->GetEventHandler()->ProcessEvent(event); win->GetEventHandler()->ProcessEvent(event);
win->OnInternalIdle();
if (event.MoreRequested()) if (event.MoreRequested())
needMore = TRUE; needMore = TRUE;
@@ -939,6 +937,8 @@ bool wxApp::SendIdleEvents(wxWindow* win)
node = node->Next(); node = node->Next();
} }
win->OnInternalIdle();
return needMore; return needMore;
} }
@@ -1202,7 +1202,7 @@ void wxApp::OnAssert(const wxChar *file, int line, const wxChar *msg)
{ {
// While the GUI isn't working that well, just print out the // While the GUI isn't working that well, just print out the
// message. // message.
#if 0 #if 1
wxAppBase::OnAssert(file, line, msg); wxAppBase::OnAssert(file, line, msg);
#else #else
wxString msg2; wxString msg2;

View File

@@ -264,7 +264,10 @@ void wxTopLevelWindowX11::OnInternalIdle()
{ {
wxWindow::OnInternalIdle(); wxWindow::OnInternalIdle();
if (m_needResizeInIdle) // Do this only after the last idle event so that
// all windows have been updated before a new
// round of size events is sent
if (m_needResizeInIdle && !wxTheApp->Pending())
{ {
wxSizeEvent event( GetClientSize(), GetId() ); wxSizeEvent event( GetClientSize(), GetId() );
event.SetEventObject( this ); event.SetEventObject( this );
@@ -280,31 +283,15 @@ void wxTopLevelWindowX11::OnInternalIdle()
bool wxTopLevelWindowX11::Show(bool show) bool wxTopLevelWindowX11::Show(bool show)
{ {
// Nano-X has to force a size event,
// else there's no initial size.
#if wxUSE_NANOX
if (show) if (show)
#else
if (show && m_needResizeInIdle)
#endif
{ {
wxSizeEvent event(GetSize(), GetId()); wxSizeEvent event(GetSize(), GetId());
event.SetEventObject(this); event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
m_needResizeInIdle = FALSE; m_needResizeInIdle = FALSE;
} }
if (show)
{
// This does the layout _before_ the
// window is shown, else the items are
// drawn first at the wrong positions,
// then at the correct positions.
if (GetAutoLayout())
{
Layout();
}
}
bool ret = wxWindowX11::Show(show); bool ret = wxWindowX11::Show(show);