From 6c1b7c83ec8b41c83559e58bd823908af4bce6b8 Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Sun, 2 Feb 2025 19:45:26 +0100 Subject: [PATCH] Debounce writing the setting to cache when adjusting card sizes. (#5550) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Debounce writing the setting to cache when adjusting card sizes. * Lint. --------- Co-authored-by: Lukas BrĂ¼bach --- .../ui/widgets/cards/card_size_widget.cpp | 19 +++++++++++++------ .../ui/widgets/cards/card_size_widget.h | 6 +++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp index 4efb1f44d..d6ce09247 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.cpp @@ -32,6 +32,17 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defa connect(cardSizeSlider, &QSlider::valueChanged, flowWidget, &FlowWidget::setMinimumSizeToMaxSizeHint); } + // Debounce setup + debounceTimer.setSingleShot(true); + connect(&debounceTimer, &QTimer::timeout, this, [this]() { + // Check the type of the parent widget + if (qobject_cast(parentWidget())) { + SettingsCache::instance().setPrintingSelectorCardSize(pendingValue); + } else if (qobject_cast(parentWidget())) { + SettingsCache::instance().setVisualDeckStorageCardSize(pendingValue); + } + }); + connect(cardSizeSlider, &QSlider::valueChanged, this, &CardSizeWidget::updateCardSizeSetting); } @@ -42,12 +53,8 @@ CardSizeWidget::CardSizeWidget(QWidget *parent, FlowWidget *flowWidget, int defa */ void CardSizeWidget::updateCardSizeSetting(int newValue) { - // Check the type of the parent widget - if ((parent = qobject_cast(parentWidget()))) { - SettingsCache::instance().setPrintingSelectorCardSize(newValue); - } else if ((parent = qobject_cast(parentWidget()))) { - SettingsCache::instance().setVisualDeckStorageCardSize(newValue); - } + pendingValue = newValue; + debounceTimer.start(300); // 300ms debounce time } /** diff --git a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h index 4bc2afc98..d79359f23 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_size_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_size_widget.h @@ -6,6 +6,7 @@ #include #include #include +#include #include class CardSizeWidget : public QWidget @@ -15,15 +16,18 @@ class CardSizeWidget : public QWidget public: explicit CardSizeWidget(QWidget *parent, FlowWidget *flowWidget = nullptr, int defaultValue = 100); [[nodiscard]] QSlider *getSlider() const; - QWidget *parent; + public slots: void updateCardSizeSetting(int newValue); private: + QWidget *parent; FlowWidget *flowWidget; QHBoxLayout *cardSizeLayout; QLabel *cardSizeLabel; QSlider *cardSizeSlider; + QTimer debounceTimer; // Debounce timer + int pendingValue; // Stores the latest slider value }; #endif // CARD_SIZE_WIDGET_H