svn path=/trunk/kdenlive/; revision=5235
BezierSplineEditor::BezierSplineEditor(QWidget* parent) :
QWidget(parent),
BezierSplineEditor::BezierSplineEditor(QWidget* parent) :
QWidget(parent),
m_mode(ModeNormal),
m_currentPointIndex(-1)
{
m_mode(ModeNormal),
m_currentPointIndex(-1)
{
+void BezierSplineEditor::slotZoomIn()
+{
+ m_zoomLevel = qMax(m_zoomLevel-1, 0);
+ update();
+}
+
+void BezierSplineEditor::slotZoomOut()
+{
+ m_zoomLevel = qMin(m_zoomLevel+1, 3);
+ update();
+}
+
void BezierSplineEditor::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event);
void BezierSplineEditor::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event);
p.fillRect(rect(), palette().background());
p.fillRect(rect(), palette().background());
- int wWidth = width() - 1;
- int wHeight = height() - 1;
+ int wWidth = width() - 1;
+ int wHeight = height() - 1;
+ int offset = 1/8. * m_zoomLevel * (wWidth > wHeight ? wWidth : wHeight);
+ wWidth -= 2 * offset;
+ wHeight -= 2 * offset;
for (x = 0 ; x < wWidth ; ++x) {
normalizedX = x / (double)wWidth;
curY = wHeight - m_spline.value(normalizedX, true) * wHeight;
for (x = 0 ; x < wWidth ; ++x) {
normalizedX = x / (double)wWidth;
curY = wHeight - m_spline.value(normalizedX, true) * wHeight;
/*
* Keep in mind that QLineF rounds doubles
* to ints mathematically, not just rounds down
* like in C
*/
p.drawLine(QLineF(prevX, prevY,
/*
* Keep in mind that QLineF rounds doubles
* to ints mathematically, not just rounds down
* like in C
*/
p.drawLine(QLineF(prevX, prevY,
+ x, curY).translated(offset, offset));
prevX = x;
prevY = curY;
}
p.drawLine(QLineF(prevX, prevY ,
prevX = x;
prevY = curY;
}
p.drawLine(QLineF(prevX, prevY ,
- x, wHeight - m_spline.value(1.0, true) * wHeight));
+ x, wHeight - m_spline.value(1.0, true) * wHeight).translated(offset, offset));
point = m_spline.points().at(i);
if (i == m_currentPointIndex) {
p.setBrush(QBrush(QColor(Qt::red), Qt::SolidPattern));
point = m_spline.points().at(i);
if (i == m_currentPointIndex) {
p.setBrush(QBrush(QColor(Qt::red), Qt::SolidPattern));
- p.drawLine(QLineF(point.h1.x() * wWidth, wHeight - point.h1.y() * wHeight, point.p.x() * wWidth, wHeight - point.p.y() * wHeight));
- p.drawLine(QLineF(point.p.x() * wWidth, wHeight - point.p.y() * wHeight, point.h2.x() * wWidth, wHeight - point.h2.y() * wHeight));
+ p.drawLine(QLineF(point.h1.x() * wWidth, wHeight - point.h1.y() * wHeight, point.p.x() * wWidth, wHeight - point.p.y() * wHeight).translated(offset, offset));
+ p.drawLine(QLineF(point.p.x() * wWidth, wHeight - point.p.y() * wHeight, point.h2.x() * wWidth, wHeight - point.h2.y() * wHeight).translated(offset, offset));
}
p.drawEllipse(QRectF(point.p.x() * wWidth - 3,
}
p.drawEllipse(QRectF(point.p.x() * wWidth - 3,
- wHeight - 3 - point.p.y() * wHeight, 6, 6));
- p.drawConvexPolygon(handle.translated(point.h1.x() * wWidth, wHeight - point.h1.y() * wHeight));
- p.drawConvexPolygon(handle.translated(point.h2.x() * wWidth, wHeight - point.h2.y() * wHeight));
+ wHeight - 3 - point.p.y() * wHeight, 6, 6).translated(offset, offset));
+ p.drawConvexPolygon(handle.translated(point.h1.x() * wWidth, wHeight - point.h1.y() * wHeight).translated(offset, offset));
+ p.drawConvexPolygon(handle.translated(point.h2.x() * wWidth, wHeight - point.h2.y() * wHeight).translated(offset, offset));
if ( i == m_currentPointIndex)
p.setBrush(QBrush(Qt::NoBrush));
if ( i == m_currentPointIndex)
p.setBrush(QBrush(Qt::NoBrush));
void BezierSplineEditor::mousePressEvent(QMouseEvent* event)
{
void BezierSplineEditor::mousePressEvent(QMouseEvent* event)
{
- double x = event->pos().x() / (double)(width() - 1);
- double y = 1.0 - event->pos().y() / (double)(height() - 1);
+ int wWidth = width() - 1;
+ int wHeight = height() - 1;
+ int offset = 1/8. * m_zoomLevel * (wWidth > wHeight ? wWidth : wHeight);
+ wWidth -= 2 * offset;
+ wHeight -= 2 * offset;
+
+ double x = (event->pos().x() - offset) / (double)(wWidth);
+ double y = 1.0 - (event->pos().y() - offset) / (double)(wHeight);
point_types selectedPoint;
point_types selectedPoint;
- int closestPointIndex = nearestPointInRange(QPointF(x, y), width(), height(), &selectedPoint);
+ int closestPointIndex = nearestPointInRange(QPointF(x, y), wWidth, wHeight, &selectedPoint);
if (event->button() == Qt::RightButton && closestPointIndex > 0 && closestPointIndex < m_spline.points().count() - 1 && selectedPoint == PTypeP) {
m_spline.removePoint(closestPointIndex);
if (event->button() == Qt::RightButton && closestPointIndex > 0 && closestPointIndex < m_spline.points().count() - 1 && selectedPoint == PTypeP) {
m_spline.removePoint(closestPointIndex);
void BezierSplineEditor::mouseMoveEvent(QMouseEvent* event)
{
void BezierSplineEditor::mouseMoveEvent(QMouseEvent* event)
{
- double x = event->pos().x() / (double)(width() - 1);
- double y = 1.0 - event->pos().y() / (double)(height() - 1);
+ int wWidth = width() - 1;
+ int wHeight = height() - 1;
+ int offset = 1/8. * m_zoomLevel * (wWidth > wHeight ? wWidth : wHeight);
+ wWidth -= 2 * offset;
+ wHeight -= 2 * offset;
+
+ double x = (event->pos().x() - offset) / (double)(wWidth);
+ double y = 1.0 - (event->pos().y() - offset) / (double)(wHeight);
if (m_mode == ModeNormal) { // If no point is selected set the the cursor shape if on top
point_types type;
if (m_mode == ModeNormal) { // If no point is selected set the the cursor shape if on top
point_types type;
- int nearestPointIndex = nearestPointInRange(QPointF(x, y), width(), height(), &type);
+ int nearestPointIndex = nearestPointInRange(QPointF(x, y), wWidth, wHeight, &type);
if (nearestPointIndex < 0)
setCursor(Qt::ArrowCursor);
if (nearestPointIndex < 0)
setCursor(Qt::ArrowCursor);
case PTypeH2:
p2 = point.h2;
}
case PTypeH2:
p2 = point.h2;
}
- if (qAbs(p.x() - p2.x()) * (wWidth - 1) < 5 && qAbs(p.y() - p2.y()) * (wHeight - 1) < 5) {
+ if (qAbs(p.x() - p2.x()) * wWidth < 5 && qAbs(p.y() - p2.y()) * wHeight < 5) {
*sel = selectedPoint;
return nearestIndex;
}
*sel = selectedPoint;
return nearestIndex;
}
BPoint getCurrentPoint();
void updateCurrentPoint(const BPoint &p);
BPoint getCurrentPoint();
void updateCurrentPoint(const BPoint &p);
+public slots:
+ void slotZoomIn();
+ void slotZoomOut();
+
protected:
//void keyPressEvent(QKeyEvent *event);
void paintEvent(QPaintEvent *event);
protected:
//void keyPressEvent(QKeyEvent *event);
void paintEvent(QPaintEvent *event);
enum modes { ModeDrag, ModeNormal };
enum point_types { PTypeH1, PTypeP, PTypeH2 };
modes m_mode;
enum modes { ModeDrag, ModeNormal };
enum point_types { PTypeH1, PTypeP, PTypeH2 };
modes m_mode;
int m_currentPointIndex;
point_types m_currentPointType;
double m_grabOffsetX;
int m_currentPointIndex;
point_types m_currentPointType;
double m_grabOffsetX;
m_ui.buttonLinkHandles->setIcon(KIcon("insert-link"));
m_ui.buttonLinkHandles->setEnabled(false);
m_ui.buttonLinkHandles->setIcon(KIcon("insert-link"));
m_ui.buttonLinkHandles->setEnabled(false);
+ m_ui.buttonZoomIn->setIcon(KIcon("zoom-in"));
+ m_ui.buttonZoomOut->setIcon(KIcon("zoom-out"));
m_ui.widgetPoint->setEnabled(false);
CubicBezierSpline s;
m_ui.widgetPoint->setEnabled(false);
CubicBezierSpline s;
connect(m_ui.spinH1Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
connect(m_ui.spinH2X, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
connect(m_ui.spinH2Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
connect(m_ui.spinH1Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
connect(m_ui.spinH2X, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
connect(m_ui.spinH2Y, SIGNAL(editingFinished()), this, SLOT(slotUpdateSpline()));
+
+ connect(m_ui.buttonZoomIn, SIGNAL(clicked()), &m_edit, SLOT(slotZoomIn()));
+ connect(m_ui.buttonZoomOut, SIGNAL(clicked()), &m_edit, SLOT(slotZoomOut()));
}
QString BezierSplineWidget::spline()
}
QString BezierSplineWidget::spline()
- <width>471</width>
- <height>84</height>
+ <width>336</width>
+ <height>94</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="1" column="5">
+ <item row="1" column="5" colspan="3">
<widget class="QWidget" name="widgetPoint" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0" colspan="9">
<widget class="QWidget" name="widgetPoint" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0" colspan="9">
</layout>
</widget>
</item>
</layout>
</widget>
</item>
+ <item row="2" column="5">
+ <widget class="QToolButton" name="buttonZoomIn">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="6">
+ <widget class="QToolButton" name="buttonZoomOut">
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="7">
+ <spacer name="spacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
<resources/>
</layout>
</widget>
<resources/>