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

List:       kde-commits
Subject:    [krita/eingerman/T3589-healbrush] /: Removed unused include files. Code cleanup.
From:       Eugene Ingerman <null () kde ! org>
Date:       2017-04-28 7:42:03
Message-ID: E1d40XT-00017P-AB () code ! kde ! org
[Download RAW message or body]

Git commit 6ac411594c1367b9dbe2b7535954e3eadd641b66 by Eugene Ingerman.
Committed on 28/04/2017 at 07:41.
Pushed by eingerman into branch 'eingerman/T3589-healbrush'.

Removed unused include files. Code cleanup.

M  +3    -3    libs/ui/tool/kis_tool.h
M  +2    -2    plugins/tools/tool_smart_patch/kis_inpaint.cpp
M  +2    -30   plugins/tools/tool_smart_patch/kis_tool_smart_patch.cpp

https://commits.kde.org/krita/6ac411594c1367b9dbe2b7535954e3eadd641b66

diff --cc plugins/tools/tool_smart_patch/kis_tool_smart_patch.cpp
index 128e34031db,d65329bd732..3fc05d2690d
--- a/plugins/tools/tool_smart_patch/kis_tool_smart_patch.cpp
+++ b/plugins/tools/tool_smart_patch/kis_tool_smart_patch.cpp
@@@ -19,80 -19,44 +19,66 @@@
  #include "kis_tool_smart_patch.h"
  
  #include "QApplication"
 +#include "QPainterPath"
  
  #include <klocalizedstring.h>
--#include <KoCanvasBase.h>
 -
 +#include <KoColor.h>
  #include <KisViewManager.h>
  #include "kis_canvas2.h"
  #include "kis_cursor.h"
--#include "kis_config.h"
 +#include "kis_painter.h"
 +#include "kis_paintop_preset.h"
 +
  #include "kundo2magicstring.h"
++#include "kundo2stack.h"
 +#include "kis_processing_applicator.h"
 +#include "kis_datamanager.h"
  
--#include "KoProperties.h"
  #include "KoColorSpaceRegistry.h"
--#include "KoShapeController.h"
--#include "KoDocumentResourceManager.h"
- //#include "kis_node_manager.h"
 -#include "kis_node_manager.h"
--#include "kis_cursor.h"
  
  #include "kis_tool_smart_patch_options_widget.h"
  #include "libs/image/kis_paint_device_debug_utils.h"
  
--#include "kis_resources_snapshot.h"
--#include "kis_layer.h"
--#include "kis_transaction.h"
  #include "kis_paint_layer.h"
- #include "kis_paint_information.h"
- #include "kis_distance_information.h"
  
 -#include "kis_inpaint_mask.h"
 +QRect patchImage(KisPaintDeviceSP imageDev, KisPaintDeviceSP maskDev, int radius, \
int accuracy,  +                 KisPaintDeviceSP originalImageDev, KisPaintDeviceSP \
patchedImageDev);  +
 +class KisToolSmartPatch::InpaintCommand : public KUndo2Command {
 +public:
 +    InpaintCommand( KisPaintDeviceSP maskDev, KisPaintDeviceSP imageDev, int \
accuracy, int patchRadius ) :  +        m_maskDev(maskDev), m_imageDev(imageDev), \
m_patchedImageDev(nullptr), m_accuracy(accuracy), m_patchRadius(patchRadius) {}  +
 +    void redo() override {
 +        if( m_patchedImageDev.isNull() ){
 +            m_originalImageDev = new KisPaintDevice(m_imageDev->colorSpace());
 +            m_patchedImageDev  = new KisPaintDevice(m_imageDev->colorSpace());
 +            m_modifiedRect = patchImage(m_imageDev, m_maskDev, m_patchRadius, \
m_accuracy, m_originalImageDev, m_patchedImageDev);  +        }
 +        m_imageDev->dataManager()->bitBlt( m_patchedImageDev->dataManager(), \
m_modifiedRect);  +    }
 +
 +    void undo() override {
 +        Q_ASSERT(!m_originalImageDev.isNull());
 +        m_imageDev->dataManager()->bitBlt( m_originalImageDev->dataManager(), \
m_modifiedRect);  +    }
  
 -QRect patchImage(KisPaintDeviceSP imageDev, KisPaintDeviceSP maskDev, int radius, \
int accuracy);  +private:
 +    KisPaintDeviceSP m_maskDev, m_imageDev;
 +    KisPaintDeviceSP m_originalImageDev;
 +    KisPaintDeviceSP m_patchedImageDev;
 +    QRect m_modifiedRect;
 +    int m_accuracy, m_patchRadius;
 +};
  
  struct KisToolSmartPatch::Private {
 -    KisMaskSP mask = nullptr;
 -    KisNodeSP maskNode = nullptr;
 -    KisNodeSP paintNode = nullptr;
      KisPaintDeviceSP imageDev = nullptr;
      KisPaintDeviceSP maskDev = nullptr;
 -    KisResourcesSnapshotSP resources = nullptr;
 -    KoColor currentFgColor;
 +    KisPainter maskDevPainter;
-     KisResourcesSnapshotSP resources = nullptr;
-     KoColor currentFgColor;
-     float brushRadius = 22.;
++    float brushRadius = 50.; //initial default. actually read from ui.
      KisToolSmartPatchOptionsWidget *optionsWidget = nullptr;
-     QRectF brushRect;
 +    QRectF oldOutlineRect;
 +    QPainterPath brushOutline;
  };
  
  
