Skip to content

Commit

Permalink
Update to latest media control files
Browse files Browse the repository at this point in the history
  • Loading branch information
cg2121 committed Jan 16, 2025
1 parent 3d489cd commit 03dc7a8
Show file tree
Hide file tree
Showing 13 changed files with 431 additions and 367 deletions.
8 changes: 3 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ endif()

target_sources(
${CMAKE_PROJECT_NAME}
PRIVATE src/clickable-label.hpp
PRIVATE src/absolute-slider.cpp
src/absolute-slider.hpp
src/clickable-label.hpp
src/media-controls.cpp
src/media-controls.hpp
src/media-controls.ui
Expand All @@ -45,14 +47,10 @@ target_sources(
src/media-edit.cpp
src/media-edit.hpp
src/MediaEdit.ui
src/media-slider.cpp
src/media-slider.hpp
src/plugin-support.c.in
src/plugin-support.h
src/scene-tree.cpp
src/scene-tree.hpp
src/slider-absoluteset-style.cpp
src/slider-absoluteset-style.hpp
src/slider-ignorewheel.cpp
src/slider-ignorewheel.hpp
src/soundboard.cpp
Expand Down
97 changes: 97 additions & 0 deletions src/absolute-slider.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#include "moc_absolute-slider.cpp"

AbsoluteSlider::AbsoluteSlider(QWidget *parent) : SliderIgnoreScroll(parent)
{
installEventFilter(this);
setMouseTracking(true);
}

AbsoluteSlider::AbsoluteSlider(Qt::Orientation orientation, QWidget *parent) : SliderIgnoreScroll(orientation, parent)
{
installEventFilter(this);
setMouseTracking(true);
}

void AbsoluteSlider::mousePressEvent(QMouseEvent *event)
{
dragging = (event->buttons() & Qt::LeftButton || event->buttons() & Qt::MiddleButton);

if (dragging) {
setSliderDown(true);
setValue(posToRangeValue(event));
emit AbsoluteSlider::sliderMoved(posToRangeValue(event));
}

event->accept();
}

void AbsoluteSlider::mouseReleaseEvent(QMouseEvent *event)
{
dragging = false;
setSliderDown(false);
event->accept();
}

void AbsoluteSlider::mouseMoveEvent(QMouseEvent *event)
{
int val = posToRangeValue(event);

if (val > maximum())
val = maximum();
else if (val < minimum())
val = minimum();

emit absoluteSliderHovered(val);

if (dragging) {
setValue(posToRangeValue(event));
emit AbsoluteSlider::sliderMoved(posToRangeValue(event));
}

QSlider::mouseMoveEvent(event);
event->accept();
}

bool AbsoluteSlider::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) {
return true;
}
}

return QSlider::eventFilter(obj, event);
}

int AbsoluteSlider::posToRangeValue(QMouseEvent *event)
{
QStyleOptionSlider opt;
initStyleOption(&opt);

int pos;
int sliderMin;
int sliderMax;
int handleLength;

const QRect groove = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
const QRect handle = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);

if (orientation() == Qt::Horizontal) {
pos = event->pos().x();
handleLength = handle.width();
sliderMin = groove.left() + (handleLength / 2);
sliderMax = groove.right() - (handleLength / 2) + 1;
} else {
pos = event->pos().y();
handleLength = handle.height();
sliderMin = groove.top() + (handleLength / 2);
sliderMax = groove.bottom() - (handleLength / 2) + 1;
}

int sliderValue = style()->sliderValueFromPosition(minimum(), maximum(), pos - sliderMin, sliderMax - sliderMin,
opt.upsideDown);

return sliderValue;
}
26 changes: 26 additions & 0 deletions src/absolute-slider.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#pragma once

#include <QMouseEvent>
#include <slider-ignorewheel.hpp>

class AbsoluteSlider : public SliderIgnoreScroll {
Q_OBJECT

public:
AbsoluteSlider(QWidget *parent = nullptr);
AbsoluteSlider(Qt::Orientation orientation, QWidget *parent = nullptr);

signals:
void absoluteSliderHovered(int value);

protected:
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual bool eventFilter(QObject *obj, QEvent *event) override;

int posToRangeValue(QMouseEvent *event);

private:
bool dragging = false;
};
Loading

0 comments on commit 03dc7a8

Please sign in to comment.