diff --git a/krita/krita.action b/krita/krita.action
--- a/krita/krita.action
+++ b/krita/krita.action
@@ -204,6 +204,18 @@
false
+
+
+ Use multiple of 2 for pixel scale
+ Use multiple of 2 for pixel scale
+ Use multiple of 2 for pixel scale
+ Use multiple of 2 for pixel scale
+ 1
+ 0
+
+ true
+
+
diff --git a/libs/ui/KisViewManager.cpp b/libs/ui/KisViewManager.cpp
--- a/libs/ui/KisViewManager.cpp
+++ b/libs/ui/KisViewManager.cpp
@@ -705,6 +705,7 @@
a = actionManager()->createAction("edit_blacklist_cleanup");
connect(a, SIGNAL(triggered()), this, SLOT(slotBlacklistCleanup()));
+ actionManager()->createAction("ruler_pixel_multiple2");
d->showRulersAction = actionManager()->createAction("view_ruler");
d->showRulersAction->setChecked(cfg.showRulers());
connect(d->showRulersAction, SIGNAL(toggled(bool)), SLOT(slotSaveShowRulersState(bool)));
diff --git a/libs/ui/canvas/kis_guides_config.h b/libs/ui/canvas/kis_guides_config.h
--- a/libs/ui/canvas/kis_guides_config.h
+++ b/libs/ui/canvas/kis_guides_config.h
@@ -26,6 +26,7 @@
#include
#include
#include
+#include
class QDomElement;
class QDomDocument;
@@ -89,6 +90,12 @@
bool snapToGuides() const;
void setSnapToGuides(bool value);
+ bool rulersMultiple2() const;
+ void setRulersMultiple2(bool value);
+
+ KoUnit::Type unitType() const;
+ void setUnitType(KoUnit::Type type);
+
LineTypeInternal guidesLineType() const;
void setGuidesLineType(LineTypeInternal value);
@@ -111,6 +118,8 @@
QDomElement saveToXml(QDomDocument& doc, const QString &tag) const;
bool loadFromXml(const QDomElement &parent);
+ bool isDefault() const;
+
private:
class Private;
const QScopedPointer d;
diff --git a/libs/ui/canvas/kis_guides_config.cpp b/libs/ui/canvas/kis_guides_config.cpp
--- a/libs/ui/canvas/kis_guides_config.cpp
+++ b/libs/ui/canvas/kis_guides_config.cpp
@@ -36,6 +36,8 @@
: showGuides(false)
, snapToGuides(false)
, lockGuides(false)
+ , rulersMultiple2(false)
+ , unitType(KoUnit::Pixel)
{}
bool operator==(const Private &rhs) {
@@ -45,15 +47,20 @@
snapToGuides == rhs.snapToGuides &&
lockGuides == rhs.lockGuides &&
guidesColor == rhs.guidesColor &&
- guidesLineType == rhs.guidesLineType;
+ guidesLineType == rhs.guidesLineType &&
+ rulersMultiple2 == rhs.rulersMultiple2 &&
+ unitType == rhs.unitType;
}
QList horzGuideLines;
QList vertGuideLines;
bool showGuides;
bool snapToGuides;
bool lockGuides;
+ bool rulersMultiple2;
+
+ KoUnit::Type unitType;
QColor guidesColor;
LineTypeInternal guidesLineType;
@@ -149,6 +156,26 @@
d->snapToGuides = value;
}
+bool KisGuidesConfig::rulersMultiple2() const
+{
+ return d->rulersMultiple2;
+}
+
+void KisGuidesConfig::setRulersMultiple2(bool value)
+{
+ d->rulersMultiple2 = value;
+}
+
+KoUnit::Type KisGuidesConfig::unitType() const
+{
+ return d->unitType;
+}
+
+void KisGuidesConfig::setUnitType(const KoUnit::Type type)
+{
+ d->unitType = type;
+}
+
KisGuidesConfig::LineTypeInternal
KisGuidesConfig::guidesLineType() const
{
@@ -222,6 +249,10 @@
KisDomUtils::saveValue(&guidesElement, "horizontalGuides", d->horzGuideLines.toVector());
KisDomUtils::saveValue(&guidesElement, "verticalGuides", d->vertGuideLines.toVector());
+ KisDomUtils::saveValue(&guidesElement, "rulersMultiple2", d->rulersMultiple2);
+ KoUnit tmp(d->unitType);
+ KisDomUtils::saveValue(&guidesElement, "unit", tmp.symbol());
+
return guidesElement;
}
@@ -242,5 +273,24 @@
d->horzGuideLines = QList::fromVector(hGuides);
d->vertGuideLines = QList::fromVector(vGuides);
+ result &= KisDomUtils::loadValue(parent, "rulersMultiple2", &d->rulersMultiple2);
+ QString unit;
+ result &= KisDomUtils::loadValue(parent, "unit", &unit);
+ bool ok = false;
+ KoUnit tmp = KoUnit::fromSymbol(unit, &ok);
+ if (ok) {
+ d->unitType = tmp.type();
+ }
+ result &= ok;
+
+
return result;
}
+
+bool KisGuidesConfig::isDefault() const
+{
+ KisGuidesConfig defaultObject;
+ defaultObject.loadStaticData();
+
+ return *this == defaultObject;
+}
diff --git a/libs/ui/canvas/kis_guides_manager.h b/libs/ui/canvas/kis_guides_manager.h
--- a/libs/ui/canvas/kis_guides_manager.h
+++ b/libs/ui/canvas/kis_guides_manager.h
@@ -22,6 +22,7 @@
#include
#include
#include "kritaui_export.h"
+#include
class KisView;
class KisActionManager;
@@ -42,6 +43,9 @@
bool showGuides() const;
bool lockGuides() const;
bool snapToGuides() const;
+ bool rulersMultiple2() const;
+
+ KoUnit::Type unitType() const;
bool eventFilter(QObject *obj, QEvent *event) override;
@@ -55,6 +59,8 @@
void setShowGuides(bool value);
void setLockGuides(bool value);
void setSnapToGuides(bool value);
+ void setRulersMultiple2(bool value);
+ void setUnitType(KoUnit::Type type);
void slotGuideCreationInProgress(Qt::Orientation orientation, const QPoint &globalPos);
void slotGuideCreationFinished(Qt::Orientation orientation, const QPoint &globalPos);
diff --git a/libs/ui/canvas/kis_guides_manager.cpp b/libs/ui/canvas/kis_guides_manager.cpp
--- a/libs/ui/canvas/kis_guides_manager.cpp
+++ b/libs/ui/canvas/kis_guides_manager.cpp
@@ -166,6 +166,11 @@
m_d->updateSnappingStatus(value);
}
+ if (m_d->view) {
+ m_d->view->document()->setUnit(KoUnit(m_d->guidesConfig.unitType()));
+ m_d->view->viewManager()->actionManager()->actionByName("ruler_pixel_multiple2")->setChecked(value.rulersMultiple2());
+ }
+
emit sigRequestUpdateGuidesConfig(m_d->guidesConfig);
}
@@ -269,6 +274,28 @@
setGuidesConfigImpl(m_d->guidesConfig);
}
+bool KisGuidesManager::rulersMultiple2() const
+{
+ return m_d->guidesConfig.rulersMultiple2();
+}
+
+void KisGuidesManager::setRulersMultiple2(bool value)
+{
+ m_d->guidesConfig.setRulersMultiple2(value);
+ setGuidesConfigImpl(m_d->guidesConfig);
+}
+
+KoUnit::Type KisGuidesManager::unitType() const
+{
+ return m_d->guidesConfig.unitType();
+}
+
+void KisGuidesManager::setUnitType(const KoUnit::Type type)
+{
+ m_d->guidesConfig.setUnitType(type);
+ setGuidesConfigImpl(m_d->guidesConfig);
+}
+
void KisGuidesManager::setup(KisActionManager *actionManager)
{
KisAction *action = 0;
diff --git a/libs/ui/kis_zoom_manager.h b/libs/ui/kis_zoom_manager.h
--- a/libs/ui/kis_zoom_manager.h
+++ b/libs/ui/kis_zoom_manager.h
@@ -82,6 +82,7 @@
void zoomTo100();
void applyRulersUnit(const KoUnit &baseUnit);
void setMinMaxZoom();
+ void setRulersPixelMultiple2(bool enabled);
private:
diff --git a/libs/ui/kis_zoom_manager.cc b/libs/ui/kis_zoom_manager.cc
--- a/libs/ui/kis_zoom_manager.cc
+++ b/libs/ui/kis_zoom_manager.cc
@@ -48,6 +48,8 @@
#include "kis_canvas_resource_provider.h"
#include "kis_lod_transform.h"
#include "kis_snap_line_strategy.h"
+#include "kis_guides_config.h"
+#include "kis_guides_manager.h"
class KisZoomController : public KoZoomController
@@ -133,11 +135,18 @@
m_verticalRuler->setVisible(false);
+ QAction *rulerAction = actionCollection->action("ruler_pixel_multiple2");
+ if (m_view->document()->guidesConfig().rulersMultiple2()) {
+ m_horizontalRuler->setUnitPixelMultiple2(true);
+ m_verticalRuler->setUnitPixelMultiple2(true);
+ }
QList unitActions = m_view->createChangeUnitActions(true);
+ unitActions.append(rulerAction);
m_horizontalRuler->setPopupActionList(unitActions);
m_verticalRuler->setPopupActionList(unitActions);
connect(m_view->document(), SIGNAL(unitChanged(const KoUnit&)), SLOT(applyRulersUnit(const KoUnit&)));
+ connect(rulerAction, SIGNAL(toggled(bool)), SLOT(setRulersPixelMultiple2(bool)));
layout->addWidget(m_horizontalRuler, 0, 1);
layout->addWidget(m_verticalRuler, 1, 0);
@@ -252,6 +261,18 @@
m_horizontalRuler->setUnit(KoUnit(baseUnit.type(), m_view->image()->xRes()));
m_verticalRuler->setUnit(KoUnit(baseUnit.type(), m_view->image()->yRes()));
}
+ if (m_view->viewManager()) {
+ m_view->viewManager()->guidesManager()->setUnitType(baseUnit.type());
+ }
+}
+
+void KisZoomManager::setRulersPixelMultiple2(bool enabled)
+{
+ m_horizontalRuler->setUnitPixelMultiple2(enabled);
+ m_verticalRuler->setUnitPixelMultiple2(enabled);
+ if (m_view->viewManager()) {
+ m_view->viewManager()->guidesManager()->setRulersMultiple2(enabled);
+ }
}
void KisZoomManager::setMinMaxZoom()
diff --git a/libs/widgets/KoRuler.h b/libs/widgets/KoRuler.h
--- a/libs/widgets/KoRuler.h
+++ b/libs/widgets/KoRuler.h
@@ -239,6 +239,8 @@
*/
void createGuideToolConnection(KoCanvasBase *canvas);
+ void setUnitPixelMultiple2(bool enabled);
+
Q_SIGNALS:
/**
* emitted when any of the indents is moved by the user.
diff --git a/libs/widgets/KoRuler.cpp b/libs/widgets/KoRuler.cpp
--- a/libs/widgets/KoRuler.cpp
+++ b/libs/widgets/KoRuler.cpp
@@ -709,7 +709,8 @@
distancesPaintingStrategy((PaintingStrategy*)new HorizontalDistancesPaintingStrategy()),
paintingStrategy(normalPaintingStrategy),
ruler(parent),
- guideCreationStarted(false)
+ guideCreationStarted(false),
+ pixelStep(100.0)
{
}
@@ -732,7 +733,7 @@
return 10.0;
case KoUnit::Point:
default:
- return 100.0;
+ return pixelStep;
}
}
@@ -1368,3 +1369,13 @@
connect(this, SIGNAL(guideLineCreated(Qt::Orientation,qreal)),
tool, SLOT(createGuideLine(Qt::Orientation,qreal)));
}
+
+void KoRuler::setUnitPixelMultiple2(bool enabled)
+{
+ if (enabled) {
+ d->pixelStep = 64.0;
+ }
+ else {
+ d->pixelStep = 100.0;
+ }
+}
diff --git a/libs/widgets/KoRuler_p.h b/libs/widgets/KoRuler_p.h
--- a/libs/widgets/KoRuler_p.h
+++ b/libs/widgets/KoRuler_p.h
@@ -195,6 +195,8 @@
bool guideCreationStarted;
+ qreal pixelStep;
+
qreal numberStepForUnit() const;
/// @return The rounding of value to the nearest multiple of stepValue
qreal doSnapping(const qreal value) const;
diff --git a/plugins/impex/libkra/kis_kra_saver.cpp b/plugins/impex/libkra/kis_kra_saver.cpp
--- a/plugins/impex/libkra/kis_kra_saver.cpp
+++ b/plugins/impex/libkra/kis_kra_saver.cpp
@@ -414,7 +414,7 @@
{
KisGuidesConfig guides = m_d->doc->guidesConfig();
- if (guides.hasGuides()) {
+ if (!guides.isDefault()) {
QDomElement guidesElement = guides.saveToXml(doc, "guides");
element.appendChild(guidesElement);
}