virtual bool ProcessEvent(wxEvent& event);
- void ResetDrawnFlag() { m_hasDrawnWindow = false; }
-
private:
wxScrollHelperBase *m_scrollHelper;
- bool m_hasDrawnWindow;
-
wxDECLARE_NO_COPY_CLASS(wxScrollHelperEvtHandler);
};
{
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
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;
}
}
-void wxScrollHelperBase::ResetDrawnFlag()
-{
- wxCHECK_RET( m_handler, "invalid use of ResetDrawnFlag - no handler?" );
- m_handler->ResetDrawnFlag();
-}
-
void wxScrollHelperBase::DoSetTargetWindow(wxWindow *target)
{
m_targetWindow = target;