@@@ -128,25 -86,31 +114,13 @@@ void KisToolSmartPatch::deactivate(
  
  void KisToolSmartPatch::resetCursorStyle()
  {
 -    KisToolFreehand::resetCursorStyle();
 -}
 -
 -
 -bool KisToolSmartPatch::canCreateInpaintMask() const
 -{
 -    KisNodeSP node = currentNode();
 -    return node && node->inherits("KisPaintLayer");
 -}
 -
 -QRect KisToolSmartPatch::inpaintImage(KisPaintDeviceSP maskDev, KisPaintDeviceSP \
                imageDev)
 -{
 -    int accuracy = 50; //default accuracy - middle value
 -    int patchRadius = 4; //default radius, which works well for most cases tested
 -
 -    if (!m_d.isNull() && m_d->optionsWidget) {
 -        accuracy = m_d->optionsWidget->getAccuracy();
 -        patchRadius = m_d->optionsWidget->getPatchRadius();
 -    }
 -    return patchImage(imageDev, maskDev, patchRadius, accuracy);
 +    KisToolPaint::resetCursorStyle();
  }
  
- //QRect KisToolSmartPatch::inpaintImage(KisPaintDeviceSP maskDev, KisPaintDeviceSP \
                imageDev)
- //{
- //    int accuracy = 50; //default accuracy - middle value
- //    int patchRadius = 4; //default radius, which works well for most cases tested
- 
- //    if (!m_d.isNull() && m_d->optionsWidget) {
- //        accuracy = m_d->optionsWidget->getAccuracy();
- //        patchRadius = m_d->optionsWidget->getPatchRadius();
- //    }
- //    return patchImage(imageDev, maskDev, patchRadius, accuracy);
- //}
- 
  void KisToolSmartPatch::activatePrimaryAction()
  {
 -    KisToolFreehand::activatePrimaryAction();
 +    setOutlineEnabled(true);
 +    KisToolPaint::activatePrimaryAction();
  }
  
  void KisToolSmartPatch::deactivatePrimaryAction()
@@@ -192,111 -182,46 +166,109 @@@ void KisToolSmartPatch::continuePrimary
  
  void KisToolSmartPatch::endPrimaryAction(KoPointerEvent *event)
  {
 -    if (mode() != KisTool::PAINT_MODE)
 -        return;
 +    CHECK_MODE_SANITY_OR_RETURN(KisTool::PAINT_MODE);
 +    addMaskPath(event);
 +    KisToolPaint::endPrimaryAction(event);
 +    setMode(KisTool::HOVER_MODE);
  
 -    if (m_d->mask.isNull())
 -        return;
 +    QApplication::setOverrideCursor(KisCursor::waitCursor());
  
 -    KisToolFreehand::endPrimaryAction(event);
 +    m_d->imageDev = currentNode()->paintDevice();
 +
-     //KIS_DUMP_DEVICE_2(m_d->maskDev, m_d->imageDev->exactBounds(), "maskDev", \
                "/home/eugening/Projects/Mask");
