From: Chris C. <ca...@us...> - 2005-11-30 11:29:49
|
Update of /cvsroot/rosegarden/gui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27087/gui Modified Files: compositionview.cpp compositionview.h Log Message: * Only refresh changed area when the pointer moves Index: compositionview.h =================================================================== RCS file: /cvsroot/rosegarden/gui/compositionview.h,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** compositionview.h 27 Nov 2005 00:26:53 -0000 1.57 --- compositionview.h 30 Nov 2005 11:29:35 -0000 1.58 *************** *** 621,624 **** --- 621,626 ---- int m_lastBufferRefreshX; int m_lastBufferRefreshY; + int m_lastPointerRefreshX; + int m_lastPointerRefreshY; QPixmap m_backgroundPixmap; Index: compositionview.cpp =================================================================== RCS file: /cvsroot/rosegarden/gui/compositionview.cpp,v retrieving revision 1.118 retrieving revision 1.119 diff -C2 -d -r1.118 -r1.119 *** compositionview.cpp 27 Nov 2005 17:15:16 -0000 1.118 --- compositionview.cpp 30 Nov 2005 11:29:35 -0000 1.119 *************** *** 1473,1477 **** m_artifactsDrawBufferNeedsRefresh(true), m_lastBufferRefreshX(0), ! m_lastBufferRefreshY(0) { m_toolBox = new SegmentToolBox(this, doc); --- 1473,1478 ---- m_artifactsDrawBufferNeedsRefresh(true), m_lastBufferRefreshX(0), ! m_lastBufferRefreshY(0), ! m_lastPointerRefreshX(0) { m_toolBox = new SegmentToolBox(this, doc); *************** *** 2582,2612 **** { int oldPos = m_pointerPos; m_pointerPos = pos; slotArtifactsDrawBufferNeedsRefresh(); ! // int deltaW = abs(m_pointerPos - oldPos); ! // QRect updateRect(std::min(m_pointerPos, oldPos) - m_pointerPen.width(), 0, ! // deltaW + m_pointerPen.width() * 2, visibleHeight()); ! ! // if (isAutoScrolling()) { ! // updateRect.moveLeft(-getDeltaScroll()); ! // updateRect.moveRight(getDeltaScroll()); ! // } ! ! // QRect visibleRect = viewport()->rect(); ! // visibleRect.moveLeft(contentsX()); ! // updateRect &= visibleRect; ! // if (updateRect.width() > 0) { // need update ! // // if the update rect is wider than half of the visible width, do a full update ! // if (updateRect.width() < visibleWidth() / 2) ! // updateContents(updateRect); ! // else ! // updateContents(); ! // } ! updateContents(); } --- 2583,2614 ---- { int oldPos = m_pointerPos; + if (oldPos == pos) return; m_pointerPos = pos; slotArtifactsDrawBufferNeedsRefresh(); ! // interesting -- isAutoScrolling() never seems to return true? ! RG_DEBUG << "CompositionView::setPointerPos(" << pos << "), isAutoScrolling " << isAutoScrolling() << ", contentsX " << contentsX() << ", m_lastPointerRefreshX " << m_lastPointerRefreshX << ", contentsHeight " << contentsHeight() << endl; ! if (contentsX() != m_lastPointerRefreshX || ! contentsY() != m_lastPointerRefreshY) { ! m_lastPointerRefreshX = contentsX(); ! m_lastPointerRefreshY = contentsY(); ! // We'll need to shift the whole canvas anyway, so ! updateContents(); ! return; ! } ! int deltaW = abs(m_pointerPos - oldPos); ! QRect updateRect(std::min(m_pointerPos, oldPos) - m_pointerPen.width(), 0, ! deltaW + m_pointerPen.width() * 2, contentsHeight()); ! if (updateRect.width() > 0) { // need update ! // // if the update rect is wider than half of the visible width, do a full update ! if (updateRect.width() < visibleWidth() / 2) ! updateContents(updateRect); ! else ! updateContents(); ! } } |