timeline: implemented UI indicator for tools like razor and edit

This commit is contained in:
itsmattkc
2020-06-16 18:30:00 +10:00
parent 67ee78ac9a
commit 29d56a1583
8 changed files with 129 additions and 28 deletions
@@ -1241,6 +1241,13 @@ void TimelineWidget::UpdateViewTimebases()
}
}
void TimelineWidget::SetViewBeamCursor(const TimelineCoordinate &coord)
{
foreach (TimelineAndTrackView* tview, views_) {
tview->view()->SetBeamCursor(coord);
}
}
void TimelineWidget::SetBlockLinksSelected(Block* block, bool selected)
{
TimelineViewBlockItem* link_item;
+13 -2
View File
@@ -209,6 +209,15 @@ private:
};
class BeamTool : public Tool
{
public:
BeamTool(TimelineWidget *parent);
virtual void HoverMove(TimelineViewMouseEvent *event) override;
};
class PointerTool : public Tool
{
public:
@@ -327,7 +336,7 @@ private:
};
class EditTool : public Tool
class EditTool : public BeamTool
{
public:
EditTool(TimelineWidget* parent);
@@ -337,7 +346,7 @@ private:
virtual void MouseRelease(TimelineViewMouseEvent *event) override;
};
class RazorTool : public Tool
class RazorTool : public BeamTool
{
public:
RazorTool(TimelineWidget* parent);
@@ -498,6 +507,8 @@ private:
void UpdateViewTimebases();
void SetViewBeamCursor(const TimelineCoordinate& coord);
private slots:
void ViewMousePressed(TimelineViewMouseEvent* event);
void ViewMouseMoved(TimelineViewMouseEvent* event);
@@ -17,6 +17,7 @@
set(OLIVE_SOURCES
${OLIVE_SOURCES}
widget/timelinewidget/tool/add.cpp
widget/timelinewidget/tool/beam.cpp
widget/timelinewidget/tool/edit.cpp
widget/timelinewidget/tool/import.cpp
widget/timelinewidget/tool/pointer.cpp
+35
View File
@@ -0,0 +1,35 @@
/***
Olive - Non-Linear Video Editor
Copyright (C) 2019 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#include "widget/timelinewidget/timelinewidget.h"
OLIVE_NAMESPACE_ENTER
TimelineWidget::BeamTool::BeamTool(TimelineWidget *parent) :
Tool(parent)
{
}
void TimelineWidget::BeamTool::HoverMove(TimelineViewMouseEvent *event)
{
parent()->SetViewBeamCursor(event->GetCoordinates(true));
}
OLIVE_NAMESPACE_EXIT
+1 -1
View File
@@ -23,7 +23,7 @@
OLIVE_NAMESPACE_ENTER
TimelineWidget::EditTool::EditTool(TimelineWidget* parent) :
Tool(parent)
BeamTool(parent)
{
}
+1 -1
View File
@@ -23,7 +23,7 @@
OLIVE_NAMESPACE_ENTER
TimelineWidget::RazorTool::RazorTool(TimelineWidget* parent) :
Tool(parent)
BeamTool(parent)
{
}
+64 -24
View File
@@ -141,21 +141,21 @@ void TimelineView::wheelEvent(QWheelEvent *event)
}
QWheelEvent e(
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
event->position(),
event->globalPosition(),
#else
event->pos(),
event->globalPos(),
#endif
event->pixelDelta(),
angle_delta,
event->buttons(),
event->modifiers(),
event->phase(),
event->inverted(),
event->source()
);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
event->position(),
event->globalPosition(),
#else
event->pos(),
event->globalPos(),
#endif
event->pixelDelta(),
angle_delta,
event->buttons(),
event->modifiers(),
event->phase(),
event->inverted(),
event->source()
);
#else
@@ -166,15 +166,15 @@ void TimelineView::wheelEvent(QWheelEvent *event)
}
QWheelEvent e(
event->pos(),
event->globalPos(),
event->pixelDelta(),
event->angleDelta(),
event->delta(),
orientation,
event->buttons(),
event->modifiers()
);
event->pos(),
event->globalPos(),
event->pixelDelta(),
event->angleDelta(),
event->delta(),
orientation,
event->buttons(),
event->modifiers()
);
#endif
QGraphicsView::wheelEvent(&e);
@@ -244,6 +244,26 @@ void TimelineView::drawBackground(QPainter *painter, const QRectF &rect)
}
}
void TimelineView::drawForeground(QPainter *painter, const QRectF &rect)
{
TimelineViewBase::drawForeground(painter, rect);
if (show_beam_cursor_
&& connected_track_list_
&& cursor_coord_.GetTrack().type() == connected_track_list_->type()
&& cursor_coord_.GetTrack().index() < connected_track_list_->GetTrackCount()) {
painter->setPen(Qt::gray);
double cursor_x = TimeToScene(cursor_coord_.GetFrame());
int track_index = cursor_coord_.GetTrack().index();
painter->drawLine(cursor_x,
GetTrackY(track_index),
cursor_x,
GetTrackHeight(track_index));
}
}
void TimelineView::ToolChangedEvent(Tool::Item tool)
{
switch (tool) {
@@ -261,6 +281,12 @@ void TimelineView::ToolChangedEvent(Tool::Item tool)
default:
unsetCursor();
}
// Hide/show cursor if necessary
if (show_beam_cursor_) {
show_beam_cursor_ = false;
viewport()->update();
}
}
void TimelineView::SceneRectUpdateEvent(QRectF &rect)
@@ -399,6 +425,20 @@ void TimelineView::ConnectTrackList(TrackList *list)
}
}
void TimelineView::SetBeamCursor(const TimelineCoordinate &coord)
{
bool update_required = true;/*(coord.GetTrack().type() == connected_track_list_->type()
|| cursor_coord_.GetTrack().type() == connected_track_list_->type()
|| !show_beam_cursor_);*/
show_beam_cursor_ = true;
cursor_coord_ = coord;
if (update_required) {
viewport()->update();
}
}
int TimelineView::SceneToTrack(double y)
{
int track = -1;
@@ -61,6 +61,8 @@ public:
void ConnectTrackList(TrackList* list);
void SetBeamCursor(const TimelineCoordinate& coord);
signals:
void MousePressed(TimelineViewMouseEvent* event);
void MouseMoved(TimelineViewMouseEvent* event);
@@ -88,6 +90,7 @@ protected:
virtual void dropEvent(QDropEvent *event) override;
virtual void drawBackground(QPainter *painter, const QRectF &rect) override;
virtual void drawForeground(QPainter *painter, const QRectF &rect) override;
virtual void ToolChangedEvent(Tool::Item tool) override;
@@ -111,6 +114,10 @@ private:
void UpdatePlayheadRect();
bool show_beam_cursor_;
TimelineCoordinate cursor_coord_;
TrackList* connected_track_list_;
};