static void magPreparePaintScreen (CompScreen *s, int time) { MAG_SCREEN (s); MAG_DISPLAY (s->display); if (ms->adjust) { int steps; float amount, chunk; amount = time * 0.35f * magGetSpeed (s); steps = amount / (0.5f * magGetTimestep (s)); if (!steps) steps = 1; chunk = amount / (float) steps; while (steps--) { ms->adjust = adjustZoom (s, chunk); if (ms->adjust) break; } } if (ms->zoom != 1.0) { if (!ms->pollHandle) { (*md->mpFunc->getCurrentPosition) (s, &ms->posX, &ms->posY); ms->pollHandle = (*md->mpFunc->addPositionPolling) (s, positionUpdate); } damageRegion (s); } UNWRAP (ms, s, preparePaintScreen); (*s->preparePaintScreen) (s, time); WRAP (ms, s, preparePaintScreen, magPreparePaintScreen); }
void MagScreen::preparePaint (int time) { if (adjust) { int steps; float amount, chunk; amount = time * 0.35f * optionGetSpeed (); steps = amount / (0.5f * optionGetTimestep ()); if (!steps) steps = 1; chunk = amount / (float) steps; while (steps--) { adjust = adjustZoom (chunk); if (adjust) break; } } if (zoom != 1.0) { if (!poller.active ()) { CompPoint pos; pos = poller.getCurrentPosition (); posX = pos.x (); posY = pos.y (); poller.start (); } damageRegion (); } cScreen->preparePaint (time); }
// virtual void CustomRuler::mouseMoveEvent(QMouseEvent * event) { event->setAccepted(true); int mappedXPos = (int)((event->x() + offset()) / m_factor); emit mousePosition(mappedXPos); if (event->buttons() == Qt::LeftButton) { int pos; if (m_moveCursor == RULER_START || m_moveCursor == RULER_END) { pos = m_view->getSnapPointForPos(mappedXPos); } else pos = mappedXPos; int zoneStart = m_zoneStart; int zoneEnd = m_zoneEnd; if (pos < 0) pos = 0; if (m_moveCursor == RULER_CURSOR) { QPoint diff = event->pos() - m_clickPoint; if (m_mouseMove == NO_MOVE) { if (qAbs(diff.x()) >= QApplication::startDragDistance()) { m_mouseMove = HORIZONTAL_MOVE; } else if (KdenliveSettings::verticalzoom() && qAbs(diff.y()) >= QApplication::startDragDistance()) { m_mouseMove = VERTICAL_MOVE; } else return; } if (m_mouseMove == HORIZONTAL_MOVE) { if (pos != m_headPosition && pos != m_view->cursorPos()) { int x = m_headPosition == SEEK_INACTIVE ? pos : m_headPosition; m_headPosition = pos; int min = qMin(x, m_headPosition); int max = qMax(x, m_headPosition); update(min * m_factor - offset() - 3, LABEL_SIZE, (max - min) * m_factor + 6, FULL_HEIGHT - LABEL_SIZE); emit seekCursorPos(pos); m_view->slotCheckPositionScrolling(); } } else { int verticalDiff = m_startRate - (diff.y()) / 7; if (verticalDiff != m_rate) emit adjustZoom(verticalDiff); } return; } else if (m_moveCursor == RULER_START) m_zoneStart = qMin(pos, m_zoneEnd); else if (m_moveCursor == RULER_END) m_zoneEnd = qMax(pos, m_zoneStart); else if (m_moveCursor == RULER_MIDDLE) { int move = pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2); if (move + m_zoneStart < 0) move = - m_zoneStart; m_zoneStart += move; m_zoneEnd += move; } int min = qMin(m_zoneStart, zoneStart); int max = qMax(m_zoneEnd, zoneEnd); update(min * m_factor - m_offset - 2, LABEL_SIZE, (max - min + 1) * m_factor + 4, FULL_HEIGHT - LABEL_SIZE); } else { int pos = (int)((event->x() + m_offset)); if (event->y() <= LABEL_SIZE) { setCursor(Qt::ArrowCursor); } else if (qAbs(pos - m_zoneStart * m_factor) < 4) { setCursor(QCursor(Qt::SizeHorCursor)); if (KdenliveSettings::frametimecode()) setToolTip(i18n("Zone start: %1", m_zoneStart)); else setToolTip(i18n("Zone start: %1", m_timecode.getTimecodeFromFrames(m_zoneStart))); } else if (qAbs(pos - (m_zoneEnd + 1) * m_factor) < 4) { setCursor(QCursor(Qt::SizeHorCursor)); if (KdenliveSettings::frametimecode()) setToolTip(i18n("Zone end: %1", m_zoneEnd)); else setToolTip(i18n("Zone end: %1", m_timecode.getTimecodeFromFrames(m_zoneEnd))); } else if (qAbs(pos - (m_zoneStart + (m_zoneEnd - m_zoneStart) / 2.0) * m_factor) < 4) { setCursor(Qt::SizeHorCursor); if (KdenliveSettings::frametimecode()) setToolTip(i18n("Zone duration: %1", m_zoneEnd - m_zoneStart)); else setToolTip(i18n("Zone duration: %1", m_timecode.getTimecodeFromFrames(m_zoneEnd - m_zoneStart))); } else { setCursor(Qt::ArrowCursor); if (KdenliveSettings::frametimecode()) setToolTip(i18n("Position: %1", (int)(pos / m_factor))); else setToolTip(i18n("Position: %1", m_timecode.getTimecodeFromFrames(pos / m_factor))); } } }