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"
20 #include "colortools.h"
21 #include "kdenlivesettings.h"
23 #include <QVBoxLayout>
28 BezierSplineWidget::BezierSplineWidget(const QString& spline, QWidget* parent) :
33 QVBoxLayout *layout = new QVBoxLayout(this);
34 layout->addWidget(&m_edit);
35 QWidget *widget = new QWidget(this);
37 layout->addWidget(widget);
39 m_ui.buttonLinkHandles->setIcon(KIcon("insert-link"));
40 m_ui.buttonZoomIn->setIcon(KIcon("zoom-in"));
41 m_ui.buttonZoomOut->setIcon(KIcon("zoom-out"));
42 m_ui.buttonGridChange->setIcon(KIcon("view-grid"));
43 m_ui.buttonShowPixmap->setIcon(QIcon(QPixmap::fromImage(ColorTools::rgbCurvePlane(QSize(16, 16), ColorTools::COL_Luma, 0.8))));
44 m_ui.buttonResetSpline->setIcon(KIcon("view-refresh"));
45 m_ui.buttonShowAllHandles->setIcon(KIcon("draw-bezier-curves"));
46 m_ui.widgetPoint->setEnabled(false);
52 connect(&m_edit, SIGNAL(modified()), this, SIGNAL(modified()));
53 connect(&m_edit, SIGNAL(currentPoint(const BPoint&)), this, SLOT(slotUpdatePointEntries(const BPoint&)));
55 connect(m_ui.spinPX, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointP()));
56 connect(m_ui.spinPY, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointP()));
57 connect(m_ui.spinH1X, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointH1()));
58 connect(m_ui.spinH1Y, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointH1()));
59 connect(m_ui.spinH2X, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointH2()));
60 connect(m_ui.spinH2Y, SIGNAL(editingFinished()), this, SLOT(slotUpdatePointH2()));
62 connect(m_ui.buttonLinkHandles, SIGNAL(toggled(bool)), this, SLOT(slotSetHandlesLinked(bool)));
63 connect(m_ui.buttonZoomIn, SIGNAL(clicked()), &m_edit, SLOT(slotZoomIn()));
64 connect(m_ui.buttonZoomOut, SIGNAL(clicked()), &m_edit, SLOT(slotZoomOut()));
65 connect(m_ui.buttonGridChange, SIGNAL(clicked()), this, SLOT(slotGridChange()));
66 connect(m_ui.buttonShowPixmap, SIGNAL(toggled(bool)), this, SLOT(slotShowPixmap(bool)));
67 connect(m_ui.buttonResetSpline, SIGNAL(clicked()), this, SLOT(slotResetSpline()));
68 connect(m_ui.buttonShowAllHandles, SIGNAL(toggled(bool)), this, SLOT(slotShowAllHandles(bool)));
70 m_edit.setGridLines(KdenliveSettings::bezier_gridlines());
71 m_ui.buttonShowPixmap->setChecked(KdenliveSettings::bezier_showpixmap());
72 slotShowPixmap(m_ui.buttonShowPixmap->isChecked());
73 m_ui.buttonShowAllHandles->setChecked(KdenliveSettings::bezier_showallhandles());
76 QString BezierSplineWidget::spline()
78 return m_edit.spline().toString();
81 void BezierSplineWidget::setMode(BezierSplineWidget::CurveModes mode)
90 void BezierSplineWidget::slotGridChange()
92 m_edit.setGridLines((m_edit.gridLines() + 1) % 9);
93 KdenliveSettings::setBezier_gridlines(m_edit.gridLines());
96 void BezierSplineWidget::slotShowPixmap(bool show)
99 KdenliveSettings::setBezier_showpixmap(show);
100 if (show && (int)m_mode < 6)
101 m_edit.setPixmap(QPixmap::fromImage(ColorTools::rgbCurvePlane(m_edit.size(), (ColorTools::ColorsRGB)((int)m_mode), 1, palette().background().color().rgb())));
103 m_edit.setPixmap(QPixmap());
106 void BezierSplineWidget::slotUpdatePointEntries(const BPoint &p)
110 m_ui.widgetPoint->setEnabled(false);
112 m_ui.widgetPoint->setEnabled(true);
113 m_ui.spinPX->setValue(qRound(p.p.x() * 255));
114 m_ui.spinPY->setValue(qRound(p.p.y() * 255));
115 m_ui.spinH1X->setValue(qRound(p.h1.x() * 255));
116 m_ui.spinH1Y->setValue(qRound(p.h1.y() * 255));
117 m_ui.spinH2X->setValue(qRound(p.h2.x() * 255));
118 m_ui.spinH2Y->setValue(qRound(p.h2.y() * 255));
119 m_ui.buttonLinkHandles->setChecked(p.handlesLinked);
124 void BezierSplineWidget::slotUpdatePointP()
126 BPoint p = m_edit.getCurrentPoint();
128 p.setP(QPointF(m_ui.spinPX->value() / 255., m_ui.spinPY->value() / 255.));
130 m_edit.updateCurrentPoint(p);
133 void BezierSplineWidget::slotUpdatePointH1()
135 BPoint p = m_edit.getCurrentPoint();
137 p.setH1(QPointF(m_ui.spinH1X->value() / 255., m_ui.spinH1Y->value() / 255.));
139 m_edit.updateCurrentPoint(p);
142 void BezierSplineWidget::slotUpdatePointH2()
144 BPoint p = m_edit.getCurrentPoint();
146 p.setH2(QPointF(m_ui.spinH2X->value() / 255., m_ui.spinH2Y->value() / 255.));
148 m_edit.updateCurrentPoint(p);
151 void BezierSplineWidget::slotSetHandlesLinked(bool linked)
153 BPoint p = m_edit.getCurrentPoint();
154 p.handlesLinked = linked;
155 m_edit.updateCurrentPoint(p);
158 void BezierSplineWidget::slotResetSpline()
160 m_edit.setSpline(CubicBezierSpline());
163 void BezierSplineWidget::slotShowAllHandles(bool show)
165 m_edit.setShowAllHandles(show);
166 KdenliveSettings::setBezier_showallhandles(show);
169 #include "beziersplinewidget.moc"