# HG changeset patch # User Chris Cannam # Date 1235646125 0 # Node ID 455810e65543dd9b96c626f0f9b3b47e29ea978e # Parent 683c46d7500b4482d5d88bc9bc6ba7e1ef46d9fa * Do a _slightly_ better job of ensuring new panes come up showing the right region of the track (but not quite better enough) diff -r 683c46d7500b -r 455810e65543 view/View.cpp --- a/view/View.cpp Thu Feb 26 10:49:08 2009 +0000 +++ b/view/View.cpp Thu Feb 26 11:02:05 2009 +0000 @@ -677,17 +677,19 @@ m_manager, SLOT(viewZoomLevelChanged(unsigned long, bool))); if (m_followPlay == PlaybackScrollPage) { -// std::cerr << "View::setViewManager: setting centre frame to global centre frame: " << m_manager->getGlobalCentreFrame() << std::endl; + std::cerr << "View::setViewManager: setting centre frame to global centre frame: " << m_manager->getGlobalCentreFrame() << std::endl; setCentreFrame(m_manager->getGlobalCentreFrame(), false); } else if (m_followPlay == PlaybackScrollContinuous) { -// std::cerr << "View::setViewManager: setting centre frame to playback frame: " << m_manager->getPlaybackFrame() << std::endl; + std::cerr << "View::setViewManager: setting centre frame to playback frame: " << m_manager->getPlaybackFrame() << std::endl; setCentreFrame(m_manager->getPlaybackFrame(), false); } else if (m_followPan) { -// std::cerr << "View::setViewManager: setting centre frame to global centre frame: " << m_manager->getGlobalCentreFrame() << std::endl; + std::cerr << "View::setViewManager: (follow pan) setting centre frame to global centre frame: " << m_manager->getGlobalCentreFrame() << std::endl; setCentreFrame(m_manager->getGlobalCentreFrame(), false); } if (m_followZoom) setZoomLevel(m_manager->getGlobalZoom()); + movePlayPointer(getAlignedPlaybackFrame()); + toolModeChanged(); } @@ -927,17 +929,24 @@ f = getAlignedPlaybackFrame(); - if (m_playPointerFrame == f) return; - bool visible = (getXForFrame(m_playPointerFrame) != getXForFrame(f)); + movePlayPointer(f); +} + +void +View::movePlayPointer(unsigned long newFrame) +{ + if (m_playPointerFrame == newFrame) return; + bool visibleChange = + (getXForFrame(m_playPointerFrame) != getXForFrame(newFrame)); size_t oldPlayPointerFrame = m_playPointerFrame; - m_playPointerFrame = f; - if (!visible) return; + m_playPointerFrame = newFrame; + if (!visibleChange) return; switch (m_followPlay) { case PlaybackScrollContinuous: if (QApplication::mouseButtons() == Qt::NoButton) { - setCentreFrame(f, false); + setCentreFrame(m_playPointerFrame, false); } break; @@ -948,7 +957,7 @@ long w = getEndFrame() - getStartFrame(); w -= w/5; - long sf = (f / w) * w - w/8; + long sf = (m_playPointerFrame / w) * w - w/8; if (m_manager && m_manager->isPlaying() && @@ -963,7 +972,7 @@ } #ifdef DEBUG_VIEW_WIDGET_PAINT - std::cerr << "PlaybackScrollPage: f = " << f << ", sf = " << sf << ", start frame " + std::cerr << "PlaybackScrollPage: f = " << m_playPointerFrame << ", sf = " << sf << ", start frame " << getStartFrame() << std::endl; #endif @@ -994,7 +1003,8 @@ } case PlaybackIgnore: - if (long(f) >= getStartFrame() && f < getEndFrame()) { + if (long(m_playPointerFrame) >= getStartFrame() && + m_playPointerFrame < getEndFrame()) { update(); } break; diff -r 683c46d7500b -r 455810e65543 view/View.h --- a/view/View.h Thu Feb 26 10:49:08 2009 +0000 +++ b/view/View.h Thu Feb 26 11:02:05 2009 +0000 @@ -335,6 +335,8 @@ bool setCentreFrame(size_t f, bool doEmit); + void movePlayPointer(unsigned long f); + void checkProgress(void *object); int getProgressBarWidth() const; // if visible