- 
 +    int accuracy = 50; //default accuracy - middle value
 +    int patchRadius = 4; //default radius, which works well for most cases tested
  
 -    //Next line is important. We need to wait for the paint operation to finish \
                otherwise
 -    //mask will be incomplete.
 +    if (!m_d.isNull() && m_d->optionsWidget) {
 +        accuracy = m_d->optionsWidget->getAccuracy();
 +        patchRadius = m_d->optionsWidget->getPatchRadius();
 +    }
 +
 +    KisProcessingApplicator applicator( image(), currentNode(), \
KisProcessingApplicator::NONE, KisImageSignalVector() << ModifiedSignal,  +           \
kundo2_i18n("Smart Patch"));  +
 +    //actual inpaint operation. filling in areas masked by user
 +    applicator.applyCommand( new InpaintCommand( \
KisPainter::convertToAlphaAsAlpha(m_d->maskDev), m_d->imageDev, accuracy, patchRadius \
),  +                             KisStrokeJobData::BARRIER, \
KisStrokeJobData::EXCLUSIVE );  +
 +    applicator.end();
      image()->waitForDone();
  
 -    //User drew a mask on the temporary inpaint mask layer. Get this mask to pass \
                to the inpaint algorithm
 -    m_d->maskDev = new KisPaintDevice(KoColorSpaceRegistry::instance()->alpha8());
 +    QApplication::restoreOverrideCursor();
 +    m_d->maskDev->clear();
 +}
  
 -    if (!m_d->mask.isNull()) {
 -        m_d->maskDev->makeCloneFrom(m_d->mask->paintDevice(), \
m_d->mask->paintDevice()->extent());  +QPainterPath KisToolSmartPatch::brushOutline( \
void )  +{
 +    const qreal diameter = m_d->brushRadius;
 +    QPainterPath outline;
 +    outline.addEllipse(QPointF(0,0), -0.5 * diameter, -0.5 * diameter );
 +    return outline;
 +}
  
 -        //Once we get the mask we delete the temporary layer on which user painted \
                it
 -        deleteInpaintMask();
 +QPainterPath KisToolSmartPatch::getBrushOutlinePath(const QPointF &documentPos,
 +                                          const KoPointerEvent *event)
 +{
 +    Q_UNUSED(event);
  
 -        image()->waitForDone();
 -        m_d->imageDev = currentNode()->paintDevice();
 +    QPointF imagePos = currentImage()->documentToPixel(documentPos);
 +    QPainterPath path = brushOutline();
  
 -        KisTransaction inpaintTransaction(kundo2_i18n("Inpaint Operation"), \
m_d->imageDev);  +    return path.translated( imagePos.rx(), imagePos.ry() );
 +}
  
 -        QApplication::setOverrideCursor(KisCursor::waitCursor());
 +void KisToolSmartPatch::requestUpdateOutline(const QPointF &outlineDocPoint, const \
KoPointerEvent *event)  +{
 +    static QPointF lastDocPoint = QPointF(0,0);
 +    if( event )
 +        lastDocPoint=outlineDocPoint;
 +
 +    m_d->brushRadius = currentPaintOpPreset()->settings()->paintOpSize();
 +    m_d->brushOutline = getBrushOutlinePath(lastDocPoint, event);
 +
 +    QRectF outlinePixelRect = m_d->brushOutline.boundingRect();
 +    QRectF outlineDocRect = currentImage()->pixelToDocument(outlinePixelRect);
 +
 +    // This adjusted call is needed as we paint with a 3 pixel wide brush and the \
pen is outside the bounds of the path  +    // Pen uses view coordinates so we have \
to zoom the document value to match 2 pixel in view coordiates  +    // See BUG \
275829  +    qreal zoomX;
 +    qreal zoomY;
 +    canvas()->viewConverter()->zoom(&zoomX, &zoomY);
 +    qreal xoffset = 2.0/zoomX;
 +    qreal yoffset = 2.0/zoomY;
 +
 +    if (!outlineDocRect.isEmpty()) {
 +        outlineDocRect.adjust(-xoffset,-yoffset,xoffset,yoffset);
 +    }
  
 -        //actual inpaint operation. filling in areas masked by user
 -        QRect changedRect = inpaintImage(m_d->maskDev, m_d->imageDev);
 -        currentNode()->setDirty(changedRect);
 -        inpaintTransaction.commit(image()->undoAdapter());
 +    if (!m_d->oldOutlineRect.isEmpty()) {
 +        canvas()->updateCanvas(m_d->oldOutlineRect);
 +    }
  
 -        //Matching endmacro for inpaint operation
 -        canvas()->shapeController()->resourceManager()->undoStack()->endMacro();
 +    if (!outlineDocRect.isEmpty()) {
 +        canvas()->updateCanvas(outlineDocRect);
 +    }
  
 -        QApplication::restoreOverrideCursor();
 +    m_d->oldOutlineRect = outlineDocRect;
 +}
  
 -        canvas()->resourceManager()->setForegroundColor(m_d->currentFgColor);
 +void KisToolSmartPatch::paint(QPainter &painter, const KoViewConverter &converter)
 +{
 +    Q_UNUSED(converter);
 +
 +    painter.save();
 +    painter.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
 +    painter.setPen(QColor(128, 255, 128));
 +    painter.drawPath(pixelToView(m_d->brushOutline));
 +    painter.restore();
 +
 +    painter.save();
 +    painter.setBrush(Qt::magenta);
 +    QImage img = m_d->maskDev->convertToQImage(0);
 +    if( !img.size().isEmpty() ){
 +        painter.drawImage(pixelToView(m_d->maskDev->exactBounds()), img);
      }
 +    painter.restore();
  }
  
  QWidget * KisToolSmartPatch::createOptionWidget()


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

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