diff --git a/app/widget/resizablescrollbar/resizabletimelinescrollbar.cpp b/app/widget/resizablescrollbar/resizabletimelinescrollbar.cpp
new file mode 100644
index 000000000..0e71e1f5a
--- /dev/null
+++ b/app/widget/resizablescrollbar/resizabletimelinescrollbar.cpp
@@ -0,0 +1,123 @@
+/***
+
+ Olive - Non-Linear Video Editor
+ Copyright (C) 2020 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 .
+
+***/
+
+#include "resizabletimelinescrollbar.h"
+
+#include
+#include
+#include
+#include
+
+namespace olive {
+
+ResizableTimelineScrollBar::ResizableTimelineScrollBar(QWidget* parent) :
+ ResizableScrollBar(parent),
+ points_(nullptr),
+ scale_(1.0)
+{
+}
+
+ResizableTimelineScrollBar::ResizableTimelineScrollBar(Qt::Orientation orientation, QWidget* parent) :
+ ResizableScrollBar(orientation, parent),
+ points_(nullptr),
+ scale_(1.0)
+{
+}
+
+void ResizableTimelineScrollBar::ConnectTimelinePoints(TimelinePoints *points)
+{
+ if (points_) {
+ disconnect(points_->workarea(), &TimelineWorkArea::RangeChanged, this, static_cast(&ResizableTimelineScrollBar::update));
+ disconnect(points_->workarea(), &TimelineWorkArea::EnabledChanged, this, static_cast(&ResizableTimelineScrollBar::update));
+ disconnect(points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast(&ResizableTimelineScrollBar::update));
+ disconnect(points_->markers(), &TimelineMarkerList::MarkerRemoved, this, static_cast(&ResizableTimelineScrollBar::update));
+ }
+
+ points_ = points;
+
+ if (points_) {
+ connect(points_->workarea(), &TimelineWorkArea::RangeChanged, this, static_cast(&ResizableTimelineScrollBar::update));
+ connect(points_->workarea(), &TimelineWorkArea::EnabledChanged, this, static_cast(&ResizableTimelineScrollBar::update));
+ connect(points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast(&ResizableTimelineScrollBar::update));
+ connect(points_->markers(), &TimelineMarkerList::MarkerRemoved, this, static_cast(&ResizableTimelineScrollBar::update));
+ }
+
+ update();
+}
+
+void ResizableTimelineScrollBar::SetScale(double d)
+{
+ scale_ = d;
+
+ update();
+}
+
+void ResizableTimelineScrollBar::paintEvent(QPaintEvent *event)
+{
+ ResizableScrollBar::paintEvent(event);
+
+ if (points_
+ && !timebase().isNull()
+ && (points_->workarea()->enabled() || !points_->markers()->list().isEmpty())) {
+ QStyleOptionSlider opt;
+ initStyleOption(&opt);
+
+ QRect gr = style()->subControlRect(QStyle::CC_ScrollBar, &opt,
+ QStyle::SC_ScrollBarGroove, this);
+
+ double ratio = scale_ * double(gr.width()) / double(this->maximum() + gr.width());
+
+ qDebug() << "Calculated ratio as:" << ratio << "from groove" << gr.width() << "vs max:" << this->maximum();
+
+ QPainter p(this);
+
+ if (points_->workarea()->enabled()) {
+ QColor workarea_color(this->palette().highlight().color());
+ workarea_color.setAlpha(128);
+
+ int in = qRound(ratio * TimeToScene(points_->workarea()->in()));
+ int out = qRound(ratio * TimeToScene(points_->workarea()->out()));
+ int length = qMax(1, out-in);
+
+ p.fillRect(gr.x() + in,
+ 0,
+ length,
+ height(),
+ workarea_color);
+ }
+
+ if (!points_->markers()->list().isEmpty()) {
+ QColor marker_color(0, 255, 0, 128);
+ foreach (TimelineMarker* marker, points_->markers()->list()) {
+ int in = qRound(ratio * TimeToScene(marker->time().in()));
+ int out = qRound(ratio * TimeToScene(marker->time().out()));
+ int length = qMax(1, out-in);
+
+ p.fillRect(gr.x() + in,
+ 0,
+ length,
+ height(),
+ marker_color);
+ }
+ }
+ }
+}
+
+}
diff --git a/app/widget/resizablescrollbar/resizabletimelinescrollbar.h b/app/widget/resizablescrollbar/resizabletimelinescrollbar.h
new file mode 100644
index 000000000..6c82a5dd9
--- /dev/null
+++ b/app/widget/resizablescrollbar/resizabletimelinescrollbar.h
@@ -0,0 +1,53 @@
+/***
+
+ Olive - Non-Linear Video Editor
+ Copyright (C) 2020 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 .
+
+***/
+
+#ifndef RESIZABLETIMELINESCROLLBAR_H
+#define RESIZABLETIMELINESCROLLBAR_H
+
+#include "resizablescrollbar.h"
+#include "timeline/timelinepoints.h"
+#include "widget/timelinewidget/timelinescaledobject.h"
+
+namespace olive {
+
+class ResizableTimelineScrollBar : public ResizableScrollBar, public TimelineScaledObject
+{
+ Q_OBJECT
+public:
+ ResizableTimelineScrollBar(QWidget* parent = nullptr);
+ ResizableTimelineScrollBar(Qt::Orientation orientation, QWidget* parent = nullptr);
+
+ void ConnectTimelinePoints(TimelinePoints* points);
+
+ void SetScale(double d);
+
+protected:
+ virtual void paintEvent(QPaintEvent* event) override;
+
+private:
+ TimelinePoints* points_;
+
+ double scale_;
+
+};
+
+}
+
+#endif // RESIZABLETIMELINESCROLLBAR_H