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 @@ -625,6 +625,9 @@ else cageDeformRadio->setChecked(true); + changeGranularity->setCurrentIndex(log2(config.pixelPrecision()) - 2); + granularityPreview->setCurrentIndex(log2(config.previewPixelPrecision()) - 2); + } } else if (config.mode() == ToolTransformArgs::LIQUIFY) { 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 @@ -78,7 +78,8 @@ KisWarpTransformWorker::WarpType warpType, double alpha, bool defaultPoints, - const QString &filterId); + const QString &filterId, + int pixelPrecision, int previewPixelPrecision); ~ToolTransformArgs(); ToolTransformArgs& operator=(const ToolTransformArgs& args); 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 @@ -98,8 +98,8 @@ m_filter = args.m_filter; m_flattenedPerspectiveTransform = args.m_flattenedPerspectiveTransform; m_editTransformPoints = args.m_editTransformPoints; - m_pixelPrecision = 8; - m_previewPixelPrecision = 16; + m_pixelPrecision = args.pixelPrecision(); + m_previewPixelPrecision = args.previewPixelPrecision(); if (args.m_liquifyWorker) { m_liquifyWorker.reset(new KisLiquifyTransformWorker(*args.m_liquifyWorker.data())); @@ -233,7 +233,8 @@ KisWarpTransformWorker::WarpType warpType, double alpha, bool defaultPoints, - const QString &filterId) + const QString &filterId, + int pixelPrecision, int previewPixelPrecision) : m_mode(mode) , m_defaultPoints(defaultPoints) , m_origPoints {QVector()} @@ -252,8 +253,8 @@ , m_shearX(shearX) , m_shearY(shearY) , m_liquifyProperties(new KisLiquifyProperties()) - , m_pixelPrecision(8) - , m_previewPixelPrecision(16) + , m_pixelPrecision(pixelPrecision) + , m_previewPixelPrecision(previewPixelPrecision) { setFilterId(filterId); } @@ -366,6 +367,11 @@ KisDomUtils::saveValue(&warpEl, "warpType", (int)m_warpType); // limited! KisDomUtils::saveValue(&warpEl, "alpha", m_alpha); + if(m_mode == CAGE){ + KisDomUtils::saveValue(&warpEl,"pixelPrecision",m_pixelPrecision); + KisDomUtils::saveValue(&warpEl,"previewPixelPrecision",m_previewPixelPrecision); + } + } else if (m_mode == LIQUIFY) { QDomElement liqEl = doc.createElement("liquify_transform"); e->appendChild(liqEl); @@ -445,6 +451,12 @@ KisDomUtils::loadValue(warpEl, "warpType", &warpType) && KisDomUtils::loadValue(warpEl, "alpha", &args.m_alpha); + if(args.m_mode == CAGE){ + result = result && + KisDomUtils::loadValue(warpEl, "pixelPrecision", &args.m_pixelPrecision) && + KisDomUtils::loadValue(warpEl, "previewPixelPrecision", &args.m_previewPixelPrecision); + } + if (result && warpType >= 0 && warpType < KisWarpTransformWorker::N_MODES) { args.m_warpType = (KisWarpTransformWorker::WarpType_) warpType; } else {