File indexing completed on 2025-03-09 04:05:59
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2014 Dan Leinir Turthra Jensen <admin@leinir.dk> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 * 0006 */ 0007 0008 #include "CurveEditorItem.h" 0009 0010 #include "kis_curve_widget.h" 0011 #include <QPainter> 0012 #include <QMouseEvent> 0013 #include <kis_debug.h> 0014 0015 class CurveEditorItem::Private 0016 { 0017 public: 0018 Private(CurveEditorItem* qq) 0019 : q(qq) 0020 { 0021 curveWidget = new KisCurveWidget(); 0022 } 0023 ~Private() 0024 { 0025 delete curveWidget; 0026 } 0027 void repaint(); 0028 0029 CurveEditorItem* q; 0030 KisCurveWidget* curveWidget; 0031 QImage contents; 0032 0033 }; 0034 0035 CurveEditorItem::CurveEditorItem(QQuickItem* parent) 0036 : QQuickPaintedItem(parent) 0037 , d(new Private(this)) 0038 { 0039 setFlag(QQuickItem::ItemHasContents, true); 0040 setAcceptedMouseButtons( Qt::LeftButton | Qt::RightButton | Qt::MiddleButton ); 0041 connect(d->curveWidget, SIGNAL(pointSelectedChanged()), SIGNAL(pointSelectedChanged())); 0042 connect(d->curveWidget, SIGNAL(modified()), SIGNAL(curveChanged())); 0043 qRegisterMetaType<KisCubicCurve>(); 0044 } 0045 0046 CurveEditorItem::~CurveEditorItem() 0047 { 0048 delete d; 0049 } 0050 0051 void CurveEditorItem::paint(QPainter* p) 0052 { 0053 p->drawImage(boundingRect(), d->contents); 0054 } 0055 0056 KisCubicCurve CurveEditorItem::curve() const 0057 { 0058 return d->curveWidget->curve(); 0059 } 0060 0061 void CurveEditorItem::setCurve(KisCubicCurve curve) 0062 { 0063 d->curveWidget->setCurve(curve); 0064 emit curveChanged(); 0065 } 0066 0067 bool CurveEditorItem::pointSelected() const 0068 { 0069 return d->curveWidget->pointSelected(); 0070 } 0071 0072 void CurveEditorItem::deleteSelectedPoint() 0073 { 0074 if(pointSelected()) { 0075 QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Delete, Qt::NoModifier); 0076 d->curveWidget->keyPressEvent(event); 0077 d->repaint(); 0078 } 0079 } 0080 0081 void CurveEditorItem::Private::repaint() 0082 { 0083 curveWidget->resize(q->boundingRect().size().toSize()); 0084 contents = QImage(q->boundingRect().size().toSize(), QImage::Format_ARGB32_Premultiplied); 0085 contents.fill(Qt::blue); 0086 curveWidget->render(&contents); 0087 q->update(); 0088 } 0089 0090 void CurveEditorItem::geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) 0091 { 0092 d->repaint(); 0093 QQuickPaintedItem::geometryChanged(newGeometry, oldGeometry); 0094 } 0095 0096 void CurveEditorItem::mousePressEvent(QMouseEvent* event) 0097 { 0098 QMouseEvent* mouseEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers()); 0099 d->curveWidget->mousePressEvent(mouseEvent); 0100 if(mouseEvent->isAccepted()) { 0101 event->accept(); 0102 } 0103 d->repaint(); 0104 } 0105 0106 void CurveEditorItem::mouseMoveEvent(QMouseEvent* event) 0107 { 0108 QMouseEvent* mouseEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers()); 0109 d->curveWidget->mouseMoveEvent(mouseEvent); 0110 if(mouseEvent->isAccepted()) { 0111 event->accept(); 0112 } 0113 d->repaint(); 0114 } 0115 0116 void CurveEditorItem::mouseReleaseEvent(QMouseEvent* event) 0117 { 0118 QMouseEvent* mouseEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers()); 0119 d->curveWidget->mouseReleaseEvent(mouseEvent); 0120 if(mouseEvent->isAccepted()) { 0121 event->accept(); 0122 } 0123 d->repaint(); 0124 } 0125