File indexing completed on 2024-05-05 03:49:14

0001 // SPDX-FileCopyrightText: 2010 Jens-Michael Hoffmann <jmho@c-xx.com>
0002 //
0003 // SPDX-License-Identifier: LGPL-2.1-or-later
0004 
0005 #include "BlendingFactory.h"
0006 
0007 #include <QDebug>
0008 
0009 #include "blendings/SunLightBlending.h"
0010 #include "BlendingAlgorithms.h"
0011 
0012 namespace Marble
0013 {
0014 
0015 void BlendingFactory::setLevelZeroLayout( int levelZeroColumns, int levelZeroRows )
0016 {
0017     m_sunLightBlending->setLevelZeroLayout( levelZeroColumns, levelZeroRows );
0018 }
0019 
0020 Blending const * BlendingFactory::findBlending( QString const & name ) const
0021 {
0022     if ( name.isEmpty() )
0023         return nullptr;
0024 
0025     Blending const * const result = m_blendings.value( name, 0 );
0026     if ( !result )
0027         qWarning() << "Unknown blending" << name << "specified in .dgml file. Please fix the .dgml file.";
0028     return result;
0029 }
0030 
0031 BlendingFactory::BlendingFactory( const SunLocator *sunLocator )
0032     : m_sunLightBlending( new SunLightBlending( sunLocator ) )
0033 {
0034     m_blendings.insert( "OverpaintBlending", new OverpaintBlending );
0035 
0036     // Neutral blendings
0037     m_blendings.insert( "AllanonBlending", new AllanonBlending );
0038     m_blendings.insert( "ArcusTangentBlending", new ArcusTangentBlending );
0039     m_blendings.insert( "GeometricMeanBlending", new GeometricMeanBlending );
0040     m_blendings.insert( "LinearLightBlending", new LinearLightBlending );
0041     //m_blendings.insert( "NoiseBlending", new NoiseBlending );
0042     m_blendings.insert( "OverlayBlending", new OverlayBlending );
0043     //m_blendings.insert( "ParallelBlending", new ParallelBlending );
0044     //m_blendings.insert( "TextureBlending", new TextureBlending );
0045 
0046     // Darkening blendings
0047     m_blendings.insert( "AlphaBlending", new OverpaintBlending ); // for backwards compatibility
0048     m_blendings.insert( "ColorBurnBlending", new ColorBurnBlending );
0049     m_blendings.insert( "DarkBlending", new DarkBlending );
0050     m_blendings.insert( "DarkenBlending", new DarkenBlending );
0051     m_blendings.insert( "DivideBlending", new DivideBlending );
0052     m_blendings.insert( "GammaDarkBlending", new GammaDarkBlending );
0053     m_blendings.insert( "LinearBurnBlending", new LinearBurnBlending );
0054     m_blendings.insert( "MultiplyBlending", new MultiplyBlending );
0055     m_blendings.insert( "SubtractiveBlending", new SubtractiveBlending );
0056 
0057     // Lightening blendings
0058     m_blendings.insert( "AdditiveBlending", new AdditiveBlending );
0059     m_blendings.insert( "ColorDodgeBlending", new ColorDodgeBlending );
0060     m_blendings.insert( "GammaLightBlending", new GammaLightBlending );
0061     m_blendings.insert( "HardLightBlending", new HardLightBlending );
0062     m_blendings.insert( "LightBlending", new LightBlending );
0063     m_blendings.insert( "LightenBlending", new LightenBlending );
0064     m_blendings.insert( "PinLightBlending", new PinLightBlending );
0065     m_blendings.insert( "ScreenBlending", new ScreenBlending );
0066     m_blendings.insert( "SoftLightBlending", new SoftLightBlending );
0067     m_blendings.insert( "VividLightBlending", new VividLightBlending );
0068 
0069     // Inverter blendings
0070     //m_blendings.insert( "AdditiveSubtractiveBlending", new AdditiveSubtractiveBlending );
0071     m_blendings.insert( "BleachBlending", new BleachBlending );
0072     m_blendings.insert( "DifferenceBlending", new DifferenceBlending );
0073     m_blendings.insert( "EquivalenceBlending", new EquivalenceBlending );
0074     m_blendings.insert( "HalfDifferenceBlending", new HalfDifferenceBlending );
0075 
0076     // Special purpose blendings
0077     m_blendings.insert( "CloudsBlending", new CloudsBlending );
0078     m_blendings.insert( "SunLightBlending", m_sunLightBlending );
0079     m_blendings.insert( "GrayscaleBlending", new GrayscaleBlending );
0080     m_blendings.insert( "InvertColorBlending", new InvertColorBlending );
0081     m_blendings.insert( "InvertHueBlending", new InvertHueBlending );
0082 }
0083 
0084 BlendingFactory::~BlendingFactory()
0085 {
0086     m_blendings.remove( "SunLightBlending" );
0087     delete m_sunLightBlending;
0088     qDeleteAll( m_blendings );
0089 }
0090 
0091 }