Skip to content

Commit

Permalink
Make canvas zoom sliders step by proper increments
Browse files Browse the repository at this point in the history
Instead of stepping by 1%, which is not particularly useful, they now
use the same increments as the zoom in/out action and mouse wheel.
  • Loading branch information
askmeaboutlo0m committed Apr 29, 2024
1 parent 724d3af commit 80f43d4
Show file tree
Hide file tree
Showing 13 changed files with 62 additions and 11 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Unreleased Version 2.2.2-pre
* Feature: Always show drawing tools toolbar in small screen mode. Thanks Blozzom for suggesting.
* Fix: Increase contrast on depressed buttons in dark themes. This is a patch to Qt. Thanks MorrowShore for reporting.
* Fix: Switch out the icon for the extension buttons on squashed menus and toolbars so that they're actually visible in dark themes. This is a patch to Qt.
* Feature: Make canvas zoom slider use the same increments as the mouse wheel and zoom in/out actions, since stepping by 1% is not useful. Thanks zheida for suggesting.

2024-02-25 Version 2.2.2-beta.1
* Server Feature: Allow adding a message when kicking someone through the admin API.
Expand Down
2 changes: 2 additions & 0 deletions src/desktop/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,8 @@ target_sources(drawpile PRIVATE
widgets/viewstatus.h
widgets/viewstatusbar.cpp
widgets/viewstatusbar.h
widgets/zoomslider.cpp
widgets/zoomslider.h
)

