diff --git a/cursors/1_left.svg b/cursors/1_left.svg
new file mode 100644
index 000000000..aad4f9a1a
--- /dev/null
+++ b/cursors/1_left.svg
@@ -0,0 +1,11062 @@
+
+
+
+
diff --git a/cursors/1_right.svg b/cursors/1_right.svg
new file mode 100644
index 000000000..2453add12
--- /dev/null
+++ b/cursors/1_right.svg
@@ -0,0 +1,11062 @@
+
+
+
+
diff --git a/cursors/2.svg b/cursors/2.svg
new file mode 100644
index 000000000..d0176907e
--- /dev/null
+++ b/cursors/2.svg
@@ -0,0 +1,11074 @@
+
+
+
+
diff --git a/cursors/3_left.svg b/cursors/3_left.svg
new file mode 100644
index 000000000..218f7dab0
--- /dev/null
+++ b/cursors/3_left.svg
@@ -0,0 +1,11059 @@
+
+
+
+
diff --git a/cursors/3_right.svg b/cursors/3_right.svg
new file mode 100644
index 000000000..f18bba325
--- /dev/null
+++ b/cursors/3_right.svg
@@ -0,0 +1,11060 @@
+
+
+
+
diff --git a/cursors/4.svg b/cursors/4.svg
new file mode 100644
index 000000000..f38acc1af
--- /dev/null
+++ b/cursors/4.svg
@@ -0,0 +1,11060 @@
+
+
+
+
diff --git a/cursors/5.svg b/cursors/5.svg
new file mode 100644
index 000000000..9f8780356
--- /dev/null
+++ b/cursors/5.svg
@@ -0,0 +1,11048 @@
+
+
+
+
diff --git a/cursors/5b.svg b/cursors/5b.svg
new file mode 100644
index 000000000..c1581dbb7
--- /dev/null
+++ b/cursors/5b.svg
@@ -0,0 +1,11046 @@
+
+
+
+
diff --git a/cursors/5c.svg b/cursors/5c.svg
new file mode 100644
index 000000000..ce9ffd984
--- /dev/null
+++ b/cursors/5c.svg
@@ -0,0 +1,11038 @@
+
+
+
+
diff --git a/cursors/cursors.qrc b/cursors/cursors.qrc
index 0d40e1940..a7ff3b26d 100644
--- a/cursors/cursors.qrc
+++ b/cursors/cursors.qrc
@@ -1,6 +1,13 @@
- left_side.png
- right_side.png
+ 1_left.svg
+ 1_right.svg
+ 2.svg
+ 3_left.svg
+ 3_right.svg
+ 4.svg
+ 5.svg
+ 5b.svg
+ 5c.svg
diff --git a/cursors/left_side.png b/cursors/left_side.png
deleted file mode 100644
index 2c6cac0aa..000000000
Binary files a/cursors/left_side.png and /dev/null differ
diff --git a/cursors/right_side.png b/cursors/right_side.png
deleted file mode 100644
index 53fab01c6..000000000
Binary files a/cursors/right_side.png and /dev/null differ
diff --git a/panels/timeline.cpp b/panels/timeline.cpp
index 4a975a886..16651487e 100644
--- a/panels/timeline.cpp
+++ b/panels/timeline.cpp
@@ -36,6 +36,7 @@
#include "ui/resizablescrollbar.h"
#include "ui/audiomonitor.h"
#include "ui/flowlayout.h"
+#include "ui/cursors.h"
#include "mainwindow.h"
#include "debug.h"
@@ -1706,7 +1707,7 @@ void Timeline::deselect() {
}
long getFrameFromScreenPoint(double zoom, int x) {
- long f = qCeil(double(x) / zoom);
+ long f = qRound(double(x) / zoom);
if (f < 0) {
return 0;
}
@@ -1714,7 +1715,7 @@ long getFrameFromScreenPoint(double zoom, int x) {
}
int getScreenPointFromFrame(double zoom, long frame) {
- return qFloor(double(frame)*zoom);
+ return qRound(double(frame)*zoom);
}
long Timeline::getTimelineFrameFromScreenPoint(int x) {
@@ -2039,9 +2040,11 @@ void Timeline::set_tool() {
creating = false;
switch (tool) {
case TIMELINE_TOOL_EDIT:
- case TIMELINE_TOOL_RAZOR:
timeline_area->setCursor(Qt::IBeamCursor);
break;
+ case TIMELINE_TOOL_RAZOR:
+ timeline_area->setCursor(olive::Cursor_Razor);
+ break;
case TIMELINE_TOOL_HAND:
timeline_area->setCursor(Qt::OpenHandCursor);
break;
diff --git a/ui/cursors.cpp b/ui/cursors.cpp
index 5dbf21655..23f824de4 100644
--- a/ui/cursors.cpp
+++ b/ui/cursors.cpp
@@ -20,30 +20,50 @@
#include "cursors.h"
+#include
+#include
#include
+#include
+#include
#include
-
#include
QCursor olive::Cursor_LeftTrim;
QCursor olive::Cursor_RightTrim;
+QCursor olive::Cursor_LeftRipple;
+QCursor olive::Cursor_RightRipple;
+QCursor olive::Cursor_Slip;
+QCursor olive::Cursor_Razor;
-QCursor load_cursor(const QString& file, int hotX, int hotY, const bool& right_aligned){
- // load specified file into a pixmap
- QPixmap temp(file);
+const int cursor_size = 24;
- // set cursor's horizontal hotspot
- if (right_aligned) {
- hotX = temp.width() - hotX;
- }
+QCursor load_cursor(const QString& file, int hotX = -1, int hotY = -1, bool right_aligned = false){
+ // load specified file into a pixmap
+ QSvgRenderer renderer(file);
- // return cursor
- return QCursor(temp, hotX, hotY);
+ int cursor_size_dpiaware = cursor_size * QApplication::desktop()->devicePixelRatio();
+ QPixmap pixmap(cursor_size_dpiaware, cursor_size_dpiaware);
+ pixmap.fill(Qt::transparent);
+
+ QPainter painter(&pixmap);
+ renderer.render(&painter, pixmap.rect());
+
+ // set cursor's horizontal hotspot
+ if (right_aligned) {
+ hotX = pixmap.width() - hotX;
+ }
+
+ // return cursor
+ return QCursor(pixmap, hotX, hotY);
}
void init_custom_cursors(){
- qInfo() << "Initializing custom cursors";
- olive::Cursor_LeftTrim = load_cursor(":/cursors/left_side.png", 0, -1, false);
- olive::Cursor_RightTrim = load_cursor(":/cursors/right_side.png", 0, -1, true);
- qInfo() << "Finished initializing custom cursors";
+ qInfo() << "Initializing custom cursors";
+ olive::Cursor_LeftTrim = load_cursor(":/cursors/1_left.svg");
+ olive::Cursor_RightTrim = load_cursor(":/cursors/1_right.svg");
+ olive::Cursor_LeftRipple = load_cursor(":/cursors/3_left.svg");
+ olive::Cursor_RightRipple = load_cursor(":/cursors/3_right.svg");
+ olive::Cursor_Slip = load_cursor(":/cursors/4.svg");
+ olive::Cursor_Razor = load_cursor(":/cursors/5.svg");
+ qInfo() << "Finished initializing custom cursors";
}
diff --git a/ui/cursors.h b/ui/cursors.h
index 737ba44f2..41c329d05 100644
--- a/ui/cursors.h
+++ b/ui/cursors.h
@@ -28,6 +28,10 @@ void init_custom_cursors();
namespace olive{
extern QCursor Cursor_LeftTrim;
extern QCursor Cursor_RightTrim;
+ extern QCursor Cursor_LeftRipple;
+ extern QCursor Cursor_RightRipple;
+ extern QCursor Cursor_Slip;
+ extern QCursor Cursor_Razor;
}
#endif // CURSORS_H
diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp
index 3af65e0cb..2561c7f94 100644
--- a/ui/timelinewidget.cpp
+++ b/ui/timelinewidget.cpp
@@ -2653,9 +2653,9 @@ void TimelineWidget::mouseMoveEvent(QMouseEvent *event) {
if (found) {
if (panel_timeline->trim_type == TRIM_IN) { // if we're trimming an IN point
- setCursor(olive::Cursor_LeftTrim);
+ setCursor(panel_timeline->tool == TIMELINE_TOOL_RIPPLE ? olive::Cursor_LeftRipple : olive::Cursor_LeftTrim);
} else { // if we're trimming an OUT point
- setCursor(olive::Cursor_RightTrim);
+ setCursor(panel_timeline->tool == TIMELINE_TOOL_RIPPLE ? olive::Cursor_RightRipple : olive::Cursor_RightTrim);
}
} else {
@@ -2691,7 +2691,7 @@ void TimelineWidget::mouseMoveEvent(QMouseEvent *event) {
// we're not currently performing any slipping, all we do here is set the cursor if mouse is hovering over a
// cursor
if (getClipIndexFromCoords(panel_timeline->cursor_frame, panel_timeline->cursor_track) > -1) {
- setCursor(Qt::SizeHorCursor);
+ setCursor(olive::Cursor_Slip);
} else {
unsetCursor();
}