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); }