diff --git a/plugins/tools/tool_transform2/kis_tool_transform_config_widget.h b/plugins/tools/tool_transform2/kis_tool_transform_config_widget.h --- a/plugins/tools/tool_transform2/kis_tool_transform_config_widget.h +++ b/plugins/tools/tool_transform2/kis_tool_transform_config_widget.h @@ -112,6 +112,8 @@ void notifyEditingFinished(); + void slotGranularityChanged(int value); + private: // rad being in |R, the returned value is in [0; 360] double radianToDegree(double rad); diff --git a/plugins/tools/tool_transform2/kis_tool_transform_config_widget.cpp b/plugins/tools/tool_transform2/kis_tool_transform_config_widget.cpp --- a/plugins/tools/tool_transform2/kis_tool_transform_config_widget.cpp +++ b/plugins/tools/tool_transform2/kis_tool_transform_config_widget.cpp @@ -53,6 +53,7 @@ chkWorkRecursively->setChecked(workRecursively); connect(chkWorkRecursively, SIGNAL(toggled(bool)), this, SIGNAL(sigRestartTransform())); + connect(changeGranularity,SIGNAL(valueChanged(int)),this,SLOT(slotGranularityChanged(int))); // Init Filter combo cmbFilter->setIDList(KisFilterStrategyRegistry::instance()->listKeys()); @@ -1295,3 +1296,11 @@ config->setEditingTransformPoints(value); notifyConfigChanged(); } + +void KisToolTransformConfigWidget::slotGranularityChanged(int value) +{ + if (m_uiSlotsBlocked) return; + ToolTransformArgs *config = m_transaction->currentConfig(); + config->setPixelPrecision(value); + notifyConfigChanged(); +} diff --git a/plugins/tools/tool_transform2/kis_transform_utils.cpp b/plugins/tools/tool_transform2/kis_transform_utils.cpp --- a/plugins/tools/tool_transform2/kis_transform_utils.cpp +++ b/plugins/tools/tool_transform2/kis_transform_utils.cpp @@ -265,7 +265,7 @@ KisCageTransformWorker worker(device, config.origPoints(), updater, - 8); + config.pixelPrecision()); worker.prepareTransform(); worker.setTransformedCage(config.transfPoints()); @@ -327,7 +327,7 @@ KisCageTransformWorker worker(0, config.origPoints(), 0, - 8); + config.pixelPrecision()); worker.setTransformedCage(config.transfPoints()); result = worker.approxNeedRect(rc, srcBounds); } else if (config.mode() == ToolTransformArgs::LIQUIFY) { @@ -359,7 +359,7 @@ KisCageTransformWorker worker(0, config.origPoints(), 0, - 8); + config.pixelPrecision()); worker.setTransformedCage(config.transfPoints()); result = worker.approxChangeRect(rc); diff --git a/plugins/tools/tool_transform2/tool_transform_args.h b/plugins/tools/tool_transform2/tool_transform_args.h --- a/plugins/tools/tool_transform2/tool_transform_args.h +++ b/plugins/tools/tool_transform2/tool_transform_args.h @@ -92,6 +92,14 @@ m_mode = mode; } + inline int pixelPrecision() const { + return m_pixelPrecision; + } + + inline void setPixelPrecision(int precision) { + m_pixelPrecision = precision; + } + //warp-related inline int numPoints() const { KIS_ASSERT_RECOVER_NOOP(m_origPoints.size() == m_transfPoints.size()); @@ -330,6 +338,7 @@ * operations should revert to it. */ QScopedPointer m_continuedTransformation; + int m_pixelPrecision; }; #endif // TOOL_TRANSFORM_ARGS_H_ diff --git a/plugins/tools/tool_transform2/tool_transform_args.cc b/plugins/tools/tool_transform2/tool_transform_args.cc --- a/plugins/tools/tool_transform2/tool_transform_args.cc +++ b/plugins/tools/tool_transform2/tool_transform_args.cc @@ -246,6 +246,7 @@ , m_shearX(shearX) , m_shearY(shearY) , m_liquifyProperties(new KisLiquifyProperties()) + , m_pixelPrecision(8) { setFilterId(filterId); } diff --git a/plugins/tools/tool_transform2/wdg_tool_transform.ui b/plugins/tools/tool_transform2/wdg_tool_transform.ui --- a/plugins/tools/tool_transform2/wdg_tool_transform.ui +++ b/plugins/tools/tool_transform2/wdg_tool_transform.ui @@ -38,21 +38,6 @@ Qt::LeftToRight - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - @@ -250,7 +235,7 @@ QFrame::Raised - 0 + 2 @@ -1434,7 +1419,7 @@ - &Flexibility: + Fle&xibility: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1516,7 +1501,7 @@ - Subd&ivide + Subdi&vide true @@ -1642,6 +1627,12 @@ + + Qt::LeftToRight + + + false + @@ -1669,15 +1660,66 @@ true - De&form Layer + Defor&m Layer cageTransformButtonGroup - + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + Adjust Granularity + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + Set Granularity + + + Qt::ImhNone + + + 20 + + + 8 + + + + + Qt::Vertical @@ -2200,8 +2242,8 @@ - +