krita
kis_histogram_producer.cc00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "kis_histogram_producer.h"
00020 #include "kis_basic_histogram_producers.h"
00021
00022 KisHistogramProducerFactoryRegistry* KisHistogramProducerFactoryRegistry::m_singleton = 0;
00023
00024 KisHistogramProducerFactoryRegistry::KisHistogramProducerFactoryRegistry() {
00025 Q_ASSERT(KisHistogramProducerFactoryRegistry::m_singleton == 0);
00026 }
00027
00028 KisHistogramProducerFactoryRegistry::~KisHistogramProducerFactoryRegistry() {
00029 }
00030
00031 KisHistogramProducerFactoryRegistry* KisHistogramProducerFactoryRegistry::instance() {
00032 if(KisHistogramProducerFactoryRegistry::m_singleton == 0) {
00033 KisHistogramProducerFactoryRegistry::m_singleton
00034 = new KisHistogramProducerFactoryRegistry();
00035 m_singleton->add( new KisGenericLabHistogramProducerFactory() );
00036 }
00037 return KisHistogramProducerFactoryRegistry::m_singleton;
00038 }
00039
00040 KisIDList KisHistogramProducerFactoryRegistry::listKeysCompatibleWith(
00041 KisColorSpace* colorSpace) const
00042 {
00043 KisIDList list;
00044 QValueList<float> preferredList;
00045 storageMap::const_iterator it = m_storage.begin();
00046 storageMap::const_iterator endit = m_storage.end();
00047
00048
00049 while( it != endit ) {
00050 if (it->second->isCompatibleWith(colorSpace)) {
00051 float preferred = it->second->preferrednessLevelWith(colorSpace);
00052 QValueList<float>::iterator pit = preferredList.begin();
00053 QValueList<float>::iterator pend = preferredList.end();
00054 KisIDList::iterator lit = list.begin();
00055
00056 while (pit != pend && preferred <= *pit) {
00057 ++pit;
00058 ++lit;
00059 }
00060
00061 list.insert(lit, it->first);
00062 preferredList.insert(pit, preferred);
00063 }
00064 ++it;
00065 }
00066 return list;
00067 }
|