X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fguide.cpp;h=93d9d7973b05b5d7c849250f16badc88695bf27d;hb=7d1f818376b25f793ad6e8960b73a24a39605945;hp=08e5e9ef26d422eb79ff1de0a0548d19100b475a;hpb=d0843e7a75da32bfdf62bc02366bb40cbbea0819;p=kdenlive diff --git a/src/guide.cpp b/src/guide.cpp index 08e5e9ef..93d9d797 100644 --- a/src/guide.cpp +++ b/src/guide.cpp @@ -19,26 +19,29 @@ #include "guide.h" #include "customtrackview.h" -#include "customtrackscene.h" #include "kdenlivesettings.h" #include #include #include +#include -Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double fps, double height) : +Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double height) : QGraphicsLineItem(), m_position(pos), m_label(label), - m_fps(fps), - m_view(view) + m_view(view), + m_pen(QPen()) { - setFlags(QGraphicsItem::ItemIsMovable); + setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIgnoresTransformations); setToolTip(label); setLine(0, 0, 0, height); - setPos(m_position.frames(m_fps), 0); - setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2)); + setPos(m_position.frames(m_view->fps()), 0); + m_pen.setWidthF(0); + m_pen.setColor(QColor(0, 0, 200, 180)); + //m_pen.setCosmetic(true); + setPen(m_pen); setZValue(999); setAcceptsHoverEvents(true); const QFontMetrics metric = m_view->fontMetrics(); @@ -64,7 +67,7 @@ CommentedTime Guide::info() const void Guide::updateGuide(const GenTime newPos, const QString &comment) { m_position = newPos; - setPos(m_position.frames(m_fps), 0); + setPos(m_position.frames(m_view->fps()), 0); if (!comment.isEmpty()) { m_label = comment; setToolTip(m_label); @@ -74,6 +77,11 @@ void Guide::updateGuide(const GenTime newPos, const QString &comment) } } +void Guide::updatePos() +{ + setPos(m_position.frames(m_view->fps()), 0); +} + //virtual int Guide::type() const { @@ -83,13 +91,15 @@ int Guide::type() const //virtual void Guide::hoverEnterEvent(QGraphicsSceneHoverEvent *) { - setPen(QPen(QBrush(QColor(200, 0, 0, 180)), 2)); + m_pen.setColor(QColor(200, 0, 0, 180)); + setPen(m_pen); } //virtual void Guide::hoverLeaveEvent(QGraphicsSceneHoverEvent *) { - setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2)); + m_pen.setColor(QColor(0, 0, 200, 180)); + setPen(m_pen); } //virtual @@ -108,42 +118,42 @@ QVariant Guide::itemChange(GraphicsItemChange change, const QVariant &value) // virtual QRectF Guide::boundingRect() const { + double scale = m_view->matrix().m11(); + double width = m_pen.widthF() / scale * 2; + QRectF rect(line().x1() - width / 2 , line().y1(), width, line().y2() - line().y1()); if (KdenliveSettings::showmarkers()) { - QRectF rect = QGraphicsLineItem::boundingRect(); - rect.setLeft(line().x1()); - rect.setWidth(m_width / static_cast (scene())->scale()); - return rect; - } else return QGraphicsLineItem::boundingRect(); + rect.setWidth(width + m_width / scale); + } + return rect; } // virtual QPainterPath Guide::shape() const { QPainterPath path; - path.addRect(line().x1(), line().y1(), line().x2() - line().x1(), line().y2() - line().y1()); + if (!scene()) return path; + double scale = m_view->matrix().m11(); + double width = m_pen.widthF() / scale * 2; + path.addRect(line().x1() - width / 2 , line().y1(), width, line().y2() - line().y1()); if (KdenliveSettings::showmarkers()) { const QFontMetrics metric = m_view->fontMetrics(); - int height = metric.height(); - path.addRoundedRect(line().x1(), line().y1() + 10, m_width / static_cast (scene())->scale(), height, 3, 3); + QRectF txtBounding(line().x1() + 1 / scale, line().y1() + 10, m_width / scale, metric.height() / m_view->matrix().m22()); + path.addRect(txtBounding); } return path; } // virtual -void Guide::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*w*/) +void Guide::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*w*/) { - painter->setMatrixEnabled(false); - QLineF guideline = painter->matrix().map(line()); - painter->setPen(pen()); - painter->drawLine(guideline); - //painter->fillRect(painter->matrix().mapRect(boundingRect()), QColor(200, 100, 100, 100)); - //QGraphicsLineItem::paint(painter, option, w); + QGraphicsLineItem::paint(painter, option); if (KdenliveSettings::showmarkers()) { - QPointF p1 = guideline.p1() + QPointF(1, 0); - QRectF txtBounding = painter->boundingRect(p1.x(), p1.y() + 10, m_width, 50, Qt::AlignLeft | Qt::AlignTop, ' ' + m_label + ' '); + QPointF p1 = line().p1() + QPointF(1, 0); + 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, QBrush(pen().color())); + painter->fillPath(path, m_pen.color()); painter->setPen(Qt::white); painter->drawText(txtBounding, Qt::AlignCenter, m_label); }