diff --git a/krita/plugins/extensions/modify_selection/dlg_feather_selection.cc b/krita/plugins/extensions/modify_selection/dlg_feather_selection.cc --- a/krita/plugins/extensions/modify_selection/dlg_feather_selection.cc +++ b/krita/plugins/extensions/modify_selection/dlg_feather_selection.cc @@ -51,7 +51,7 @@ spbGroup->addWidget(spbRadius); spbGroup->addWidget(spbRadiusDouble); - connect(spbRadius, SIGNAL(valueChanged(int)), this, SLOT(slotRadiusChanged(int))); + connect(spbRadius, SIGNAL(valueChanged(double)), this, SLOT(slotRadiusChanged(double))); connect(spbRadiusDouble, SIGNAL(valueChanged(double)), this, SLOT(slotRadiusChanged(double))); connect(cmbUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUnitChanged(int))); } diff --git a/krita/plugins/tools/defaulttools/kis_tool_move.h b/krita/plugins/tools/defaulttools/kis_tool_move.h --- a/krita/plugins/tools/defaulttools/kis_tool_move.h +++ b/krita/plugins/tools/defaulttools/kis_tool_move.h @@ -30,8 +30,6 @@ #include #include #include -#include -#include class KoCanvasBase; @@ -41,7 +39,6 @@ { Q_OBJECT Q_ENUMS(MoveToolMode); - Q_PROPERTY(MoveToolMode moveToolMode READ moveToolMode WRITE setMoveToolMode NOTIFY moveToolModeChanged); Q_PROPERTY(bool moveInProgress READ moveInProgress NOTIFY moveInProgressChanged); public: KisToolMove(KoCanvasBase * canvas); @@ -87,14 +84,12 @@ virtual void paint(QPainter& gc, const KoViewConverter &converter); virtual QWidget* createOptionWidget(); + void updateUIUnit(int newUnit); MoveToolMode moveToolMode() const; bool moveInProgress() const; public Q_SLOTS: - void setMoveToolMode(MoveToolMode newMode); - void slotWidgetRadioToggled(bool checked); void moveDiscrete(MoveDirection direction); - void slotSetMoveStep(int newMoveStep); Q_SIGNALS: void moveToolModeChanged(); @@ -117,11 +112,10 @@ KisStrokeId m_strokeId; - MoveToolMode m_moveToolMode; bool m_moveInProgress; KisNodeSP m_currentlyProcessingNode; - KConfigGroup configGroup; - int m_moveStep; + + int m_resolution; QAction * m_actionMoveUp; QAction * m_actionMoveDown; diff --git a/krita/plugins/tools/defaulttools/kis_tool_move.cc b/krita/plugins/tools/defaulttools/kis_tool_move.cc --- a/krita/plugins/tools/defaulttools/kis_tool_move.cc +++ b/krita/plugins/tools/defaulttools/kis_tool_move.cc @@ -24,7 +24,6 @@ #include -#include #include "kis_cursor.h" #include "kis_selection.h" @@ -44,7 +43,6 @@ { setObjectName("tool_move"); m_optionsWidget = 0; - m_moveToolMode = MoveSelectedLayer; m_moveInProgress = false; KisActionRegistry *actionRegistry = KisActionRegistry::instance(); @@ -130,10 +128,11 @@ m_accumulatedOffset = QPoint(); } - QPoint offset = direction == Up ? QPoint( 0, -m_moveStep) : - direction == Down ? QPoint( 0, m_moveStep) : - direction == Left ? QPoint(-m_moveStep, 0) : - QPoint( m_moveStep, 0) ; + int moveStep = m_optionsWidget->moveStep(); + QPoint offset = direction == Up ? QPoint( 0, -moveStep) : + direction == Down ? QPoint( 0, moveStep) : + direction == Left ? QPoint(-moveStep, 0) : + QPoint( moveStep, 0) ; image->addJob(m_strokeId, new MoveStrokeStrategy::Data(m_accumulatedOffset + offset)); m_accumulatedOffset += offset; @@ -147,7 +146,6 @@ void KisToolMove::activate(ToolActivation toolActivation, const QSet &shapes) { KisTool::activate(toolActivation, shapes); - configGroup = KSharedConfig::openConfig()->group(toolId()); } @@ -176,7 +174,7 @@ void KisToolMove::beginPrimaryAction(KoPointerEvent *event) { - startAction(event, m_moveToolMode); + startAction(event, moveToolMode()); } void KisToolMove::continuePrimaryAction(KoPointerEvent *event) @@ -192,7 +190,7 @@ void KisToolMove::beginAlternateAction(KoPointerEvent *event, AlternateAction action) { if (action == PickFgNode) { - MoveToolMode mode = m_moveToolMode; + MoveToolMode mode = moveToolMode(); if (mode == MoveSelectedLayer || mode == MoveGroup) { mode = MoveFirstLayer; @@ -348,83 +346,33 @@ QWidget* KisToolMove::createOptionWidget() { - m_optionsWidget = new MoveToolOptionsWidget(0); + if (!currentImage()) + return 0; + + m_optionsWidget = new MoveToolOptionsWidget(0, currentImage()->xRes(), toolId()); // See https://bugs.kde.org/show_bug.cgi?id=316896 QWidget *specialSpacer = new QWidget(m_optionsWidget); specialSpacer->setObjectName("SpecialSpacer"); specialSpacer->setFixedSize(0, 0); m_optionsWidget->layout()->addWidget(specialSpacer); m_optionsWidget->setFixedHeight(m_optionsWidget->sizeHint().height()); - - connect(m_optionsWidget->radioSelectedLayer, SIGNAL(toggled(bool)), - this, SLOT(slotWidgetRadioToggled(bool))); - connect(m_optionsWidget->radioFirstLayer, SIGNAL(toggled(bool)), - this, SLOT(slotWidgetRadioToggled(bool))); - connect(m_optionsWidget->radioGroup, SIGNAL(toggled(bool)), - this, SLOT(slotWidgetRadioToggled(bool))); - - connect(m_optionsWidget->sliderMoveStep, SIGNAL(valueChanged(int)), - this, SLOT(slotSetMoveStep(int))); - - - - // load config for correct radio button - MoveToolMode newMode = static_cast(configGroup.readEntry("moveToolMode", 0)); - if(newMode == MoveSelectedLayer) - m_optionsWidget->radioSelectedLayer->setChecked(true); - else if (newMode == MoveFirstLayer) - m_optionsWidget->radioFirstLayer->setChecked(true); - else - m_optionsWidget->radioGroup->setChecked(true); - - m_moveToolMode = newMode; // set the internal variable for calculations - - - // Keyboard shortcut move step - m_optionsWidget->sliderMoveStep->setRange(1, 50); - int moveStep = configGroup.readEntry("moveToolStep", 5); - m_optionsWidget->sliderMoveStep->setValue(moveStep); - m_moveStep = moveStep; - return m_optionsWidget; } -void KisToolMove::setMoveToolMode(KisToolMove::MoveToolMode newMode) -{ - m_moveToolMode = newMode; - configGroup.writeEntry("moveToolMode", static_cast(newMode)); -} - -void KisToolMove::slotSetMoveStep(int newMoveStep) -{ - m_moveStep = newMoveStep; - configGroup.writeEntry("moveToolStep", newMoveStep); -} - KisToolMove::MoveToolMode KisToolMove::moveToolMode() const { - return m_moveToolMode; + if (m_optionsWidget) + return m_optionsWidget->mode(); + return MoveSelectedLayer; } bool KisToolMove::moveInProgress() const { return m_moveInProgress; } -void KisToolMove::slotWidgetRadioToggled(bool checked) -{ - Q_UNUSED(checked); - QObject* from = sender(); - if(from == m_optionsWidget->radioSelectedLayer) - setMoveToolMode(MoveSelectedLayer); - else if(from == m_optionsWidget->radioFirstLayer) - setMoveToolMode(MoveFirstLayer); - else if(from == m_optionsWidget->radioGroup) - setMoveToolMode(MoveGroup); -} - QPoint KisToolMove::applyModifiers(Qt::KeyboardModifiers modifiers, QPoint pos) { QPoint adjustedPos = pos; diff --git a/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.h b/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.h --- a/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.h +++ b/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.h @@ -21,12 +21,37 @@ #define KIS_TOOL_MOVETOOLOPTIONSWIDGET_H #include "ui_wdgmovetool.h" +#include +#include "kis_tool_move.h" class MoveToolOptionsWidget : public QWidget, public Ui::WdgMoveTool { Q_OBJECT public: - MoveToolOptionsWidget(QWidget *parent); + MoveToolOptionsWidget(QWidget *parent, int resolution, QString toolId); + int moveStep(); + KisToolMove::MoveToolMode mode(); + +private Q_SLOTS: + void on_spinMoveStep_valueChanged(double UIMoveStep); + + void on_cmbUnit_currentIndexChanged(int newUnit); + + void on_radioSelectedLayer_toggled(bool checked); + + void on_radioFirstLayer_toggled(bool checked); + + void on_radioGroup_toggled(bool checked); + +private: + void updateUIUnit(int newUnit); + void setMoveToolMode(KisToolMove::MoveToolMode newMode); + int m_resolution; + int m_moveStep; + int m_moveStepUnit; + KisToolMove::MoveToolMode m_moveToolMode; + + KConfigGroup m_configGroup; }; #endif // KIS_TOOL_MOVETOOLOPTIONSWIDGET_H diff --git a/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.cpp b/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.cpp --- a/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.cpp +++ b/krita/plugins/tools/defaulttools/kis_tool_movetooloptionswidget.cpp @@ -18,7 +18,102 @@ #include "kis_tool_movetooloptionswidget.h" +#include +#include -MoveToolOptionsWidget::MoveToolOptionsWidget(QWidget *parent) : QWidget(parent) { + +MoveToolOptionsWidget::MoveToolOptionsWidget(QWidget *parent, int resolution, QString toolId) + : QWidget(parent) + , m_resolution(resolution) +{ setupUi(this); + m_configGroup = KSharedConfig::openConfig()->group(toolId); + + + // load radio button + m_moveToolMode = static_cast(m_configGroup.readEntry("moveToolMode", 0)); + if(m_moveToolMode == KisToolMove::MoveSelectedLayer) + radioSelectedLayer->setChecked(true); + else if (m_moveToolMode == KisToolMove::MoveFirstLayer) + radioFirstLayer->setChecked(true); + else + radioGroup->setChecked(true); + + // Keyboard shortcut move step + m_moveStep = m_configGroup.readEntry("moveToolStep", 1); + m_moveStepUnit = m_configGroup.readEntry("moveToolUnit", KoUnit(KoUnit::Pixel).indexInListForUi()); + cmbUnit->addItems(KoUnit::listOfUnitNameForUi()); + cmbUnit->setCurrentIndex(m_moveStepUnit); + updateUIUnit(m_moveStepUnit); +} + +void MoveToolOptionsWidget::updateUIUnit(int newUnit) +{ + const KoUnit selectedUnit = KoUnit::fromListForUi(newUnit); + qreal valueForUI; + if (selectedUnit != KoUnit(KoUnit::Pixel)) { + spinMoveStep->setRange(0.0001, 10000.000); + spinMoveStep->setSingleStep(.1); + spinMoveStep->setDecimals(4); + valueForUI = selectedUnit.toUserValue((qreal)m_moveStep / (qreal)m_resolution); + } else { + spinMoveStep->setRange(1, 10000); + spinMoveStep->setSingleStep(1); + spinMoveStep->setDecimals(0); + valueForUI = m_moveStep; + } + + spinMoveStep->blockSignals(true); + spinMoveStep->setValue(valueForUI); + spinMoveStep->blockSignals(false); +} + +void MoveToolOptionsWidget::on_spinMoveStep_valueChanged(double UIMoveStep) +{ + const KoUnit selectedUnit = KoUnit::fromListForUi(m_moveStepUnit); + const double scaledUiMoveStep = (selectedUnit == KoUnit(KoUnit::Pixel)) ? + UIMoveStep : selectedUnit.fromUserValue(UIMoveStep * m_resolution); + m_moveStep = qRound(scaledUiMoveStep); + m_configGroup.writeEntry("moveToolStep", m_moveStep); +} + +void MoveToolOptionsWidget::on_cmbUnit_currentIndexChanged(int newUnit) +{ + m_moveStepUnit = newUnit; + updateUIUnit(newUnit); + m_configGroup.writeEntry("moveToolUnit", newUnit); +} + +void MoveToolOptionsWidget::on_radioSelectedLayer_toggled(bool checked) +{ + Q_UNUSED(checked); + setMoveToolMode(KisToolMove::MoveSelectedLayer); +} + +void MoveToolOptionsWidget::on_radioFirstLayer_toggled(bool checked) +{ + Q_UNUSED(checked); + setMoveToolMode(KisToolMove::MoveFirstLayer); +} + +void MoveToolOptionsWidget::on_radioGroup_toggled(bool checked) +{ + Q_UNUSED(checked); + setMoveToolMode(KisToolMove::MoveGroup); +} + +void MoveToolOptionsWidget::setMoveToolMode(KisToolMove::MoveToolMode newMode) +{ + m_moveToolMode = newMode; + m_configGroup.writeEntry("moveToolMode", static_cast(newMode)); +} + +KisToolMove::MoveToolMode MoveToolOptionsWidget::mode() +{ + return m_moveToolMode; +} + +int MoveToolOptionsWidget::moveStep() +{ + return m_moveStep; } diff --git a/krita/plugins/tools/defaulttools/wdgmovetool.ui b/krita/plugins/tools/defaulttools/wdgmovetool.ui --- a/krita/plugins/tools/defaulttools/wdgmovetool.ui +++ b/krita/plugins/tools/defaulttools/wdgmovetool.ui @@ -65,12 +65,24 @@ Shortcut Move Distance - - - - Number of pixels to move after move shortcut keypress. - - + + + + 1 + + + 100000 + + + 1 + + + Number of pixels to move after move shortcut keypress. + + + + +