1 /***************************************************************************
2 * Copyright (C) 2010 by Till Theato (root@ttill.de) *
3 * This file is part of Kdenlive (www.kdenlive.org). *
5 * Kdenlive is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
10 * Kdenlive is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with Kdenlive. If not, see <http://www.gnu.org/licenses/>. *
17 ***************************************************************************/
19 #include "beziersplinewidget.h"
21 #include <QVBoxLayout>
25 BezierSplineWidget::BezierSplineWidget(const QString& spline, QWidget* parent) :
28 QVBoxLayout *layout = new QVBoxLayout(this);
29 layout->addWidget(&m_edit);
30 QWidget *widget = new QWidget(this);
32 layout->addWidget(widget);
34 m_ui.buttonLinkHandles->setIcon(KIcon("insert-link"));
35 m_ui.buttonLinkHandles->setEnabled(false);
36 m_ui.buttonZoomIn->setIcon(KIcon("zoom-in"));
37 m_ui.buttonZoomOut->setIcon(KIcon("zoom-out"));
38 m_ui.buttonGridChange->setIcon(KIcon("view-grid"));
39 m_ui.widgetPoint->setEnabled(false);
45 connect(&m_edit, SIGNAL(modified()), this, SIGNAL(modified()));
46 connect(&m_edit, SIGNAL(currentPoint(const BPoint&)), this, SLOT(slotUpdatePoint(const BPoint&)));
48 connect(m_ui.spinPX, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
49 connect(m_ui.spinPY, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
50 connect(m_ui.spinH1X, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
51 connect(m_ui.spinH1Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
52 connect(m_ui.spinH2X, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
53 connect(m_ui.spinH2Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
55 connect(m_ui.buttonZoomIn, SIGNAL(clicked()), &m_edit, SLOT(slotZoomIn()));
56 connect(m_ui.buttonZoomOut, SIGNAL(clicked()), &m_edit, SLOT(slotZoomOut()));
57 connect(m_ui.buttonGridChange, SIGNAL(clicked()), &m_edit, SLOT(slotGridChange()));
60 QString BezierSplineWidget::spline()
62 return m_edit.spline().toString();
65 void BezierSplineWidget::slotUpdatePoint(const BPoint &p)
69 m_ui.widgetPoint->setEnabled(false);
71 m_ui.widgetPoint->setEnabled(true);
72 m_ui.spinPX->setValue(qRound(p.p.x() * 255));
73 m_ui.spinPY->setValue(qRound(p.p.y() * 255));
74 m_ui.spinH1X->setValue(qRound(p.h1.x() * 255));
75 m_ui.spinH1Y->setValue(qRound(p.h1.y() * 255));
76 m_ui.spinH2X->setValue(qRound(p.h2.x() * 255));
77 m_ui.spinH2Y->setValue(qRound(p.h2.y() * 255));
82 void BezierSplineWidget::slotUpdateSpline()
84 BPoint p = m_edit.getCurrentPoint();
86 // check for every value, so we do not lose too much info through rounding
87 if (m_ui.spinPX->value() != qRound(p.p.x() * 255))
88 p.p.setX(m_ui.spinPX->value() / 255.);
89 if (m_ui.spinPY->value() != qRound(p.p.y() * 255))
90 p.p.setY(m_ui.spinPY->value() / 255.);
92 if (m_ui.spinH1X->value() != qRound(p.h1.x() * 255))
93 p.h1.setX(m_ui.spinH1X->value() / 255.);
94 if (m_ui.spinH1Y->value() != qRound(p.h1.y() * 255))
95 p.h1.setY(m_ui.spinH1Y->value() / 255.);
97 if (m_ui.spinH2X->value() != qRound(p.h2.x() * 255))
98 p.h2.setX(m_ui.spinH2X->value() / 255.);
99 if (m_ui.spinH2Y->value() != qRound(p.h2.y() * 255))
100 p.h2.setY(m_ui.spinH2Y->value() / 255.);
102 m_edit.updateCurrentPoint(p);
106 #include "beziersplinewidget.moc"