X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fguide.cpp;h=ba05ec6aef126841aa744ae0cbe494b013b5c1d9;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=ef254ce94326d3a00b7297a0d1ad290e9321322f;hpb=b2fd299322b03412c1e7f55cc47049e643b39016;p=kdenlive diff --git a/src/guide.cpp b/src/guide.cpp index ef254ce9..ba05ec6a 100644 --- a/src/guide.cpp +++ b/src/guide.cpp @@ -26,8 +26,10 @@ #include #include #include +#include +#include -Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double height) : +Guide::Guide(CustomTrackView *view, const GenTime &pos, const QString &label, double height) : QGraphicsLineItem(), m_position(pos), m_label(label), @@ -40,6 +42,7 @@ Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double height) : #endif setToolTip(label); setLine(0, 0, 0, height); + if (m_position < GenTime()) m_position = GenTime(); setPos(m_position.frames(m_view->fps()), 0); m_pen.setWidthF(0); m_pen.setColor(QColor(0, 0, 200, 180)); @@ -67,7 +70,7 @@ CommentedTime Guide::info() const return CommentedTime(m_position, m_label); } -void Guide::updateGuide(const GenTime newPos, const QString &comment) +void Guide::updateGuide(const GenTime &newPos, const QString &comment) { m_position = newPos; setPos(m_position.frames(m_view->fps()), 0); @@ -113,6 +116,7 @@ QVariant Guide::itemChange(GraphicsItemChange change, const QVariant &value) QPointF newPos = value.toPointF(); newPos.setY(0); newPos.setX(m_view->getSnapPointForPos(newPos.x())); + if (newPos.x() < 0.0) newPos.setX(0.0); return newPos; } return QGraphicsItem::itemChange(change, value); @@ -125,7 +129,8 @@ QRectF Guide::boundingRect() const double width = m_pen.widthF() / scale * 2; QRectF rect(line().x1() - width / 2 , line().y1(), width, line().y2() - line().y1()); if (KdenliveSettings::showmarkers()) { - rect.setWidth(width + m_width / scale); + // +3 to cover the arc at the end of the comment + rect.setWidth(width + m_width + 3); } return rect; } @@ -135,12 +140,12 @@ QPainterPath Guide::shape() const { QPainterPath path; if (!scene()) return path; - double scale = m_view->matrix().m11(); - double width = m_pen.widthF() / scale * 2; + double width = m_pen.widthF() * 2; path.addRect(line().x1() - width / 2 , line().y1(), width, line().y2() - line().y1()); - if (KdenliveSettings::showmarkers()) { + if (KdenliveSettings::showmarkers() && scene()->views().count()) { const QFontMetrics metric = m_view->fontMetrics(); - QRectF txtBounding(line().x1() + 1 / scale, line().y1() + 10, m_width / scale, metric.height() / m_view->matrix().m22()); + int offset = scene()->views()[0]->verticalScrollBar()->value(); + QRectF txtBounding(line().x1(), line().y1() + offset, m_width, metric.height()); path.addRect(txtBounding); } return path; @@ -150,15 +155,18 @@ QPainterPath Guide::shape() const void Guide::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*w*/) { QGraphicsLineItem::paint(painter, option); - if (KdenliveSettings::showmarkers()) { - QPointF p1 = line().p1() + QPointF(1, 0); + if (KdenliveSettings::showmarkers() && scene() && scene()->views().count()) { + QPointF p1 = line().p1(); const QFontMetrics metric = m_view->fontMetrics(); - QRectF txtBounding = painter->boundingRect(p1.x(), p1.y() + 10, m_width, metric.height(), Qt::AlignLeft | Qt::AlignTop, ' ' + m_label + ' '); - QPainterPath path; - path.addRoundedRect(txtBounding, 3, 3); - painter->fillPath(path, m_pen.color()); + painter->setClipRect(option->rect); + // makes sure the text stays visible when scrolling vertical + int offset = scene()->views()[0]->verticalScrollBar()->value(); + + QRectF txtBounding = painter->boundingRect(p1.x(), p1.y() + offset, m_width, metric.height(), Qt::AlignLeft | Qt::AlignTop, m_label); + painter->setBrush(QBrush(m_pen.color())); + painter->drawRoundedRect(txtBounding.adjusted(-5, -5, 2, 1), 3, 3); painter->setPen(Qt::white); - painter->drawText(txtBounding, Qt::AlignCenter, m_label); + painter->drawText(txtBounding.adjusted(1, 0, 1, 0), Qt::AlignCenter, m_label); } }