Skip to content

Commit

Permalink
add bar color transition
Browse files Browse the repository at this point in the history
  • Loading branch information
jsmolka committed Jul 9, 2018
1 parent 63644a2 commit b12f3db
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 17 deletions.
2 changes: 1 addition & 1 deletion egg-player.pri
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
RC_ICONS = resource/images/egg/egg.ico

VERSION = 0.1.4.24
VERSION = 0.1.4.25

QMAKE_TARGET = Egg Player
QMAKE_TARGET_PRODUCT = Egg Player
Expand Down
6 changes: 4 additions & 2 deletions egg-player.pro
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ HEADERS += \
src/widgets/components/slider.hpp \
src/widgets/components/smoothtablewidget.hpp \
src/widgets/components/tablewidget.hpp \
src/widgets/layouts/borderlayout.hpp
src/widgets/layouts/borderlayout.hpp \
src/widgets/components/colortransitionwidget.hpp

SOURCES += \
src/main.cpp \
Expand Down Expand Up @@ -119,4 +120,5 @@ SOURCES += \
src/widgets/components/slider.cpp \
src/widgets/components/smoothtablewidget.cpp \
src/widgets/components/tablewidget.cpp \
src/widgets/layouts/borderlayout.cpp
src/widgets/layouts/borderlayout.cpp \
src/widgets/components/colortransitionwidget.cpp
3 changes: 2 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ A Groove Music like music player.

## Changes since lastest release
- add smooth scrolling
- add bar color transition
- add seamless device transition
- improve [bass.dll](http://www.un4seen.com/) integration
- improve song transition
Expand All @@ -34,6 +35,7 @@ A Groove Music like music player.
- add an option audio objects to show that is loaded from the cache
- cache builder
- only load covers for new and outdated audios
- rewrite library

### Reactive cache
- use a file system watcher
Expand All @@ -50,7 +52,6 @@ A Groove Music like music player.

### User interface
- do not show certain info at low size
- color transition in bar
- fuzzy library searching
- [expand scrollbar](https://stackoverflow.com/a/23677355/7057528)
- [scrollable text](https://stackoverflow.com/a/10655396/7057528)
12 changes: 2 additions & 10 deletions src/widgets/barwidget.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "barwidget.hpp"

BarWidget::BarWidget(QWidget *parent)
: QWidget(parent)
: ColorTransitionWidget(parent)
, m_coverLabel(this)
, m_trackLabel(this)
, m_currentTimeLabel(this)
Expand Down Expand Up @@ -124,7 +124,7 @@ void BarWidget::onPlayerAudioChanged(Audio *audio)
m_lengthSlider.setRange(0, audio->duration());
m_lengthSlider.setEnabled(true);

setColor(ColorUtil::background(cover));
startTransition(ColorUtil::background(cover));
}

void BarWidget::onPlayerStateChanged()
Expand Down Expand Up @@ -220,7 +220,6 @@ void BarWidget::onShortcutVolumeDownPressed()

void BarWidget::setup()
{
setAutoFillBackground(true);
setColor(ColorUtil::background(Util::cover()));
setFixedHeight(cfgBar->height());
setStyleSheet(FileUtil::Css::bar());
Expand Down Expand Up @@ -285,13 +284,6 @@ void BarWidget::setupUi()
setLayout(layout);
}

void BarWidget::setColor(const QColor &color)
{
QPalette palette;
palette.setColor(QPalette::Background, color);
setPalette(palette);
}

void BarWidget::setButtonVisibility(bool visible)
{
m_previousButton.setVisible(visible);
Expand Down
5 changes: 2 additions & 3 deletions src/widgets/barwidget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <QWidget>

#include "cache.hpp"
#include "colortransitionwidget.hpp"
#include "colorutil.hpp"
#include "config.hpp"
#include "constants.hpp"
Expand All @@ -16,7 +17,7 @@
#include "player.hpp"
#include "shortcut.hpp"

class BarWidget : public QWidget
class BarWidget : public ColorTransitionWidget
{
Q_OBJECT

Expand Down Expand Up @@ -59,8 +60,6 @@ private slots:
void setup();
void setupUi();

void setColor(const QColor &color);

void setButtonVisibility(bool visible);

void setVolumeConfig(int volume);
Expand Down
94 changes: 94 additions & 0 deletions src/widgets/components/colortransitionwidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#include "colortransitionwidget.hpp"

ColorTransitionWidget::ColorTransitionWidget(QWidget *parent)
: QWidget(parent)
, m_duration(250)
, m_fps(60)
, m_transitionTimer(this)
{
setup();

connect(&m_transitionTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
}

ColorTransitionWidget::~ColorTransitionWidget()
{

}

void ColorTransitionWidget::stopTransition()
{
m_transitionTimer.stop();
}

void ColorTransitionWidget::setTransitionDuration(int duration)
{
m_duration = duration;
}

int ColorTransitionWidget::transitionDuration()
{
return m_duration;
}

void ColorTransitionWidget::setTransitionFps(int fps)
{
m_fps = fps;
}

int ColorTransitionWidget::transitionFps()
{
return m_fps;
}

void ColorTransitionWidget::setColor(const QColor &color)
{
QPalette palette;
palette.setColor(QPalette::Background, color);
setPalette(palette);
}

QColor ColorTransitionWidget::color() const
{
return palette().color(QPalette::Background);
}

void ColorTransitionWidget::startTransition(const QColor &color)
{
m_currentStep = 0;
m_totalSteps = static_cast<double>(m_fps * m_duration) / 1000.0;

QColor current = this->color();
m_r = current.red();
m_g = current.green();
m_b = current.blue();

m_stepR = (static_cast<double>(color.red()) - m_r) / static_cast<double>(m_totalSteps);
m_stepG = (static_cast<double>(color.green()) - m_g) / static_cast<double>(m_totalSteps);
m_stepB = (static_cast<double>(color.blue()) - m_b) / static_cast<double>(m_totalSteps);

m_transitionTimer.start(1.0 / static_cast<double>(m_fps) * 1000.0);
emit transitionStarted();
}

void ColorTransitionWidget::onTimeout()
{
m_currentStep++;

m_r += m_stepR;
m_g += m_stepG;
m_b += m_stepB;

setColor(QColor(m_r, m_g, m_b));

if (m_currentStep == m_totalSteps)
{
m_transitionTimer.stop();
emit transitionFinished();
}
}

void ColorTransitionWidget::setup()
{
setAutoFillBackground(true);
}
55 changes: 55 additions & 0 deletions src/widgets/components/colortransitionwidget.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#ifndef COLORTRANSITIONWIDGET_HPP
#define COLORTRANSITIONWIDGET_HPP

#include <QColor>
#include <QPalette>
#include <QTimer>
#include <QWidget>

class ColorTransitionWidget : public QWidget
{
Q_OBJECT

public:
ColorTransitionWidget(QWidget *parent = nullptr);
~ColorTransitionWidget();

void setTransitionDuration(int duration);
int transitionDuration();

void setTransitionFps(int fps);
int transitionFps();

void setColor(const QColor &color);
QColor color() const;

void startTransition(const QColor &color);
void stopTransition();

signals:
void transitionStarted();
void transitionFinished();

private slots:
void onTimeout();

private:
void setup();

int m_duration;
int m_fps;
int m_totalSteps;
int m_currentStep;

double m_stepR;
double m_stepG;
double m_stepB;

double m_r;
double m_g;
double m_b;

QTimer m_transitionTimer;
};

#endif // COLORTRANSITIONWIDGET_HPP

0 comments on commit b12f3db

Please sign in to comment.