File indexing completed on 2024-05-12 15:59:36

0001 /*
0002  *  SPDX-FileCopyrightText: 2005 Bart Coppens <kde@bartcoppens.be>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 
0007 #include "KoHistogramProducer.h"
0008 
0009 #include <QList>
0010 #include <QGlobalStatic>
0011 
0012 #include <KoID.h>
0013 
0014 #include "KoBasicHistogramProducers.h"
0015 
0016 #include "KoColorSpace.h"
0017 
0018 Q_GLOBAL_STATIC(KoHistogramProducerFactoryRegistry, s_instance)
0019 
0020 KoHistogramProducerFactoryRegistry::KoHistogramProducerFactoryRegistry()
0021 {
0022 }
0023 
0024 KoHistogramProducerFactoryRegistry::~KoHistogramProducerFactoryRegistry()
0025 {
0026     qDeleteAll(values());
0027 }
0028 
0029 KoHistogramProducerFactoryRegistry* KoHistogramProducerFactoryRegistry::instance()
0030 {
0031     return s_instance;
0032 
0033 }
0034 
0035 QList<QString> KoHistogramProducerFactoryRegistry::keysCompatibleWith(const KoColorSpace* colorSpace, bool isStrict) const
0036 {
0037     QList<QString> list;
0038     QList<float> preferredList;
0039     Q_FOREACH (const QString &id, keys()) {
0040         KoHistogramProducerFactory *f = value(id);
0041 
0042         if (f->isCompatibleWith(colorSpace, isStrict)) {
0043             float preferred = f->preferrednessLevelWith(colorSpace);
0044             QList<float>::iterator pit = preferredList.begin();
0045             QList<float>::iterator pend = preferredList.end();
0046             QList<QString>::iterator lit = list.begin();
0047 
0048             while (pit != pend && preferred <= *pit) {
0049                 ++pit;
0050                 ++lit;
0051             }
0052 
0053             list.insert(lit, id);
0054             preferredList.insert(pit, preferred);
0055         }
0056     }
0057     return list;
0058 }