#include <QPainter>
#include <QStyleOptionGraphicsItem>
#include <QCursor>
+#include <QGraphicsView>
-OnMonitorCornersItem::OnMonitorCornersItem(MonitorScene* scene, QGraphicsItem* parent) :
- AbstractOnMonitorItem(scene),
- QGraphicsPolygonItem(parent),
- m_selectedCorner(-1)
+OnMonitorCornersItem::OnMonitorCornersItem(QGraphicsItem* parent) :
+ QGraphicsPolygonItem(parent)
+ , m_mode(NoAction)
+ , m_selectedCorner(-1)
+ , m_modified(false)
+ , m_view(NULL)
{
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
framepen.setColor(Qt::yellow);
setPen(framepen);
setBrush(Qt::NoBrush);
+ setAcceptHoverEvents(true);
}
-OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(QPointF pos, int *corner)
+OnMonitorCornersItem::cornersActions OnMonitorCornersItem::getMode(const QPointF &pos, int *corner)
{
*corner = -1;
if (polygon().count() != 4)
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;
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;
}
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;
}
}
if (polygon().count() != 4)
return;
- double baseSize = 1 / painter->matrix().m11();
+ double baseSize = 1 / painter->worldTransform().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
return points;
}
+bool OnMonitorCornersItem::getView()
+{
+ if (m_view)
+ return true;
+
+ if (scene() && !scene()->views().isEmpty()) {
+ m_view = scene()->views().first();
+ return true;
+ } else {
+ return false;
+ }
+}
+
#include "onmonitorcornersitem.moc"