timeline: vastly improved snapping

This commit is contained in:
itsmattkc
2020-06-06 13:59:49 +10:00
parent 5055c136b6
commit aaee2ab9ed
13 changed files with 285 additions and 99 deletions
+31 -1
View File
@@ -25,6 +25,7 @@
#include <QtMath>
#include "common/qtutils.h"
#include "core.h"
OLIVE_NAMESPACE_ENTER
@@ -32,7 +33,8 @@ SeekableWidget::SeekableWidget(QWidget* parent) :
TimelineScaledWidget(parent),
time_(0),
timeline_points_(nullptr),
scroll_(0)
scroll_(0),
snap_service_(nullptr)
{
QFontMetrics fm = fontMetrics();
@@ -59,6 +61,11 @@ void SeekableWidget::ConnectTimelinePoints(TimelinePoints *points)
update();
}
void SeekableWidget::SetSnapService(SnapService *service)
{
snap_service_ = service;
}
const int64_t &SeekableWidget::GetTime() const
{
return time_;
@@ -81,6 +88,15 @@ void SeekableWidget::mouseMoveEvent(QMouseEvent *event)
}
}
void SeekableWidget::mouseReleaseEvent(QMouseEvent *event)
{
Q_UNUSED(event)
if (snap_service_) {
snap_service_->HideSnaps();
}
}
void SeekableWidget::ScaleChangedEvent(const double &)
{
update();
@@ -134,6 +150,20 @@ void SeekableWidget::SeekToScreenPoint(int screen)
{
int64_t timestamp = qMax(static_cast<int64_t>(0), ScreenToUnitRounded(screen));
if (Core::instance()->snapping() && snap_service_) {
rational playhead_time = Timecode::timestamp_to_time(timestamp, timebase());
rational movement;
snap_service_->SnapPoint({playhead_time},
&movement,
SnapService::kSnapAll & ~SnapService::kSnapToPlayhead);
if (!movement.isNull()) {
timestamp = Timecode::time_to_timestamp(playhead_time + movement,
timebase());
}
}
SetTime(timestamp);
emit TimeChanged(timestamp);
+6
View File
@@ -23,6 +23,7 @@
#include "common/rational.h"
#include "timeline/timelinepoints.h"
#include "widget/timelinewidget/snapservice.h"
#include "widget/timelinewidget/view/timelineplayhead.h"
#include "widget/timelinewidget/timelinescaledobject.h"
@@ -40,6 +41,8 @@ public:
void ConnectTimelinePoints(TimelinePoints* points);
void SetSnapService(SnapService* service);
public slots:
void SetTime(const int64_t &r);
@@ -50,6 +53,7 @@ protected:
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual void ScaleChangedEvent(const double&) override;
@@ -105,6 +109,8 @@ private:
int playhead_width_;
SnapService* snap_service_;
};
OLIVE_NAMESPACE_EXIT