target_link_libraries(drawpile PRIVATE
Expand Down
7 changes: 5 additions & 2 deletions src/desktop/docks/navigator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include "desktop/docks/navigator.h"
#include "desktop/main.h"
#include "desktop/widgets/groupedtoolbutton.h"
#include "desktop/widgets/kis_slider_spin_box.h"
#include "desktop/widgets/zoomslider.h"
#include "libclient/canvas/canvasmodel.h"
#include "libclient/canvas/paintengine.h"
#include "libclient/canvas/userlist.h"
Expand Down Expand Up @@ -486,7 +486,7 @@ Navigator::Navigator(QWidget *parent)
m_resetZoomButton->setIcon(QIcon::fromTheme("zoom-original"));
titlebar->addCustomWidget(m_resetZoomButton);

m_zoomSlider = new KisDoubleSliderSpinBox{this};
m_zoomSlider = new widgets::ZoomSlider(this);
m_zoomSlider->setMinimumWidth(0);
m_zoomSlider->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
m_zoomSlider->setMinimum(zoomMin * 100.0);
Expand All @@ -501,6 +501,9 @@ Navigator::Navigator(QWidget *parent)
connect(m_view, &NavigatorView::wheelZoom, this, &Navigator::wheelZoom);
connect(m_resetZoomButton, &widgets::GroupedToolButton::clicked, this, [this] { emit zoomChanged(1.0); });
connect(m_zoomSlider, QOverload<double>::of(&KisDoubleSliderSpinBox::valueChanged), this, &Navigator::updateZoom);
connect(
m_zoomSlider, &widgets::ZoomSlider::zoomStepped, this,
&Navigator::wheelZoom, Qt::QueuedConnection);

QAction *showCursorsAction = new QAction(tr("Show Cursors"), m_view);
showCursorsAction->setCheckable(true);
Expand Down
4 changes: 2 additions & 2 deletions src/desktop/docks/navigator.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

#include "desktop/docks/dockbase.h"

class KisDoubleSliderSpinBox;
class QMenu;

namespace canvas {
Expand All @@ -15,6 +14,7 @@ class PaintEngine;

namespace widgets{
class GroupedToolButton;
class ZoomSlider;
}

namespace docks {
Expand Down Expand Up @@ -114,7 +114,7 @@ private slots:
void zoomChanged(qreal newZoom);

private:
KisDoubleSliderSpinBox *m_zoomSlider;
widgets::ZoomSlider *m_zoomSlider;
widgets::GroupedToolButton *m_resetZoomButton;
NavigatorView *m_view;
bool m_updating;
Expand Down
3 changes: 3 additions & 0 deletions src/desktop/scene/scenewrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,9 @@ void SceneWrapper::connectViewStatus(widgets::ViewStatus *viewStatus)
connect(
m_view, &CanvasView::viewTransformed, viewStatus,
&widgets::ViewStatus::setTransformation);
connect(
viewStatus, &widgets::ViewStatus::zoomStepped, m_view,
&CanvasView::zoomSteps);
connect(
viewStatus, &widgets::ViewStatus::zoomChanged, m_view,
&CanvasView::setZoom);
Expand Down
3 changes: 3 additions & 0 deletions src/desktop/view/viewwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,9 @@ void ViewWrapper::connectViewStatus(widgets::ViewStatus *viewStatus)
connect(
m_controller, &CanvasController::transformChanged, viewStatus,
&widgets::ViewStatus::setTransformation);
connect(
viewStatus, &widgets::ViewStatus::zoomStepped, m_controller,
&CanvasController::zoomSteps);
connect(
viewStatus, &widgets::ViewStatus::zoomChanged, m_controller,
&CanvasController::setZoom);
Expand Down
2 changes: 1 addition & 1 deletion src/desktop/widgets/kis_double_parse_spin_box.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class KisDoubleParseSpinBox : public QDoubleSpinBox
* uses @ref setValue
* @param steps Number of steps that the value should change
*/
void stepBy(int steps) final override;
void stepBy(int steps) override;
/**
* @brief Set the value of the spinbox
*
Expand Down
2 changes: 1 addition & 1 deletion src/desktop/widgets/kis_int_parse_spin_box.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class KisIntParseSpinBox : public QSpinBox
* uses @ref setValue
* @param steps Number of steps that the value should change
*/
void stepBy(int steps) final override;
void stepBy(int steps) override;
/**
* @brief Set the value of the spinbox
*
Expand Down
4 changes: 2 additions & 2 deletions src/desktop/widgets/kis_slider_spin_box.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class KisSliderSpinBoxPrivate;
* The "soft range" is considered valid if the "soft maximum" is greater than
* the "soft minimum".
*/
class KisSliderSpinBox final : public KisIntParseSpinBox
class KisSliderSpinBox : public KisIntParseSpinBox
{
Q_OBJECT
public:
Expand Down Expand Up @@ -206,7 +206,7 @@ class KisSliderSpinBox final : public KisIntParseSpinBox
*
* @see KisSliderSpinBox
*/
class KisDoubleSliderSpinBox final : public KisDoubleParseSpinBox
class KisDoubleSliderSpinBox : public KisDoubleParseSpinBox
{
Q_OBJECT
public:
Expand Down
6 changes: 5 additions & 1 deletion src/desktop/widgets/viewstatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "desktop/widgets/groupedtoolbutton.h"
#include "desktop/widgets/kis_slider_spin_box.h"
#include "desktop/widgets/KisAngleGauge.h"
#include "desktop/widgets/zoomslider.h"
#include "libclient/settings.h"
#include "libshared/util/qtcompat.h"

Expand Down Expand Up @@ -95,7 +96,7 @@ ViewStatus::ViewStatus(QWidget *parent)
layout->addWidget(m_angleBox);

// Zoom slider
m_zoomSlider = new KisDoubleSliderSpinBox{this};
m_zoomSlider = new ZoomSlider(this);
m_zoomSlider->setMinimumWidth(24);
m_zoomSlider->setMaximumWidth(200);
m_zoomSlider->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum));
Expand All @@ -105,6 +106,9 @@ ViewStatus::ViewStatus(QWidget *parent)
m_zoomSlider->setValue(100.0);
m_zoomSlider->setSuffix("%");
connect(m_zoomSlider, QOverload<double>::of(&KisDoubleSliderSpinBox::valueChanged), this, &ViewStatus::zoomSliderChanged);
connect(
m_zoomSlider, &ZoomSlider::zoomStepped, this, &ViewStatus::zoomStepped,
Qt::QueuedConnection);

// Zoom preset button
m_zoomPreset = new widgets::GroupedToolButton(this);
Expand Down
5 changes: 3 additions & 2 deletions src/desktop/widgets/viewstatus.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@

#include <QWidget>

class KisDoubleSliderSpinBox;
class QComboBox;
class QMenu;

namespace widgets {

class GroupedToolButton;
class KisAngleGauge;
class ZoomSlider;

class ViewStatus final : public QWidget
{
Expand All @@ -28,6 +28,7 @@ public slots:
void setTransformation(qreal zoom, qreal angle);

signals:
void zoomStepped(int steps);
void zoomChanged(qreal newZoom);
void angleChanged(qreal newAngle);

Expand All @@ -41,7 +42,7 @@ private slots:
private:
void updatePalette();

KisDoubleSliderSpinBox *m_zoomSlider;
ZoomSlider *m_zoomSlider;
KisAngleGauge *m_compass;
QComboBox *m_angleBox;
bool m_updating;
Expand Down
17 changes: 17 additions & 0 deletions src/desktop/widgets/zoomslider.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "desktop/widgets/zoomslider.h"

namespace widgets {

ZoomSlider::ZoomSlider(QWidget *parent)
: KisDoubleSliderSpinBox(parent)
{
}

void ZoomSlider::stepBy(int steps)
{
if(steps != 0) {
emit zoomStepped(steps);
}
}

}
17 changes: 17 additions & 0 deletions src/desktop/widgets/zoomslider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "desktop/widgets/kis_slider_spin_box.h"

namespace widgets {

class ZoomSlider : public KisDoubleSliderSpinBox {
Q_OBJECT
public:
ZoomSlider(QWidget *parent);

void stepBy(int steps) override;

signals:
void zoomStepped(int steps);
};

}

0 comments on commit 80f43d4

Please sign in to comment.