[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [calligra/krita-testing-kazakov] krita: Merge remote-tracking branch 'origin/calligra/2.9' into krit
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2015-06-25 20:27:52
Message-ID: E1Z8DkW-00085a-2s () scm ! kde ! org
[Download RAW message or body]

Git commit a85937b1d4a864e26d3ecc62bf58ebb0080e6d53 by Dmitry Kazakov.
Committed on 25/06/2015 at 20:27.
Pushed by dkazakov into branch 'krita-testing-kazakov'.

Merge remote-tracking branch 'origin/calligra/2.9' into krita-testing-kazakov

Conflicts:
	krita/image/CMakeLists.txt
	krita/image/kis_base_rects_walker.h
	krita/image/kis_image.cc
	krita/image/kis_stroke_strategy_undo_command_based.cpp
	krita/ui/tool/strokes/freehand_stroke.cpp

M  +17   -5    krita/image/CMakeLists.txt
M  +39   -53   krita/image/kis_async_merger.cpp
M  +66   -68   krita/image/kis_base_rects_walker.h
M  +20   -0    krita/image/kis_image.cc
M  +2    -8    krita/image/kis_mask.cc
M  +12   -2    krita/image/kis_paint_device.cc
M  +2    -2    krita/image/kis_selection_based_layer.cpp
M  +12   -0    krita/image/kis_stroke_strategy.cpp
M  +11   -0    krita/image/kis_stroke_strategy.h
M  +5    -0    krita/image/kis_stroke_strategy_undo_command_based.cpp
M  +2    -0    krita/image/kis_stroke_strategy_undo_command_based.h
M  +7    -0    krita/image/kis_types.h
M  +19   -18   krita/image/tests/kis_walkers_test.cpp
M  +13   -12   krita/plugins/paintops/colorsmudge/kis_colorsmudgeop.cpp
M  +10   -0    krita/ui/kis_zoom_manager.cc
M  +4    -0    krita/ui/kis_zoom_manager.h
M  +14   -2    krita/ui/opengl/kis_opengl_canvas2.cpp
M  +4    -0    krita/ui/tool/kis_tool_freehand_helper.cpp
M  +10   -1    krita/ui/tool/strokes/freehand_stroke.cpp

http://commits.kde.org/calligra/a85937b1d4a864e26d3ecc62bf58ebb0080e6d53

diff --cc krita/image/CMakeLists.txt
index 969533e,2ce5684..bb62650
--- a/krita/image/CMakeLists.txt
+++ b/krita/image/CMakeLists.txt
@@@ -163,7 -162,7 +162,8 @@@ set(kritaimage_LIB_SRC
     kis_update_scheduler.cpp
     kis_queues_progress_updater.cpp
     kis_composite_progress_proxy.cpp
 +   kis_sync_lod_cache_stroke_strategy.cpp
+    kis_update_time_monitor.cpp
     kis_group_layer.cc
     kis_count_visitor.cpp
     kis_histogram.cc
diff --cc krita/image/kis_async_merger.cpp
index 72a185f,62312ab..be3ed01
--- a/krita/image/kis_async_merger.cpp
+++ b/krita/image/kis_async_merger.cpp
@@@ -258,16 -254,12 +254,16 @@@ void KisAsyncMerger::startMerge(KisBase
              /* nothing to do */
          }
  
-         compositeWithProjection(currentNode, applyRect);
+         compositeWithProjection(currentLeaf, applyRect);
  
          if(item.m_position & KisMergeWalker::N_TOPMOST) {
-             writeProjection(currentNode, useTempProjections, applyRect);
+             writeProjection(currentLeaf, useTempProjections, applyRect);
              resetProjection();
          }
 +
 +        // FIXME: remove it from the inner loop and/or change to a warning!
-         Q_ASSERT(currentNode->projection()->defaultBounds()->currentLevelOfDetail() \
== ++        Q_ASSERT(currentLeaf->projection()->defaultBounds()->currentLevelOfDetail() \
==  +                 walker.levelOfDetail());
      }
  
      if(notifyClones) {
diff --cc krita/image/kis_base_rects_walker.h
index 5a28f78,28cf21d..7a52341
--- a/krita/image/kis_base_rects_walker.h
+++ b/krita/image/kis_base_rects_walker.h
@@@ -110,14 -111,9 +111,14 @@@ public
          QRect m_applyRect;
      };
  
-     typedef QStack<JobItem> NodeStack;
+     typedef QStack<JobItem> LeafStack;
  
  public:
 +    KisBaseRectsWalker()
 +        : m_levelOfDetail(0)
 +    {
 +    }
 +
      virtual ~KisBaseRectsWalker() {
      }
  
@@@ -129,17 -128,15 +133,19 @@@
          m_resultUncroppedChangeRect = requestedRect;
          m_requestedRect = requestedRect;
          m_startNode = node;
-         m_levelOfDetail = getNodeLevelOfDetail(node);
-         startTrip(node);
++        m_levelOfDetail = getNodeLevelOfDetail(startLeaf);
+         startTrip(startLeaf);
      }
  
      inline void recalculate(const QRect& requestedRect) {
          Q_ASSERT(m_startNode);
  
+         KisProjectionLeafSP startLeaf = m_startNode->projectionLeaf();
+ 
 +        // FIXME: remove it and/or change to a warning!
-         Q_ASSERT(m_levelOfDetail == getNodeLevelOfDetail(m_startNode));
++        Q_ASSERT(m_levelOfDetail == getNodeLevelOfDetail(startLeaf));
 +
-         if(isStillInGraph(m_startNode)) {
+         if(startLeaf->isStillInGraph()) {
              collectRects(m_startNode, requestedRect);
          }
          else {
@@@ -418,11 -403,6 +416,11 @@@ protected
      }
  
  private:
-     inline int getNodeLevelOfDetail(KisNodeSP node) {
-         return node->projection()->defaultBounds()->currentLevelOfDetail();
++    inline int getNodeLevelOfDetail(KisProjectionLeafSP leaf) {
++        return leaf->projection()->defaultBounds()->currentLevelOfDetail();
 +    }
 +
 +private:
      /**
       * The result variables.
       * By the end of a recursion they will store a complete
diff --cc krita/image/kis_image.cc
index 48d277b,5c78687..1d84783
--- a/krita/image/kis_image.cc
+++ b/krita/image/kis_image.cc
@@@ -195,13 -187,9 +199,15 @@@ KisImage::KisImage(KisUndoStore *undoSt
      if (m_d->startProjection) {
          m_d->scheduler = new KisUpdateScheduler(this);
          m_d->scheduler->setProgressProxy(m_d->compositeProgressProxy);
 +        m_d->scheduler->setLod0ToNStrokeStrategyFactory(
 +            boost::bind(boost::factory<KisSyncLodCacheStrokeStrategy*>(), \
KisImageWSP(this)));  +        \
m_d->scheduler->setSuspendUpdatesStrokeStrategyFactory(  +            \
boost::bind(boost::factory<KisSuspendProjectionUpdatesStrokeStrategy*>(), \
KisImageWSP(this), true));  +        \
m_d->scheduler->setResumeUpdatesStrokeStrategyFactory(  +            \
boost::bind(boost::factory<KisSuspendProjectionUpdatesStrokeStrategy*>(), \
KisImageWSP(this), false));  }
+ 
+     connect(this, SIGNAL(sigImageModified()), \
KisMemoryStatisticsServer::instance(), SLOT(notifyImageChanged()));  }
  
  KisImage::~KisImage()
@@@ -1502,13 -1489,10 +1520,15 @@@ void KisImage::enableUIUpdates(
  
  void KisImage::notifyProjectionUpdated(const QRect &rc)
  {
+     KisUpdateTimeMonitor::instance()->reportUpdateFinished(rc);
+ 
      if (!m_d->disableUIUpdateSignals) {
 -        emit sigImageUpdated(rc);
 +        int lod = currentLevelOfDetail();
 +        QRect dirtyRect = !lod ? rc : KisLodTransform::upscaledRect(rc, lod);
 +
 +        if (dirtyRect.isEmpty()) return;
 +
 +        emit sigImageUpdated(dirtyRect);
      }
  }
  
diff --cc krita/image/kis_stroke_strategy.cpp
index a4dd015,79cfc27..45cebfc
--- a/krita/image/kis_stroke_strategy.cpp
+++ b/krita/image/kis_stroke_strategy.cpp
@@@ -30,18 -31,6 +31,19 @@@ KisStrokeStrategy::KisStrokeStrategy(QS
  {
  }
  
 +KisStrokeStrategy::KisStrokeStrategy(const KisStrokeStrategy &rhs)
 +    : m_exclusive(rhs.m_exclusive),
 +      m_supportsWrapAroundMode(rhs.m_supportsWrapAroundMode),
 +      m_needsIndirectPainting(rhs.m_needsIndirectPainting),
 +      m_indirectPaintingCompositeOp(rhs.m_indirectPaintingCompositeOp),
++      m_clearsRedoOnStart(true),
 +      m_id(rhs.m_id),
 +      m_name(rhs.m_name)
 +{
 +    KIS_ASSERT_RECOVER_NOOP(!rhs.m_cancelStrokeId &&
 +                            "After the stroke has been started, no copying must \
happen");  +}
 +
  KisStrokeStrategy::~KisStrokeStrategy()
  {
  }
diff --cc krita/image/kis_stroke_strategy.h
index 02130a8,d6bd37c..0b5810b
--- a/krita/image/kis_stroke_strategy.h
+++ b/krita/image/kis_stroke_strategy.h
@@@ -79,13 -82,8 +88,14 @@@ protected
      void setSupportsWrapAroundMode(bool value);
      void setNeedsIndirectPainting(bool value);
      void setIndirectPaintingCompositeOp(const QString &id);
+     void setClearsRedoOnStart(bool value);
  
 +protected:
 +    /**
 +     * Protected c-tor, used for cloning of hi-level strategies
 +     */
 +    KisStrokeStrategy(const KisStrokeStrategy &rhs);
 +
  private:
      bool m_exclusive;
      bool m_supportsWrapAroundMode;
diff --cc krita/image/kis_stroke_strategy_undo_command_based.cpp
index 78273e4,dfb52eb..08e4d50
--- a/krita/image/kis_stroke_strategy_undo_command_based.cpp
+++ b/krita/image/kis_stroke_strategy_undo_command_based.cpp
@@@ -42,23 -42,11 +42,28 @@@ KisStrokeStrategyUndoCommandBased(cons
      enableJob(KisSimpleStrokeStrategy::JOB_DOSTROKE);
  }
  
 +KisStrokeStrategyUndoCommandBased::
 +KisStrokeStrategyUndoCommandBased(const KisStrokeStrategyUndoCommandBased &rhs,
 +                                  int levelOfDetail)
 +  : KisSimpleStrokeStrategy(rhs),
 +    m_supportsLevelOfDetail(rhs.m_supportsLevelOfDetail),
 +    m_initCommand(rhs.m_initCommand),
 +    m_finishCommand(rhs.m_finishCommand),
 +    m_undoAdapter(rhs.m_undoAdapter)
 +{
 +    // LOD_MERGE_FIXME:
 +    Q_UNUSED(levelOfDetail);
 +
 +    KIS_ASSERT_RECOVER_NOOP(!rhs.m_macroCommand &&
 +                            !rhs.m_undo &&
 +                            "After the stroke has been started, no copying must \
happen");  +}
 +
+ void KisStrokeStrategyUndoCommandBased::setUsedWhileUndoRedo(bool value)
+ {
+     setClearsRedoOnStart(!value);
+ }
+ 
  void KisStrokeStrategyUndoCommandBased::executeCommand(KUndo2CommandSP command, \
bool undo)  {
      if(!command) return;
diff --cc krita/plugins/paintops/colorsmudge/kis_colorsmudgeop.cpp
index ac83f36,c51de7e..3f6dd3b
--- a/krita/plugins/paintops/colorsmudge/kis_colorsmudgeop.cpp
+++ b/krita/plugins/paintops/colorsmudge/kis_colorsmudgeop.cpp
@@@ -35,19 -35,19 +35,20 @@@
  #include <kis_brush_based_paintop_settings.h>
  #include <kis_cross_device_color_picker.h>
  #include <kis_fixed_paint_device.h>
 +#include <kis_lod_transform.h>
  
  
- KisColorSmudgeOp::KisColorSmudgeOp(const KisBrushBasedPaintOpSettings* settings, \
                KisPainter* painter, KisNodeSP node, KisImageSP image):
-     KisBrushBasedPaintOp(settings, painter),
-     m_firstRun(true), m_image(image),
-     m_tempDev(painter->device()->createCompositionSourceDevice()),
-     m_backgroundPainter(new KisPainter(m_tempDev)),
-     m_smudgePainter(new KisPainter(m_tempDev)),
-     m_colorRatePainter(new KisPainter(m_tempDev)),
-     m_smudgeRateOption("SmudgeRate"),
-     m_colorRateOption("ColorRate"),
-     m_smudgeRadiusOption("SmudgeRadius")
+ KisColorSmudgeOp::KisColorSmudgeOp(const KisBrushBasedPaintOpSettings* settings, \
KisPainter* painter, KisNodeSP node, KisImageSP image) +     : \
KisBrushBasedPaintOp(settings, painter) +     , m_firstRun(true)
+     , m_image(image)
+     , m_tempDev(painter->device()->createCompositionSourceDevice())
+     , m_backgroundPainter(new KisPainter(m_tempDev))
+     , m_smudgePainter(new KisPainter(m_tempDev))
+     , m_colorRatePainter(new KisPainter(m_tempDev))
+     , m_smudgeRateOption()
+     , m_colorRateOption("ColorRate", KisPaintOpOption::GENERAL, false)
+     , m_smudgeRadiusOption()
  {
      Q_UNUSED(node);
  
diff --cc krita/ui/kis_zoom_manager.h
index 75c3ac1,592b9d3..3d8e344
--- a/krita/ui/kis_zoom_manager.h
+++ b/krita/ui/kis_zoom_manager.h
@@@ -74,10 -74,11 +74,14 @@@ public Q_SLOTS
      void applyRulersUnit(const KoUnit &baseUnit);
      void setMinMaxZoom();
  
+ public:
+     bool horizontalRulerVisible() const;
+     bool verticalRulerVisible() const;
+ 
  private:
 +    void nofityLevelOfDetailChange(qreal zoom);
 +
 +private:
  
      QPointer<KisView> m_view;
      KoZoomHandler * m_zoomHandler;
diff --cc krita/ui/tool/strokes/freehand_stroke.cpp
index 2f34e92,49436a6..e7e601b
--- a/krita/ui/tool/strokes/freehand_stroke.cpp
+++ b/krita/ui/tool/strokes/freehand_stroke.cpp
@@@ -23,9 -23,8 +23,11 @@@
  #include "kis_paintop_settings.h"
  #include "kis_painter.h"
  
+ #include "kis_update_time_monitor.h"
+ 
 +struct FreehandStrokeStrategy::Private
 +{
 +};
  
  FreehandStrokeStrategy::FreehandStrokeStrategy(bool needsIndirectPainting,
                                                 const QString \
&indirectPaintingCompositeOp, @@@ -51,16 -48,6 +53,17 @@@ \
FreehandStrokeStrategy::FreehandStrokeS  init(needsIndirectPainting, \
indirectPaintingCompositeOp);  }
  
 +FreehandStrokeStrategy::FreehandStrokeStrategy(const FreehandStrokeStrategy &rhs)
 +    : KisPainterBasedStrokeStrategy(rhs),
 +      m_d(new Private())
 +{
 +}
 +
 +FreehandStrokeStrategy::~FreehandStrokeStrategy()
 +{
++    KisUpdateTimeMonitor::instance()->endStrokeMeasure();
 +}
 +
  void FreehandStrokeStrategy::init(bool needsIndirectPainting,
                                    const QString &indirectPaintingCompositeOp)
  {
@@@ -68,13 -55,22 +71,17 @@@
      setIndirectPaintingCompositeOp(indirectPaintingCompositeOp);
      setSupportsWrapAroundMode(true);
      enableJob(KisSimpleStrokeStrategy::JOB_DOSTROKE);
+ 
+     KisUpdateTimeMonitor::instance()->startStrokeMeasure();
  }
  
  void FreehandStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
  {
      Data *d = dynamic_cast<Data*>(data);
 -    PainterInfo *info = d->painterInfo;
 +    PainterInfo *info = painterInfos()[d->painterInfoId];
  
+     KisUpdateTimeMonitor::instance()->reportPaintOpPreset(info->painter->preset());
+ 
      switch(d->type) {
      case Data::POINT:
          info->painter->paintAt(d->pi1, info->dragDistance);
@@@ -105,14 -101,7 +112,16 @@@
          info->painter->paintPainterPath(d->path);
      };
  
-     d->node->setDirty(info->painter->takeDirtyRegion());
+     QVector<QRect> dirtyRects = info->painter->takeDirtyRegion();
+     KisUpdateTimeMonitor::instance()->reportJobFinished(data, dirtyRects);
+     d->node->setDirty(dirtyRects);
  }
 +
 +KisStrokeStrategy* FreehandStrokeStrategy::createLodClone(int levelOfDetail)
 +{
 +    Q_UNUSED(levelOfDetail);
 +
 +    FreehandStrokeStrategy *clone = new FreehandStrokeStrategy(*this);
 +    clone->setUndoEnabled(false);
 +    return clone;
 +}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic