File indexing completed on 2024-06-16 04:16:43

0001 /*
0002  *  SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisResetTransparentFilter.h"
0008 
0009 #include <klocalizedstring.h>
0010 
0011 #include <kis_debug.h>
0012 #include <kpluginfactory.h>
0013 
0014 #include <KoUpdater.h>
0015 #include <KisSequentialIteratorProgress.h>
0016 
0017 #include <filter/kis_filter_category_ids.h>
0018 #include <filter/kis_filter_registry.h>
0019 
0020 K_PLUGIN_FACTORY_WITH_JSON(ResetTransparentFactory, "kritaresettransparent.json", registerPlugin<ResetTransparent>();)
0021 
0022 ResetTransparent::ResetTransparent(QObject *parent, const QVariantList &)
0023         : QObject(parent)
0024 {
0025     KisFilterRegistry::instance()->add(KisFilterSP(new KisResetTransparentFilter()));
0026 }
0027 
0028 ResetTransparent::~ResetTransparent()
0029 {
0030 }
0031 
0032 KisResetTransparentFilter::KisResetTransparentFilter()
0033     : KisFilter(id(), FiltersCategoryOtherId, i18n("Reset Transparent"))
0034 {
0035     setColorSpaceIndependence(FULLY_INDEPENDENT);
0036     setSupportsPainting(false);
0037     setSupportsThreading(true);
0038     setSupportsLevelOfDetail(false);
0039     setSupportsAdjustmentLayers(false);
0040     setShowConfigurationWidget(false);
0041 }
0042 
0043 bool KisResetTransparentFilter::needsTransparentPixels(const KisFilterConfigurationSP config, const KoColorSpace *cs) const
0044 {
0045     Q_UNUSED(config);
0046     Q_UNUSED(cs);
0047     return true;
0048 }
0049 
0050 void KisResetTransparentFilter::processImpl(KisPaintDeviceSP device,
0051                                             const QRect &applyRect,
0052                                             const KisFilterConfigurationSP config,
0053                                             KoUpdater *progressUpdater) const
0054 {
0055     Q_UNUSED(config);
0056 
0057     const KoColorSpace *cs = device->colorSpace();
0058     KoColor transparent = KoColor::createTransparent(cs);
0059     const int pixelSize = cs->pixelSize();
0060 
0061     KisSequentialIteratorProgress it(device, applyRect, progressUpdater);
0062     while (it.nextPixel()) {
0063         if (cs->opacityU8(it.oldRawData()) == OPACITY_TRANSPARENT_U8) {
0064             memcpy(it.rawData(), transparent.data(), pixelSize);
0065         }
0066     }
0067 }
0068 
0069 #include "KisResetTransparentFilter.moc"