diff --git a/libs/image/kis_cage_transform_worker.cpp b/libs/image/kis_cage_transform_worker.cpp --- a/libs/image/kis_cage_transform_worker.cpp +++ b/libs/image/kis_cage_transform_worker.cpp @@ -164,7 +164,6 @@ // no need to process empty devices if (srcBounds.isEmpty()) return; - m_d->gridSize = GridIterationTools::calcGridSize(srcBounds, m_d->pixelPrecision); @@ -172,7 +171,6 @@ GridIterationTools::processGrid(pointsOp, srcBounds, m_d->pixelPrecision); const int numPoints = pointsOp.m_points.size(); - KIS_ASSERT_RECOVER_RETURN(numPoints == m_d->gridSize.width() * m_d->gridSize.height()); m_d->allSrcPoints = pointsOp.m_points; diff --git a/plugins/tools/tool_transform2/kis_cage_transform_strategy.cpp b/plugins/tools/tool_transform2/kis_cage_transform_strategy.cpp --- a/plugins/tools/tool_transform2/kis_cage_transform_strategy.cpp +++ b/plugins/tools/tool_transform2/kis_cage_transform_strategy.cpp @@ -88,13 +88,11 @@ const QPointF &srcOffset, QPointF *dstOffset) { - Q_UNUSED(currentArgs); - KisCageTransformWorker worker(srcImage, srcOffset, origPoints, 0, - 16); + currentArgs.previewPixelPrecision()); worker.prepareTransform(); worker.setTransformedCage(transfPoints); return worker.runOnQImage(dstOffset); 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,7 +112,8 @@ void notifyEditingFinished(); - void slotGranularityChanged(int value); + void slotGranularityChanged(QString value); + void slotPreviewGranularityChanged(QString value); private: // rad being in |R, the returned value is in [0; 360] 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,7 +53,17 @@ chkWorkRecursively->setChecked(workRecursively); connect(chkWorkRecursively, SIGNAL(toggled(bool)), this, SIGNAL(sigRestartTransform())); - connect(changeGranularity,SIGNAL(valueChanged(int)),this,SLOT(slotGranularityChanged(int))); + + QStringList granularityValues({"2","4","8","16","32"}); + changeGranularity->addItems(granularityValues); + changeGranularity->setCurrentIndex(2); + granularityPreview->addItems(granularityValues); + granularityPreview->setCurrentIndex(3); + + connect(changeGranularity,SIGNAL(currentIndexChanged(QString)), + this,SLOT(slotGranularityChanged(QString))); + connect(granularityPreview, SIGNAL(currentIndexChanged(QString)), + this,SLOT(slotPreviewGranularityChanged(QString))); // Init Filter combo cmbFilter->setIDList(KisFilterStrategyRegistry::instance()->listKeys()); @@ -1297,10 +1307,18 @@ notifyConfigChanged(); } -void KisToolTransformConfigWidget::slotGranularityChanged(int value) +void KisToolTransformConfigWidget::slotGranularityChanged(QString value) +{ + if (m_uiSlotsBlocked) return; + ToolTransformArgs *config = m_transaction->currentConfig(); + config->setPixelPrecision(value.toInt()); + notifyConfigChanged(); +} + +void KisToolTransformConfigWidget::slotPreviewGranularityChanged(QString value) { if (m_uiSlotsBlocked) return; ToolTransformArgs *config = m_transaction->currentConfig(); - config->setPixelPrecision(value); + config->setPreviewPixelPrecision(value.toInt()); notifyConfigChanged(); } 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 @@ -100,6 +100,14 @@ m_pixelPrecision = precision; } + inline int previewPixelPrecision() const { + return m_previewPixelPrecision; + } + + inline void setPreviewPixelPrecision(int precision) { + m_previewPixelPrecision = precision; + } + //warp-related inline int numPoints() const { KIS_ASSERT_RECOVER_NOOP(m_origPoints.size() == m_transfPoints.size()); @@ -338,7 +346,7 @@ * operations should revert to it. */ QScopedPointer m_continuedTransformation; - int m_pixelPrecision; + int m_pixelPrecision, m_previewPixelPrecision; }; #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 @@ -48,6 +48,8 @@ , m_shearX(0.0) , m_shearY(0.0) , m_liquifyProperties(new KisLiquifyProperties()) + , m_pixelPrecision(8) + , m_previewPixelPrecision(16) { KConfigGroup configGroup = KSharedConfig::openConfig()->group("KisToolTransform"); QString savedFilterId = configGroup.readEntry("filterId", "Bicubic"); @@ -247,6 +249,7 @@ , m_shearY(shearY) , m_liquifyProperties(new KisLiquifyProperties()) , m_pixelPrecision(8) + , m_previewPixelPrecision(16) { 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 @@ -6,8 +6,8 @@ 0 0 - 489 - 674 + 499 + 709 @@ -1677,46 +1677,58 @@ - 20 - 20 + 17 + 17 - + Adjust Granularity - - - - 0 - 0 - - - - - 60 - 16777215 - - - - Set Granularity - - - Qt::ImhNone - - - 20 - - - 8 - - + + + + + Real + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + Preview + + + + + + + @@ -1725,8 +1737,8 @@ - 20 - 40 + 17 + 411 @@ -2242,8 +2254,8 @@ + -