1 /***************************************************************************
2 * Copyright (C) 2010 by Till Theato (root@ttill.de) *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "onmonitorcornersitem.h"
21 #include "kdenlivesettings.h"
23 #include <QGraphicsSceneMouseEvent>
25 #include <QStyleOptionGraphicsItem>
28 OnMonitorCornersItem::OnMonitorCornersItem(MonitorScene* scene, QGraphicsItem* parent) :
29 AbstractOnMonitorItem(scene),
30 QGraphicsPolygonItem(parent)
32 setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
34 QPen framepen(Qt::SolidLine);
35 framepen.setColor(Qt::yellow);
37 setBrush(Qt::NoBrush);
40 cornersActions OnMonitorCornersItem::getMode(QPoint pos)
42 QPainterPath mouseArea;
43 pos = mapFromScene(pos).toPoint();
44 mouseArea.addRect(pos.x() - 6, pos.y() - 6, 12, 12);
45 if (mouseArea.contains(polygon().at(0)))
47 else if (mouseArea.contains(polygon().at(1)))
49 else if (mouseArea.contains(polygon().at(2)))
51 else if (mouseArea.contains(polygon().at(3)))
57 void OnMonitorCornersItem::slotMousePressed(QGraphicsSceneMouseEvent* event)
64 m_mode = getMode(event->scenePos().toPoint());
67 void OnMonitorCornersItem::slotMouseMoved(QGraphicsSceneMouseEvent* event)
72 emit requestCursor(QCursor(Qt::ArrowCursor));
76 /*if (event->buttons() != Qt::NoButton && (event->screenPos() - m_screenClickPoint).manhattanLength() < QApplication::startDragDistance()) {
81 if (event->buttons() & Qt::LeftButton) {
82 QPoint mousePos = mapFromScene(event->scenePos()).toPoint();
83 QPolygon p = polygon().toPolygon();
86 p.replace(0, mousePos);
90 p.replace(1, mousePos);
94 p.replace(2, mousePos);
98 p.replace(3, mousePos);
106 switch (getMode(event->scenePos().toPoint())) {
108 emit requestCursor(QCursor(Qt::ArrowCursor));
111 emit requestCursor(QCursor(Qt::OpenHandCursor));
115 if (m_modified && KdenliveSettings::monitorscene_directupdate()) {
116 emit actionFinished();
121 void OnMonitorCornersItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
123 QGraphicsPolygonItem::paint(painter, option, widget);
125 painter->setRenderHint(QPainter::Antialiasing);
126 painter->setBrush(QBrush(Qt::yellow));
127 double handleSize = 4 / painter->matrix().m11();
128 painter->drawEllipse(polygon().at(0), handleSize, handleSize);
129 painter->drawEllipse(polygon().at(1), handleSize, handleSize);
130 painter->drawEllipse(polygon().at(2), handleSize, handleSize);
131 painter->drawEllipse(polygon().at(3), handleSize, handleSize);
134 #include "onmonitorcornersitem.moc"