Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding WVuMeterGL as alternative for WVuMeter #10893

Merged
merged 41 commits into from
Oct 4, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
16031cc
converted wvumeter into a qglwidget and rendering it just like wspinny
m0dB Sep 11, 2022
ed12162
use parseVuMeter modeled after parseSpinny
m0dB Sep 12, 2022
28dca42
make sure we have renderered at least once before skipping rendering …
m0dB Sep 12, 2022
6ab425e
undo accidental formatting
m0dB Sep 12, 2022
7dd6cd3
Shade: Put all VU meters in a fixed size parent widget
daschuer Sep 13, 2022
3690186
Merge pull request #1 from daschuer/vumeter_qglwidget
m0dB Sep 13, 2022
ec81d43
set bg color from parent base color
m0dB Sep 13, 2022
6607cfc
unused variable
m0dB Sep 13, 2022
5f638a6
Merge branch '2.3' of github.com:mixxxdj/mixxx into vumeter_qglwidget
m0dB Sep 14, 2022
f2ebb93
set m_bHasRendered = false in paintEvent as suggested by @ronso0
m0dB Sep 14, 2022
3f31cce
added TODO
m0dB Sep 14, 2022
a39b7e2
Update src/widget/wvumeter.cpp
m0dB Sep 14, 2022
92be94a
remove unused var
m0dB Sep 14, 2022
bbb0b30
Merge branch 'vumeter_qglwidget' of github.com:m0dB/mixxx into vumete…
m0dB Sep 14, 2022
62a8001
moved findBaseColor to widgethelper
m0dB Sep 14, 2022
7971a40
Shade: fix layout for OpenGL VU meter
ronso0 Sep 13, 2022
ab5443e
Update src/widget/wvumeter.cpp
m0dB Sep 15, 2022
f94cc2a
Update src/skin/legacy/legacyskinparser.cpp
m0dB Sep 21, 2022
8071740
postpone deletion of vumeters, solves segfault on finalize but would …
m0dB Sep 23, 2022
f3f4ff8
Revert "postpone deletion of vumeters, solves segfault on finalize bu…
m0dB Sep 23, 2022
a075491
Merge branch '2.3' into vumeter_qglwidget
m0dB Sep 23, 2022
6bab4d6
renamed QGLWidget derived vu-meter to WVuMeterGL
m0dB Sep 23, 2022
0a94d09
added original wvumeter
m0dB Sep 23, 2022
bc38a88
added original wvumeter from 2.3
m0dB Sep 23, 2022
9d89947
Merge branch '2.3' into vumeter_qglwidget
m0dB Sep 23, 2022
a721a09
handle both WVuMeter and WVuMeterGL is WaveformWidgetFactory
m0dB Sep 23, 2022
dc8a7c8
not interesting in repaint or update calls
m0dB Sep 23, 2022
a562450
added command line argument to choose to use vumetergl or vumeter sta…
m0dB Sep 23, 2022
066bc57
formatting
m0dB Sep 23, 2022
ea1efd5
Update src/waveform/waveformwidgetfactory.cpp
m0dB Sep 25, 2022
3394ebe
WVuMeter/WVuMeterGL: remove unused includes
ronso0 Sep 24, 2022
3f8dfd2
Shade: remove redundant VU meter in sampler
ronso0 Sep 24, 2022
208ddb3
typo in comment
m0dB Sep 25, 2022
44aa76a
bringing command line parsing of --useVuMeterGL in line with parsing …
m0dB Sep 25, 2022
828b90d
use single timer (from vsyncthread) for all vumetergl updateState
m0dB Sep 25, 2022
4a1140e
removed unused member var m_timer and include correct header
m0dB Sep 25, 2022
785fd06
use <Layout>horizontal</Layout> in VU-Meter wrapper widgets
daschuer Sep 29, 2022
c9af1e0
Fix sefgault cause by a concurrent creation of platform windows.
daschuer Sep 29, 2022
0175001
Merge pull request #2 from daschuer/vumeter_qglwidget_2
m0dB Sep 29, 2022
ac80702
made vumetergl the default and simplified commandline option to disab…
m0dB Oct 3, 2022
b8dff32
Apply the GL widget workaround only for the x11 (xcb) platform
daschuer Oct 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 38 additions & 5 deletions src/skin/legacy/legacyskinparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -527,9 +527,7 @@ QList<QWidget*> LegacySkinParser::parseNode(const QDomElement& node) {
} else if (nodeName == "StarRating") {
result = wrapWidget(parseStarRating(node));
} else if (nodeName == "VuMeter") {
WVuMeter* pVuMeterWidget = parseStandardWidget<WVuMeter>(node);
WaveformWidgetFactory::instance()->addTimerListener(pVuMeterWidget);
result = wrapWidget(pVuMeterWidget);
result = wrapWidget(parseVuMeter(node));
} else if (nodeName == "StatusLight") {
result = wrapWidget(parseStandardWidget<WStatusLight>(node));
} else if (nodeName == "Display") {
Expand Down Expand Up @@ -1245,7 +1243,6 @@ QWidget* LegacySkinParser::parseRecordingDuration(const QDomElement& node) {
p->installEventFilter(m_pControllerManager->getControllerLearningEventFilter());
return p;
}

QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
if (CmdlineArgs::Instance().getSafeMode()) {
WLabel* dummy = new WLabel(m_pParent);
Expand All @@ -1255,7 +1252,6 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
}

auto* waveformWidgetFactory = WaveformWidgetFactory::instance();

if (!waveformWidgetFactory->isOpenGlAvailable() &&
!waveformWidgetFactory->isOpenGlesAvailable()) {
WLabel* dummy = new WLabel(m_pParent);
Expand Down Expand Up @@ -1288,6 +1284,43 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
return spinny;
}

QWidget* LegacySkinParser::parseVuMeter(const QDomElement& node) {
if (CmdlineArgs::Instance().getSafeMode()) {
WLabel* dummy = new WLabel(m_pParent);
//: Shown when Mixxx is running in safe mode.
dummy->setText(tr("Safe Mode Enabled"));
return dummy;
}

auto* waveformWidgetFactory = WaveformWidgetFactory::instance();
if (!waveformWidgetFactory->isOpenGlAvailable() &&
!waveformWidgetFactory->isOpenGlesAvailable()) {
WLabel* dummy = new WLabel(m_pParent);
//: Shown when Spinny can not be displayed. Please keep \n unchanged
m0dB marked this conversation as resolved.
Show resolved Hide resolved
dummy->setText(tr("No OpenGL\nsupport."));
return dummy;
}
WVuMeter* vuMeter = new WVuMeter(m_pParent);
commonWidgetSetup(node, vuMeter);

connect(waveformWidgetFactory,
&WaveformWidgetFactory::renderVuMeters,
vuMeter,
&WVuMeter::render);
connect(waveformWidgetFactory,
&WaveformWidgetFactory::swapVuMeters,
vuMeter,
&WVuMeter::swap);

vuMeter->setup(node, *m_pContext);
vuMeter->installEventFilter(m_pKeyboard);
vuMeter->installEventFilter(
m_pControllerManager->getControllerLearningEventFilter());
vuMeter->Init();

return vuMeter;
}

QWidget* LegacySkinParser::parseSearchBox(const QDomElement& node) {
// TODO(XXX): Currently this is the only opportunity to initialize
// the static configuration settings of the widget. The settings
Expand Down
1 change: 1 addition & 0 deletions src/skin/legacy/legacyskinparser.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ class LegacySkinParser : public QObject, public SkinParser {
QWidget* parseVisual(const QDomElement& node);
QWidget* parseOverview(const QDomElement& node);
QWidget* parseSpinny(const QDomElement& node);
QWidget* parseVuMeter(const QDomElement& node);

// Library widgets.
QWidget* parseTableView(const QDomElement& node);
Expand Down
13 changes: 2 additions & 11 deletions src/waveform/waveformwidgetfactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -353,17 +353,6 @@ void WaveformWidgetFactory::destroyWidgets() {
m_waveformWidgetHolders.clear();
}

void WaveformWidgetFactory::addTimerListener(WVuMeter* pWidget) {
// Do not hold the pointer to of timer listeners since they may be deleted.
// We don't activate update() or repaint() directly so listener widgets
// can decide whether to paint or not.
connect(this,
&WaveformWidgetFactory::waveformUpdateTick,
pWidget,
&WVuMeter::maybeUpdate,
Qt::DirectConnection);
}

void WaveformWidgetFactory::slotSkinLoaded() {
setWidgetTypeFromConfig();
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) && defined __WINDOWS__
Expand Down Expand Up @@ -673,6 +662,7 @@ void WaveformWidgetFactory::render() {
// WSpinnys are also double-buffered QGLWidgets, like all the waveform
// renderers. Render all the WSpinny widgets now.
emit renderSpinnies(m_vsyncThread);
emit renderVuMeters(m_vsyncThread);
m0dB marked this conversation as resolved.
Show resolved Hide resolved

// Notify all other waveform-like widgets (e.g. WSpinny's) that they should
// update.
Expand Down Expand Up @@ -729,6 +719,7 @@ void WaveformWidgetFactory::swap() {
// WSpinnys are also double-buffered QGLWidgets, like all the waveform
// renderers. Swap all the WSpinny widgets now.
emit swapSpinnies();
emit swapVuMeters();
}
//qDebug() << "swap end" << m_vsyncThread->elapsed();
m_vsyncThread->vsyncSlotFinished();
Expand Down
4 changes: 2 additions & 2 deletions src/waveform/waveformwidgetfactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,6 @@ class WaveformWidgetFactory : public QObject, public Singleton<WaveformWidgetFac
void getAvailableVSyncTypes(QList<QPair<int, QString > >* list);
void destroyWidgets();

void addTimerListener(WVuMeter* pWidget);

void startVSync(GuiTick* pGuiTick, VisualsManager* pVisualsManager);
void setVSyncType(int vsType);
int getVSyncType();
Expand All @@ -140,6 +138,8 @@ class WaveformWidgetFactory : public QObject, public Singleton<WaveformWidgetFac
void waveformMeasured(float frameRate, int droppedFrames);
void renderSpinnies(VSyncThread*);
void swapSpinnies();
void renderVuMeters(VSyncThread*);
void swapVuMeters();

public slots:
void slotSkinLoaded();
Expand Down
Loading