Replace the yields with updating the dirty portions of the window in
idle time. Also remove the double buffering of the header window so the DrawHeaderButton will work on wxGTK. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -568,6 +568,8 @@ public:
|
||||
// implementation helpers
|
||||
void SendDeleteEvent(wxTreeListItem *itemBeingDeleted);
|
||||
|
||||
void DoDirtyProcessing();
|
||||
|
||||
void DrawBorder(const wxTreeItemId& item);
|
||||
void DrawLine(const wxTreeItemId& item, bool below);
|
||||
|
||||
@@ -1197,22 +1199,18 @@ void wxTreeListHeaderWindow::OnEraseBackground( wxEraseEvent& event )
|
||||
void wxTreeListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
||||
{
|
||||
#ifdef __WXGTK__
|
||||
wxClientDC real_dc( this );
|
||||
wxClientDC dc( this );
|
||||
#else
|
||||
wxPaintDC real_dc( this );
|
||||
wxPaintDC dc( this );
|
||||
#endif
|
||||
|
||||
AdjustDC( real_dc );
|
||||
AdjustDC( dc );
|
||||
|
||||
// width and height of the entire header window
|
||||
int w, h;
|
||||
GetClientSize( &w, &h );
|
||||
m_owner->CalcUnscrolledPosition(w, 0, &w, NULL);
|
||||
|
||||
// Setup double buffering to eliminate the flicker
|
||||
wxMemoryDC dc;
|
||||
wxBitmap buffer(w, h);
|
||||
dc.SelectObject(buffer);
|
||||
dc.SetBackground(wxBrush(GetBackgroundColour()));
|
||||
dc.Clear();
|
||||
|
||||
@@ -1304,10 +1302,6 @@ void wxTreeListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
||||
this, dc, wxRect(x, HEADER_OFFSET_Y, more_w, h-2),
|
||||
m_parent->IsEnabled() ? 0 : wxCONTROL_DISABLED);
|
||||
}
|
||||
|
||||
// Finish up by drawing the buffer to the real dc
|
||||
dc.SelectObject(wxNullBitmap);
|
||||
real_dc.DrawBitmap(buffer, 0, 0, false);
|
||||
}
|
||||
|
||||
void wxTreeListHeaderWindow::DrawCurrent()
|
||||
@@ -3016,7 +3010,8 @@ void wxTreeListMainWindow::ScrollTo(const wxTreeItemId &item)
|
||||
// We have to call this here because the label in
|
||||
// question might just have been added and no screen
|
||||
// update taken place.
|
||||
if (m_dirty) wxYieldIfNeeded();
|
||||
if (m_dirty)
|
||||
DoDirtyProcessing();
|
||||
|
||||
wxTreeListItem *gitem = (wxTreeListItem*) item.m_pItem;
|
||||
|
||||
@@ -4076,7 +4071,8 @@ void wxTreeListMainWindow::Edit( const wxTreeItemId& item )
|
||||
// We have to call this here because the label in
|
||||
// question might just have been added and no screen
|
||||
// update taken place.
|
||||
if (m_dirty) wxYieldIfNeeded();
|
||||
if (m_dirty)
|
||||
DoDirtyProcessing();
|
||||
|
||||
wxString s = m_currentEdit->GetText(/*ALB*/m_main_column);
|
||||
int x = m_currentEdit->GetX() + m_imgWidth2;
|
||||
@@ -4263,7 +4259,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event )
|
||||
// highlight the current drop target if any
|
||||
DrawDropEffect(m_dropTarget);
|
||||
|
||||
wxYieldIfNeeded();
|
||||
DoDirtyProcessing();
|
||||
}
|
||||
}
|
||||
else if ( (event.LeftUp() || event.RightUp()) && m_isDragging )
|
||||
@@ -4294,7 +4290,7 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event )
|
||||
|
||||
SetCursor(m_oldCursor);
|
||||
|
||||
wxYieldIfNeeded();
|
||||
DoDirtyProcessing();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4397,6 +4393,11 @@ void wxTreeListMainWindow::OnMouse( wxMouseEvent &event )
|
||||
}
|
||||
|
||||
void wxTreeListMainWindow::OnIdle( wxIdleEvent &WXUNUSED(event) )
|
||||
{
|
||||
DoDirtyProcessing();
|
||||
}
|
||||
|
||||
void wxTreeListMainWindow::DoDirtyProcessing()
|
||||
{
|
||||
/* after all changes have been done to the tree control,
|
||||
* we actually redraw the tree when everything is over */
|
||||
|
Reference in New Issue
Block a user