X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fonmonitoritems%2Fonmonitorcornersitem.cpp;h=754d9eeda14ccb4e90341ed4e0c480c79ff66bf8;hb=40871a54f9a9e06f0a97800e9e0048acefdbde18;hp=d5a288a9265928af9608434ec44522cac88d9e32;hpb=551a8d38219bd1ccd96636b87df49264fa330c8c;p=kdenlive diff --git a/src/onmonitoritems/onmonitorcornersitem.cpp b/src/onmonitoritems/onmonitorcornersitem.cpp index d5a288a9..754d9eed 100644 --- a/src/onmonitoritems/onmonitorcornersitem.cpp +++ b/src/onmonitoritems/onmonitorcornersitem.cpp @@ -26,11 +26,13 @@ #include #include #include +#include -OnMonitorCornersItem::OnMonitorCornersItem(MonitorScene* scene, QGraphicsItem* parent) : - AbstractOnMonitorItem(scene), +OnMonitorCornersItem::OnMonitorCornersItem(QGraphicsItem* parent) : QGraphicsPolygonItem(parent), - m_selectedCorner(-1) + m_selectedCorner(-1), + m_modified(false), + m_view(NULL) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); @@ -38,6 +40,7 @@ OnMonitorCornersItem::OnMonitorCornersItem(MonitorScene* scene, QGraphicsItem* p framepen.setColor(Qt::yellow); setPen(framepen); setBrush(Qt::NoBrush); + setAcceptHoverEvents(true); } OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(QPointF pos, int *corner) @@ -47,8 +50,10 @@ OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(QPointF pos, return NoAction; QPainterPath mouseArea; - pos = mapFromScene(pos); - mouseArea.addRect(pos.x() - 6, pos.y() - 6, 12, 12); + qreal size = 12; + if (getView()) + size /= m_view->matrix().m11(); + mouseArea.addRect(pos.x() - size / 2, pos.y() - size / 2, size, size); for (int i = 0; i < 4; ++i) { if (mouseArea.contains(polygon().at(i))) { *corner = i; @@ -72,26 +77,17 @@ OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(QPointF pos, return NoAction; } -void OnMonitorCornersItem::slotMousePressed(QGraphicsSceneMouseEvent* event) +void OnMonitorCornersItem::mousePressEvent(QGraphicsSceneMouseEvent* event) { - event->accept(); - - if (!isEnabled()) - return; - - m_mode = getMode(event->scenePos(), &m_selectedCorner); + m_mode = getMode(event->pos(), &m_selectedCorner); m_lastPoint = event->scenePos(); + + if (m_mode == NoAction) + event->ignore(); } -void OnMonitorCornersItem::slotMouseMoved(QGraphicsSceneMouseEvent* event) +void OnMonitorCornersItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) { - event->accept(); - - if (!isEnabled()) { - emit requestCursor(QCursor(Qt::ArrowCursor)); - return; - } - /*if (event->buttons() != Qt::NoButton && (event->screenPos() - m_screenClickPoint).manhattanLength() < QApplication::startDragDistance()) { * event->accept(); * return; @@ -119,23 +115,41 @@ void OnMonitorCornersItem::slotMouseMoved(QGraphicsSceneMouseEvent* event) } m_lastPoint = mousePos; setPolygon(p); - } else { - int corner; - switch (getMode(event->scenePos(), &corner)) { - case NoAction: - emit requestCursor(QCursor(Qt::ArrowCursor)); - break; - case Move: - emit requestCursor(QCursor(Qt::SizeAllCursor)); - break; - default: - emit requestCursor(QCursor(Qt::OpenHandCursor)); - break; + } + + if (m_modified) { + event->accept(); + if (KdenliveSettings::monitorscene_directupdate()) { + emit changed(); + m_modified = false; } + } else { + event->ignore(); } - if (m_modified && KdenliveSettings::monitorscene_directupdate()) { - emit actionFinished(); +} + +void OnMonitorCornersItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) +{ + if (m_modified) { m_modified = false; + emit changed(); + } + event->accept(); +} + +void OnMonitorCornersItem::hoverMoveEvent(QGraphicsSceneHoverEvent* event) +{ + int corner; + switch (getMode(event->pos(), &corner)) { + case NoAction: + unsetCursor(); + break; + case Move: + setCursor(QCursor(Qt::SizeAllCursor)); + break; + default: + setCursor(QCursor(Qt::OpenHandCursor)); + break; } } @@ -151,12 +165,12 @@ void OnMonitorCornersItem::paint(QPainter* painter, const QStyleOptionGraphicsIt double baseSize = 1 / painter->matrix().m11(); painter->setRenderHint(QPainter::Antialiasing); - painter->setBrush(QBrush(Qt::yellow)); + painter->setBrush(QBrush(isEnabled() ? Qt::yellow : Qt::red)); double handleSize = 4 * baseSize; for (int i = 0; i < 4; ++i) painter->drawEllipse(polygon().at(i), handleSize, handleSize); - if (KdenliveSettings::onmonitoreffects_cornersshowcontrols()) { + if (KdenliveSettings::onmonitoreffects_cornersshowcontrols() && isEnabled()) { painter->setPen(QPen(Qt::red, 2, Qt::SolidLine)); double toolSize = 6 * baseSize; // move tool @@ -244,4 +258,17 @@ QList OnMonitorCornersItem::sortedClockwise() return points; } +bool OnMonitorCornersItem::getView() +{ + if (m_view) + return true; + + if (scene() && scene()->views().count()) { + m_view = scene()->views()[0]; + return true; + } else { + return false; + } +} + #include "onmonitorcornersitem.moc"