QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgscolorrampimpl.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscolorrampimpl.h
3 ---------------------
4 begin : November 2009
5 copyright : (C) 2009 by Martin Dobias
6 email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSCOLORRAMPIMPL_H
17#define QGSCOLORRAMPIMPL_H
18
19#include "qgis_core.h"
20#include <QColor>
21#include <QGradient>
22#include "qgis.h"
23#include "qgscolorscheme.h"
24#include "qgscolorramp.h"
25
26#ifndef SIP_RUN
28typedef QColor( *InterpolateColorFunc )( const QColor &c1, const QColor &c2, const double value, Qgis::AngularDirection direction );
30#endif
31
38class CORE_EXPORT QgsGradientStop
39{
40 public:
41
47 QgsGradientStop( double offset, const QColor &color );
48
50 double offset;
52 QColor color;
53
54 bool operator==( const QgsGradientStop &other ) const
55 {
56 return other.color == color && qgsDoubleNear( other.offset, offset ) && other.mColorSpec == mColorSpec && other.mDirection == mDirection;
57 }
58
59 bool operator!=( const QgsGradientStop &other ) const
60 {
61 return !( *this == other );
62 }
63
73 QColor::Spec colorSpec() const { return mColorSpec; }
74
86 void setColorSpec( QColor::Spec spec );
87
98 Qgis::AngularDirection direction() const { return mDirection; }
99
110 void setDirection( Qgis::AngularDirection direction ) { mDirection = direction; }
111
112 private:
113
114 QColor::Spec mColorSpec = QColor::Spec::Rgb;
116 InterpolateColorFunc mFunc = nullptr;
117
119};
120
122typedef QList<QgsGradientStop> QgsGradientStopsList;
123
124// these are the QGIS branding colors, exaggerated a bit to make a default ramp with greater color variation
125// then the official QGIS color gradient!
126#define DEFAULT_GRADIENT_COLOR1 QColor(69, 116, 40)
127#define DEFAULT_GRADIENT_COLOR2 QColor(188, 220, 60)
128
136class CORE_EXPORT QgsGradientColorRamp : public QgsColorRamp
137{
138 public:
139
148 QgsGradientColorRamp( const QColor &color1 = DEFAULT_GRADIENT_COLOR1,
149 const QColor &color2 = DEFAULT_GRADIENT_COLOR2,
150 bool discrete = false,
152
154 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
155
156 int count() const override { return mStops.count() + 2; }
157 double value( int index ) const override;
158 QColor color( double value ) const override;
159
165 static QString typeString() { return QStringLiteral( "gradient" ); }
166
167 QString type() const override;
168 void invert() override;
169 QgsGradientColorRamp *clone() const override SIP_FACTORY;
170 QVariantMap properties() const override;
171
177 QColor color1() const { return mColor1; }
178
184 QColor color2() const { return mColor2; }
185
192 void setColor1( const QColor &color ) { mColor1 = color; }
193
200 void setColor2( const QColor &color ) { mColor2 = color; }
201
207 bool isDiscrete() const { return mDiscrete; }
208
216 void setDiscrete( bool discrete ) { mDiscrete = discrete; }
217
225 void convertToDiscrete( bool discrete );
226
234 void setStops( const QgsGradientStopsList &stops );
235
240 QgsGradientStopsList stops() const { return mStops; }
241
246 QgsStringMap info() const { return mInfo; }
247
253 void setInfo( const QgsStringMap &info ) { mInfo = info; }
254
262 void addStopsToGradient( QGradient *gradient, double opacity = 1 ) const;
263
273 QColor::Spec colorSpec() const { return mColorSpec; }
274
286 void setColorSpec( QColor::Spec spec );
287
298 Qgis::AngularDirection direction() const { return mDirection; }
299
310 void setDirection( Qgis::AngularDirection direction ) { mDirection = direction; }
311
312 protected:
313 QColor mColor1;
314 QColor mColor2;
318 QColor::Spec mColorSpec = QColor::Spec::Rgb;
320
321 InterpolateColorFunc mFunc = nullptr;
322};
323
325
326#define DEFAULT_RANDOM_COUNT 10
327#define DEFAULT_RANDOM_HUE_MIN 0
328#define DEFAULT_RANDOM_HUE_MAX 359
329#define DEFAULT_RANDOM_VAL_MIN 200
330#define DEFAULT_RANDOM_VAL_MAX 240
331#define DEFAULT_RANDOM_SAT_MIN 100
332#define DEFAULT_RANDOM_SAT_MAX 240
333
340class CORE_EXPORT QgsLimitedRandomColorRamp : public QgsColorRamp
341{
342 public:
343
355 int hueMin = DEFAULT_RANDOM_HUE_MIN, int hueMax = DEFAULT_RANDOM_HUE_MAX,
356 int satMin = DEFAULT_RANDOM_SAT_MIN, int satMax = DEFAULT_RANDOM_SAT_MAX,
357 int valMin = DEFAULT_RANDOM_VAL_MIN, int valMax = DEFAULT_RANDOM_VAL_MAX );
358
365 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
366
367 double value( int index ) const override;
368 QColor color( double value ) const override;
369
375 static QString typeString() { return QStringLiteral( "random" ); }
376
377 QString type() const override;
378 QgsLimitedRandomColorRamp *clone() const override SIP_FACTORY;
379 QVariantMap properties() const override;
380 int count() const override { return mCount; }
381
386 static QList<QColor> randomColors( int count,
387 int hueMax = DEFAULT_RANDOM_HUE_MAX, int hueMin = DEFAULT_RANDOM_HUE_MIN,
388 int satMax = DEFAULT_RANDOM_SAT_MAX, int satMin = DEFAULT_RANDOM_SAT_MIN,
389 int valMax = DEFAULT_RANDOM_VAL_MAX, int valMin = DEFAULT_RANDOM_VAL_MIN );
390
395 void updateColors();
396
401 int hueMin() const { return mHueMin; }
402
407 int hueMax() const { return mHueMax; }
408
413 int satMin() const { return mSatMin; }
414
419 int satMax() const { return mSatMax; }
420
425 int valMin() const { return mValMin; }
426
431 int valMax() const { return mValMax; }
432
436 void setCount( int val ) { mCount = val; }
437
442 void setHueMin( int val ) { mHueMin = val; }
443
448 void setHueMax( int val ) { mHueMax = val; }
449
454 void setSatMin( int val ) { mSatMin = val; }
455
460 void setSatMax( int val ) { mSatMax = val; }
461
466 void setValMin( int val ) { mValMin = val; }
467
472 void setValMax( int val ) { mValMax = val; }
473
474 protected:
482 QList<QColor> mColors;
483};
484
492class CORE_EXPORT QgsRandomColorRamp: public QgsColorRamp
493{
494 public:
495
500
501 int count() const override;
502
503 double value( int index ) const override;
504
505 QColor color( double value ) const override;
506
514 virtual void setTotalColorCount( int colorCount );
515
521 static QString typeString() { return QStringLiteral( "randomcolors" ); }
522
523 QString type() const override;
524
525 QgsRandomColorRamp *clone() const override SIP_FACTORY;
526
527 QVariantMap properties() const override;
528
529 protected:
530
531 int mTotalColorCount = 0;
532 QList<QColor> mPrecalculatedColors;
533
534};
535
536
543class CORE_EXPORT QgsPresetSchemeColorRamp : public QgsColorRamp, public QgsColorScheme
544{
545 public:
546
551 QgsPresetSchemeColorRamp( const QList< QColor > &colors = QList< QColor >() );
552
558
565 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
566
572 bool setColors( const QgsNamedColorList &colors, const QString & = QString(), const QColor & = QColor() ) override { mColors = colors; return true; }
573
578 QList< QColor > colors() const;
579
580 double value( int index ) const override;
581 QColor color( double value ) const override;
582
588 static QString typeString() { return QStringLiteral( "preset" ); }
589
590 QString type() const override;
591 void invert() override;
592 QgsPresetSchemeColorRamp *clone() const override SIP_FACTORY;
593 QVariantMap properties() const override;
594 int count() const override;
595
596 QString schemeName() const override { return QStringLiteral( "preset" ); }
597 QgsNamedColorList fetchColors( const QString &context = QString(), const QColor &baseColor = QColor() ) override;
598 bool isEditable() const override { return true; }
599
600 private:
601
602 QgsNamedColorList mColors;
603};
604
605
606#define DEFAULT_COLORBREWER_SCHEMENAME "Spectral"
607#define DEFAULT_COLORBREWER_COLORS 5
608
615class CORE_EXPORT QgsColorBrewerColorRamp : public QgsColorRamp
616{
617 public:
618
625 QgsColorBrewerColorRamp( const QString &schemeName = DEFAULT_COLORBREWER_SCHEMENAME,
626 int colors = DEFAULT_COLORBREWER_COLORS,
627 bool inverted = false );
628
635 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
636
637 double value( int index ) const override;
638 QColor color( double value ) const override;
639
645 static QString typeString() { return QStringLiteral( "colorbrewer" ); }
646
647 QString type() const override { return QgsColorBrewerColorRamp::typeString(); }
648 void invert() override;
649 QgsColorBrewerColorRamp *clone() const override SIP_FACTORY;
650 QVariantMap properties() const override;
651 int count() const override { return mColors; }
652
657 QString schemeName() const { return mSchemeName; }
658
663 int colors() const { return mColors; }
664
671 void setSchemeName( const QString &schemeName ) { mSchemeName = schemeName; loadPalette(); }
672
679 void setColors( int colors ) { mColors = colors; loadPalette(); }
680
685 static QStringList listSchemeNames();
686
693 static QList<int> listSchemeVariants( const QString &schemeName );
694
695 protected:
696
698 void loadPalette();
699
700 QString mSchemeName;
702 QList<QColor> mPalette;
704};
705
706
707#define DEFAULT_CPTCITY_SCHEMENAME "cb/div/BrBG_" //change this
708#define DEFAULT_CPTCITY_VARIANTNAME "05"
709
715{
716 public:
717
725 QgsCptCityColorRamp( const QString &schemeName = DEFAULT_CPTCITY_SCHEMENAME,
726 const QString &variantName = DEFAULT_CPTCITY_VARIANTNAME,
727 bool inverted = false,
728 bool doLoadFile = true );
729
738 QgsCptCityColorRamp( const QString &schemeName, const QStringList &variantList,
739 const QString &variantName = QString(), bool inverted = false,
740 bool doLoadFile = true );
741
743 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
744
750 static QString typeString() { return QStringLiteral( "cpt-city" ); }
751
752 QString type() const override;
753
754 void invert() override;
755
756 QgsCptCityColorRamp *clone() const override SIP_FACTORY;
757 void copy( const QgsCptCityColorRamp *other );
758 QgsGradientColorRamp *cloneGradientRamp() const SIP_FACTORY;
759
760 QVariantMap properties() const override;
761
762 QString schemeName() const { return mSchemeName; }
763 QString variantName() const { return mVariantName; }
764 QStringList variantList() const { return mVariantList; }
765
766 // lazy loading - have to call loadPalette() explicitly
767 void setSchemeName( const QString &schemeName ) { mSchemeName = schemeName; mFileLoaded = false; }
768 void setVariantName( const QString &variantName ) { mVariantName = variantName; mFileLoaded = false; }
769 void setVariantList( const QStringList &variantList ) { mVariantList = variantList; }
770 void setName( const QString &schemeName, const QString &variantName = QString(), const QStringList &variantList = QStringList() )
771 { mSchemeName = schemeName; mVariantName = variantName; mVariantList = variantList; mFileLoaded = false; }
772
773 void loadPalette() { loadFile(); }
774 bool hasMultiStops() const { return mMultiStops; }
775
782 static QString fileNameForVariant( const QString &schema, const QString &variant ) SIP_SKIP;
783
784 QString fileName() const;
785 bool loadFile();
786 bool fileLoaded() const { return mFileLoaded; }
787
788 QString copyingFileName() const;
789 QString descFileName() const;
790 QgsStringMap copyingInfo() const;
791
792 protected:
793 QString mSchemeName;
795 QStringList mVariantList;
796 bool mFileLoaded = false;
797 bool mMultiStops = false;
799
800};
801
802// clazy:excludeall=qstring-allocations
803
804#endif
AngularDirection
Angular directions.
Definition: qgis.h:1805
@ CounterClockwise
Counter-clockwise direction.
Color ramp utilising "Color Brewer" preset color schemes.
static QString typeString()
Returns the string identifier for QgsColorBrewerColorRamp.
QString type() const override
Returns a string representing the color ramp type.
QString schemeName() const
Returns the name of the color brewer color scheme.
int colors() const
Returns the number of colors in the ramp.
void setSchemeName(const QString &schemeName)
Sets the name of the color brewer color scheme.
void setColors(int colors)
Sets the number of colors in the ramp.
Abstract base class for color ramps.
Definition: qgscolorramp.h:30
Abstract base class for color schemes.
void setName(const QString &schemeName, const QString &variantName=QString(), const QStringList &variantList=QStringList())
void setSchemeName(const QString &schemeName)
void setVariantList(const QStringList &variantList)
QStringList variantList() const
void setVariantName(const QString &variantName)
static QString typeString()
Returns the string identifier for QgsCptCityColorRamp.
bool hasMultiStops() const
QString variantName() const
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
QgsGradientStopsList mStops
void setColor1(const QColor &color)
Sets the gradient start color.
void setColor2(const QColor &color)
Sets the gradient end color.
void setInfo(const QgsStringMap &info)
Sets additional info to attach to the gradient ramp (e.g., authorship notes)
bool isDiscrete() const
Returns true if the gradient is using discrete interpolation, rather than smoothly interpolating betw...
int count() const override
Returns number of defined colors, or -1 if undefined.
QgsStringMap info() const
Returns any additional info attached to the gradient ramp (e.g., authorship notes)
QColor::Spec colorSpec() const
Returns the color specification in which the color component interpolation will occur.
static QString typeString()
Returns the string identifier for QgsGradientColorRamp.
void setDirection(Qgis::AngularDirection direction)
Sets the direction to traverse the color wheel using when interpolating hue-based color specification...
Qgis::AngularDirection direction() const
Returns the direction to traverse the color wheel using when interpolating hue-based color specificat...
QgsGradientStopsList stops() const
Returns the list of intermediate gradient stops for the ramp.
void setDiscrete(bool discrete)
Sets whether the gradient should use discrete interpolation, rather than smoothly interpolating betwe...
QColor color2() const
Returns the gradient end color.
Represents a color stop within a QgsGradientColorRamp color ramp.
Qgis::AngularDirection direction() const
Returns the direction to traverse the color wheel using when interpolating hue-based color specificat...
bool operator==(const QgsGradientStop &other) const
QColor::Spec colorSpec() const
Returns the color specification in which the color component interpolation will occur.
double offset
Relative positional offset, between 0 and 1.
bool operator!=(const QgsGradientStop &other) const
void setDirection(Qgis::AngularDirection direction)
Sets the direction to traverse the color wheel using when interpolating hue-based color specification...
QColor color
Gradient color at stop.
Constrained random color ramp, which returns random colors based on preset parameters.
static QString typeString()
Returns the string identifier for QgsLimitedRandomColorRamp.
void setSatMin(int val)
Sets the minimum saturation for generated colors.
void setHueMin(int val)
Sets the minimum hue for generated colors.
void setSatMax(int val)
Sets the maximum saturation for generated colors.
int valMax() const
Returns the maximum value for generated colors.
int satMax() const
Returns the maximum saturation for generated colors.
void setHueMax(int val)
Sets the maximum hue for generated colors.
void setCount(int val)
Sets the number of colors contained in the ramp.
int hueMax() const
Returns the maximum hue for generated colors.
int hueMin() const
Returns the minimum hue for generated colors.
void setValMax(int val)
Sets the maximum value for generated colors.
int valMin() const
Returns the minimum value for generated colors.
void setValMin(int val)
Sets the minimum value for generated colors.
int satMin() const
Returns the minimum saturation for generated colors.
A scheme based color ramp consisting of a list of predefined colors.
bool setColors(const QgsNamedColorList &colors, const QString &=QString(), const QColor &=QColor()) override
Sets the list of colors used by the ramp.
static QString typeString()
Returns the string identifier for QgsPresetSchemeColorRamp.
bool isEditable() const override
Returns whether the color scheme is editable.
Totally random color ramp.
QgsRandomColorRamp()=default
Constructor for QgsRandomColorRamp.
static QString typeString()
Returns the string identifier for QgsRandomColorRamp.
QList< QPair< QColor, QString > > QgsNamedColorList
List of colors paired with a friendly display name identifying the color.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:2527
QMap< QString, QString > QgsStringMap
Definition: qgis.h:3022
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define DEFAULT_COLORBREWER_COLORS
#define DEFAULT_COLORBREWER_SCHEMENAME
#define DEFAULT_RANDOM_HUE_MAX
#define DEFAULT_CPTCITY_SCHEMENAME
#define DEFAULT_RANDOM_HUE_MIN
#define DEFAULT_RANDOM_COUNT
#define DEFAULT_RANDOM_SAT_MAX
#define DEFAULT_RANDOM_SAT_MIN
#define DEFAULT_CPTCITY_VARIANTNAME
#define DEFAULT_GRADIENT_COLOR1
#define DEFAULT_RANDOM_VAL_MIN
QList< QgsGradientStop > QgsGradientStopsList
List of gradient stops.
#define DEFAULT_GRADIENT_COLOR2
#define DEFAULT_RANDOM_VAL_MAX
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)