Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_small_tiles_filter.cpp
Go to the documentation of this file.
1/*
2 * This file is part of Krita
3 *
4 * SPDX-FileCopyrightText: 2005 Michael Thaler <michael.thaler@physik.tu-muenchen.de>
5 *
6 * ported from Gimp, SPDX-FileCopyrightText: 1997 Eiichi Takamori <taka@ma1.seikyou.ne.jp>
7 * original pixelize.c for GIMP 0.54 by Tracy Scott
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
13
14#include <stdlib.h>
15#include <vector>
16
17#include <QPoint>
18#include <QSpinBox>
19
20#include <klocalizedstring.h>
21#include <kpluginfactory.h>
22
23#include <KoUpdater.h>
24
25#include <KisDocument.h>
26#include <kis_debug.h>
27#include <kis_image.h>
28#include <kis_layer.h>
30#include <kis_global.h>
31#include <kis_types.h>
32#include <kis_paint_device.h>
33#include <kis_filter_strategy.h>
34#include <kis_painter.h>
35#include <kis_selection.h>
40
42
49
51 const QRect& applyRect,
52 const KisFilterConfigurationSP config,
53 KoUpdater* progressUpdater
54 ) const
55{
56 Q_ASSERT(!device.isNull());
57
58 //read the filter configuration values from the KisFilterConfiguration object
59 const quint32 numberOfTiles = config->getInt("numberOfTiles", 2);
60
61 const QRect srcRect = applyRect;
62
63 const int w = static_cast<int>(srcRect.width() / numberOfTiles);
64 const int h = static_cast<int>(srcRect.height() / numberOfTiles);
65
66 KisPaintDeviceSP tile = device->createThumbnailDevice(w, h);
67 if (tile.isNull()) return;
68
69 device->clear(applyRect);
70
71 KisPainter gc(device);
73
74 if (progressUpdater) {
75 progressUpdater->setRange(0, numberOfTiles);
76 }
77
78 for (uint y = 0; y < numberOfTiles; ++y) {
79 for (uint x = 0; x < numberOfTiles; ++x) {
80 gc.bitBlt(w * x, h * y, tile, 0, 0, w, h);
81 }
82 if (progressUpdater) progressUpdater->setValue(y);
83 }
84 gc.end();
85}
86
88{
90 param.push_back(KisIntegerWidgetParam(2, 5, 1, i18n("Number of tiles"), "numberOfTiles"));
91 return new KisMultiIntegerFilterWidget(id().id(), parent, id().id(), param);
92
93}
94
96{
97 KisFilterConfigurationSP config = factoryConfiguration(resourcesInterface);
98 config->setProperty("numberOfTiles", 2);
99 return config;
100}
101
102
const QString COMPOSITE_COPY
unsigned int uint
virtual void clear()
KisPaintDeviceSP createThumbnailDevice(qint32 w, qint32 h, QRect rect=QRect(), QRect outputRect=QRect()) const
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
void setCompositeOpId(const KoCompositeOp *op)
bool isNull() const
void processImpl(KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
void setValue(int value) override
Definition KoUpdater.cpp:64
void setRange(int minimum, int maximum) override
Definition KoUpdater.cpp:79
const KoID FiltersCategoryMapId("map_filters", ki18nc("The category of mapping filters, like bump map or gradient filter map. Verb.", "Map"))
std::vector< KisIntegerWidgetParam > vKisIntegerWidgetParam
void setSupportsThreading(bool v)
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
void setSupportsAdjustmentLayers(bool v)
void setSupportsPainting(bool v)