Simplify wxEVT_PAINT handling in wxScrollHelperBase.
Just always call the virtual OnDraw() if wxEVT_PAINT wasn't handled. This is much simpler than connecting our own special handler just to set a flag saying whether the event was processed which was very complicated and didn't work anyhow for the statically connected wxEVT_PAINT handlers. See #14757. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72939 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -79,13 +79,9 @@ public:
|
||||
|
||||
virtual bool ProcessEvent(wxEvent& event);
|
||||
|
||||
void ResetDrawnFlag() { m_hasDrawnWindow = false; }
|
||||
|
||||
private:
|
||||
wxScrollHelperBase *m_scrollHelper;
|
||||
|
||||
bool m_hasDrawnWindow;
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxScrollHelperEvtHandler);
|
||||
};
|
||||
|
||||
@@ -186,24 +182,6 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event)
|
||||
{
|
||||
wxEventType evType = event.GetEventType();
|
||||
|
||||
// the explanation of wxEVT_PAINT processing hack: for historic reasons
|
||||
// there are 2 ways to process this event in classes deriving from
|
||||
// wxScrolledWindow. The user code may
|
||||
//
|
||||
// 1. override wxScrolledWindow::OnDraw(dc)
|
||||
// 2. define its own OnPaint() handler
|
||||
//
|
||||
// In addition, in wxUniversal wxWindow defines OnPaint() itself and
|
||||
// always processes the draw event, so we can't just try the window
|
||||
// OnPaint() first and call our HandleOnPaint() if it doesn't process it
|
||||
// (the latter would never be called in wxUniversal).
|
||||
//
|
||||
// So the solution is to have a flag telling us whether the user code drew
|
||||
// anything in the window. We set it to true here but reset it to false in
|
||||
// wxScrolledWindow::OnPaint() handler (which wouldn't be called if the
|
||||
// user code defined OnPaint() in the derived class)
|
||||
m_hasDrawnWindow = true;
|
||||
|
||||
// Pass it on to the real handler: notice that we must not call
|
||||
// ProcessEvent() on this object itself as it wouldn't pass it to the next
|
||||
// handler (i.e. the real window) if we're called from a previous handler
|
||||
@@ -222,22 +200,25 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event)
|
||||
if ( evType == wxEVT_SIZE )
|
||||
{
|
||||
m_scrollHelper->HandleOnSize((wxSizeEvent &)event);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( processed )
|
||||
{
|
||||
// normally, nothing more to do here - except if it was a paint event
|
||||
// which wasn't really processed, then we'll try to call our
|
||||
// OnDraw() below (from HandleOnPaint)
|
||||
if ( m_hasDrawnWindow || event.IsCommandEvent() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if ( processed && event.IsCommandEvent())
|
||||
return true;
|
||||
|
||||
if ( evType == wxEVT_PAINT )
|
||||
// For wxEVT_PAINT the user code can either handle this event as usual or
|
||||
// override virtual OnDraw(), so if the event hasn't been handled we need
|
||||
// to call this virtual function ourselves.
|
||||
if (
|
||||
#ifndef __WXUNIVERSAL__
|
||||
// in wxUniversal "processed" will always be true, because
|
||||
// all windows use the paint event to draw themselves.
|
||||
// In this case we can't use this flag to determine if a custom
|
||||
// paint event handler already drew our window and we just
|
||||
// call OnDraw() anyway.
|
||||
!processed &&
|
||||
#endif // !__WXUNIVERSAL__
|
||||
evType == wxEVT_PAINT )
|
||||
{
|
||||
m_scrollHelper->HandleOnPaint((wxPaintEvent &)event);
|
||||
return true;
|
||||
@@ -462,12 +443,6 @@ void wxScrollHelperBase::DeleteEvtHandler()
|
||||
}
|
||||
}
|
||||
|
||||
void wxScrollHelperBase::ResetDrawnFlag()
|
||||
{
|
||||
wxCHECK_RET( m_handler, "invalid use of ResetDrawnFlag - no handler?" );
|
||||
m_handler->ResetDrawnFlag();
|
||||
}
|
||||
|
||||
void wxScrollHelperBase::DoSetTargetWindow(wxWindow *target)
|
||||
{
|
||||
m_targetWindow = target;
|
||||
|
Reference in New Issue
Block a user