Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_fill_painter.cc File Reference
#include "kis_fill_painter.h"
#include <stdlib.h>
#include <string.h>
#include <cfloat>
#include <stack>
#include <QFontInfo>
#include <QFontMetrics>
#include <QPen>
#include <QImage>
#include <QMap>
#include <QPainter>
#include <QRect>
#include <klocalizedstring.h>
#include <KoUpdater.h>
#include "generator/kis_generator.h"
#include "filter/kis_filter_configuration.h"
#include "generator/kis_generator_registry.h"
#include "kis_processing_information.h"
#include "kis_debug.h"
#include "kis_image.h"
#include "kis_layer.h"
#include "kis_paint_device.h"
#include <resources/KoPattern.h>
#include "KoColorSpace.h"
#include "kis_transaction.h"
#include "kis_pixel_selection.h"
#include <KoCompositeOpRegistry.h>
#include <floodfill/kis_scanline_fill.h>
#include "kis_selection_filters.h"
#include <kis_perspectivetransform_worker.h>
#include <kis_sequential_iterator.h>
#include <KisColorSelectionPolicies.h>
#include <krita_utils.h>
#include <kis_default_bounds.h>
#include <KisImageResolutionProxy.h>

Go to the source code of this file.

Functions

template<typename DifferencePolicy , typename SelectionPolicy >
void createSimilarColorsSelectionImpl (KisPixelSelectionSP outSelection, KisPaintDeviceSP referenceDevice, const QRect &rect, KisPixelSelectionSP mask, DifferencePolicy differencePolicy, SelectionPolicy selectionPolicy, KoUpdater *updater=nullptr)
 

Function Documentation

◆ createSimilarColorsSelectionImpl()

template<typename DifferencePolicy , typename SelectionPolicy >
void createSimilarColorsSelectionImpl ( KisPixelSelectionSP outSelection,
KisPaintDeviceSP referenceDevice,
const QRect & rect,
KisPixelSelectionSP mask,
DifferencePolicy differencePolicy,
SelectionPolicy selectionPolicy,
KoUpdater * updater = nullptr )

Definition at line 419 of file kis_fill_painter.cc.

426{
427 KisSequentialConstIterator referenceDeviceIterator(referenceDevice, rect);
428 KisSequentialIterator outSelectionIterator(outSelection, rect);
429
430 const int totalNumberOfPixels = rect.width() * rect.height();
431 const int numberOfUpdates = 4;
432 const int numberOfPixelsPerUpdate = totalNumberOfPixels / numberOfUpdates;
433 const int progressIncrement = 100 / numberOfUpdates;
434 int numberOfPixelsProcessed = 0;
435
436 if (mask) {
437 KisSequentialConstIterator maskIterator(mask, rect);
438 while (referenceDeviceIterator.nextPixel() &&
439 outSelectionIterator.nextPixel() &&
440 maskIterator.nextPixel()) {
441 if (*maskIterator.rawDataConst() != MIN_SELECTED) {
442 *outSelectionIterator.rawData() =
443 selectionPolicy.opacityFromDifference(
444 differencePolicy.difference(referenceDeviceIterator.rawDataConst())
445 );
446 }
447 if (updater) {
448 ++numberOfPixelsProcessed;
449 if (numberOfPixelsProcessed > numberOfPixelsPerUpdate) {
450 numberOfPixelsProcessed = 0;
451 updater->setProgress(updater->progress() + progressIncrement);
452 }
453 }
454 }
455 } else {
456 while (referenceDeviceIterator.nextPixel() &&
457 outSelectionIterator.nextPixel()) {
458 *outSelectionIterator.rawData() =
459 selectionPolicy.opacityFromDifference(
460 differencePolicy.difference(referenceDeviceIterator.rawDataConst())
461 );
462 if (updater) {
463 ++numberOfPixelsProcessed;
464 if (numberOfPixelsProcessed > numberOfPixelsPerUpdate) {
465 numberOfPixelsProcessed = 0;
466 updater->setProgress(updater->progress() + progressIncrement);
467 }
468 }
469 }
470 }
471 if (updater) {
472 updater->setProgress(100);
473 }
474}
int progress() const
Definition KoUpdater.cpp:48
void setProgress(int percent)
Definition KoUpdater.cpp:38
const quint8 MIN_SELECTED
Definition kis_global.h:33

References MIN_SELECTED, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData(), and KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawDataConst().