void WaveView::setPos(int idx, unsigned val, bool adjustScrollbar) { val = MusEGlobal::tempomap.tick2frame(val); if (pos[idx] == val) return; int opos = mapx(pos[idx]); int npos = mapx(val); if (adjustScrollbar && idx == 0) { switch (MusEGlobal::song->follow()) { case MusECore::Song::NO: break; case MusECore::Song::JUMP: if (npos >= width()) { int ppos = val - xorg - rmapxDev(width()/4); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(pos[idx]); npos = mapx(val); } else if (npos < 0) { int ppos = val - xorg - rmapxDev(width()*3/4); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(pos[idx]); npos = mapx(val); } break; case MusECore::Song::CONTINUOUS: if (npos > (width()*5)/8) { int ppos = pos[idx] - xorg - rmapxDev(width()*5/8); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(pos[idx]); npos = mapx(val); } else if (npos < (width()*3)/8) { int ppos = pos[idx] - xorg - rmapxDev(width()*3/8); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(pos[idx]); npos = mapx(val); } break; } } int x; int w = 1; if (opos > npos) { w += opos - npos; x = npos; } else { w += npos - opos; x = opos; } pos[idx] = val; //redraw(QRect(x, 0, w, height())); redraw(QRect(x-1, 0, w+2, height())); // p4.0.28 From Canvas::draw (is otherwise identical). Fix for corruption. }
void Canvas::setPos(int idx, unsigned val, bool adjustScrollbar) { //if (pos[idx] == val) // Seems to be some refresh problems here, pos[idx] might be val but the gui not updated. // return; // skipping this return forces update even if values match. Matching values only seem // to occur when initializing int opos = mapx(_pos[idx]); int npos = mapx(val); if (adjustScrollbar && idx == 0) { switch (song->follow()) { case Song::NO: break; case Song::JUMP: if (npos >= width()) { int ppos = val - xorg - rmapxDev(width() / 8); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(_pos[idx]); npos = mapx(val); } else if (npos < 0) { int ppos = val - xorg - rmapxDev(width()*3 / 4); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(_pos[idx]); npos = mapx(val); } break; case Song::CONTINUOUS: if (npos > (width() / 2)) { int ppos = _pos[idx] - xorg - rmapxDev(width() / 2); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(_pos[idx]); npos = mapx(val); } else if (npos < (width() / 2)) { int ppos = _pos[idx] - xorg - rmapxDev(width() / 2); if (ppos < 0) ppos = 0; emit followEvent(ppos); opos = mapx(_pos[idx]); npos = mapx(val); } break; } } int x; int w = 1; if (opos > npos) { w += opos - npos; x = npos; } else { w += npos - opos; x = opos; } _pos[idx] = val; //redraw(QRect(x - 1, 0, w + 2, height())); update(); }