QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
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.h"
20#include "qgis_core.h"
21#include "qgscolorramp.h"
22#include "qgscolorscheme.h"
23
24#include <QColor>
25#include <QGradient>
26#include <QString>
27
28using namespace Qt::StringLiterals;
29
30#ifndef SIP_RUN
32typedef QColor( *InterpolateColorFunc )( const QColor &c1, const QColor &c2, const double value, Qgis::AngularDirection direction );
34#endif
35
41class CORE_EXPORT QgsGradientStop
42{
43 public:
44
50 QgsGradientStop( double offset, const QColor &color );
51
53 double offset;
55 QColor color;
56
57 bool operator==( const QgsGradientStop &other ) const
58 {
59 return other.color == color && qgsDoubleNear( other.offset, offset ) && other.mColorSpec == mColorSpec && other.mDirection == mDirection;
60 }
61
62 bool operator!=( const QgsGradientStop &other ) const
63 {
64 return !( *this == other );
65 }
66
76 QColor::Spec colorSpec() const { return mColorSpec; }
77
89 void setColorSpec( QColor::Spec spec );
90
101 Qgis::AngularDirection direction() const { return mDirection; }
102
114
115 private:
116
117 QColor::Spec mColorSpec = QColor::Spec::Rgb;
119 InterpolateColorFunc mFunc = nullptr;
120
122};
123
125typedef QList<QgsGradientStop> QgsGradientStopsList;
126
127// these are the QGIS branding colors, exaggerated a bit to make a default ramp with greater color variation
128// then the official QGIS color gradient!
129#define DEFAULT_GRADIENT_COLOR1 QColor(69, 116, 40)
130#define DEFAULT_GRADIENT_COLOR2 QColor(188, 220, 60)
131
138class CORE_EXPORT QgsGradientColorRamp : public QgsColorRamp
139{
140 public:
141
151 const QColor &color2 = DEFAULT_GRADIENT_COLOR2,
152 bool discrete = false,
154
156 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
157
158 int count() const override { return mStops.count() + 2; }
159 double value( int index ) const override;
160 QColor color( double value ) const override;
161
167 static QString typeString() { return u"gradient"_s; }
168
169 QString type() const override;
170 void invert() override;
171 QgsGradientColorRamp *clone() const override SIP_FACTORY;
172 QVariantMap properties() const override;
173
179 QColor color1() const { return mColor1; }
180
186 QColor color2() const { return mColor2; }
187
194 void setColor1( const QColor &color ) { mColor1 = color; }
195
202 void setColor2( const QColor &color ) { mColor2 = color; }
203
209 bool isDiscrete() const { return mDiscrete; }
210
218 void setDiscrete( bool discrete ) { mDiscrete = discrete; }
219
227 void convertToDiscrete( bool discrete );
228
236 void setStops( const QgsGradientStopsList &stops );
237
243
248 QgsStringMap info() const { return mInfo; }
249
255 void setInfo( const QgsStringMap &info ) { mInfo = info; }
256
263 void addStopsToGradient( QGradient *gradient, double opacity = 1 ) const;
264
274 QColor::Spec colorSpec() const { return mColorSpec; }
275
287 void setColorSpec( QColor::Spec spec );
288
300
312
313 protected:
314 QColor mColor1;
315 QColor mColor2;
319 QColor::Spec mColorSpec = QColor::Spec::Rgb;
321
322 InterpolateColorFunc mFunc = nullptr;
323};
324
326
327#define DEFAULT_RANDOM_COUNT 10
328#define DEFAULT_RANDOM_HUE_MIN 0
329#define DEFAULT_RANDOM_HUE_MAX 359
330#define DEFAULT_RANDOM_VAL_MIN 200
331#define DEFAULT_RANDOM_VAL_MAX 240
332#define DEFAULT_RANDOM_SAT_MIN 100
333#define DEFAULT_RANDOM_SAT_MAX 240
334
340class CORE_EXPORT QgsLimitedRandomColorRamp : public QgsColorRamp
341{
342 public:
343
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 u"random"_s; }
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
385 static QList<QColor> randomColors( int count,
386 int hueMax = DEFAULT_RANDOM_HUE_MAX, int hueMin = DEFAULT_RANDOM_HUE_MIN,
387 int satMax = DEFAULT_RANDOM_SAT_MAX, int satMin = DEFAULT_RANDOM_SAT_MIN,
388 int valMax = DEFAULT_RANDOM_VAL_MAX, int valMin = DEFAULT_RANDOM_VAL_MIN );
389
394 void updateColors();
395
400 int hueMin() const { return mHueMin; }
401
406 int hueMax() const { return mHueMax; }
407
412 int satMin() const { return mSatMin; }
413
418 int satMax() const { return mSatMax; }
419
424 int valMin() const { return mValMin; }
425
430 int valMax() const { return mValMax; }
431
435 void setCount( int val ) { mCount = val; }
436
441 void setHueMin( int val ) { mHueMin = val; }
442
447 void setHueMax( int val ) { mHueMax = val; }
448
453 void setSatMin( int val ) { mSatMin = val; }
454
459 void setSatMax( int val ) { mSatMax = val; }
460
465 void setValMin( int val ) { mValMin = val; }
466
471 void setValMax( int val ) { mValMax = val; }
472
473 protected:
481 QList<QColor> mColors;
482};
483
492class CORE_EXPORT QgsRandomColorRamp: public QgsColorRamp
493{
494 public:
495
497
498 int count() const override;
499
500 double value( int index ) const override;
501
502 QColor color( double value ) const override;
503
510 virtual void setTotalColorCount( int colorCount );
511
517 static QString typeString() { return u"randomcolors"_s; }
518
519 QString type() const override;
520
521 QgsRandomColorRamp *clone() const override SIP_FACTORY;
522
523 QVariantMap properties() const override;
524
525 protected:
526
528 QList<QColor> mPrecalculatedColors;
529
530};
531
532
538class CORE_EXPORT QgsPresetSchemeColorRamp : public QgsColorRamp, public QgsColorScheme
539{
540 public:
541
546 QgsPresetSchemeColorRamp( const QList< QColor > &colors = QList< QColor >() );
547
553
560 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
561
567 bool setColors( const QgsNamedColorList &colors, const QString & = QString(), const QColor & = QColor() ) override { mColors = colors; return true; }
568
573 QList< QColor > colors() const;
574
575 double value( int index ) const override;
576 QColor color( double value ) const override;
577
583 static QString typeString() { return u"preset"_s; }
584
585 QString type() const override;
586 void invert() override;
587 QgsPresetSchemeColorRamp *clone() const override SIP_FACTORY;
588 QVariantMap properties() const override;
589 int count() const override;
590
591 QString schemeName() const override { return u"preset"_s; }
592 QgsNamedColorList fetchColors( const QString &context = QString(), const QColor &baseColor = QColor() ) override;
593 bool isEditable() const override { return true; }
594
595 private:
596
597 QgsNamedColorList mColors;
598};
599
600
601#define DEFAULT_COLORBREWER_SCHEMENAME "Spectral"
602#define DEFAULT_COLORBREWER_COLORS 5
603
609class CORE_EXPORT QgsColorBrewerColorRamp : public QgsColorRamp
610{
611 public:
612
621 bool inverted = false );
622
629 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
630
631 double value( int index ) const override;
632 QColor color( double value ) const override;
633
639 static QString typeString() { return u"colorbrewer"_s; }
640
641 QString type() const override { return QgsColorBrewerColorRamp::typeString(); }
642 void invert() override;
643 QgsColorBrewerColorRamp *clone() const override SIP_FACTORY;
644 QVariantMap properties() const override;
645 int count() const override { return mColors; }
646
651 QString schemeName() const { return mSchemeName; }
652
657 int colors() const { return mColors; }
658
666
674
679 static QStringList listSchemeNames();
680
687 static QList<int> listSchemeVariants( const QString &schemeName );
688
689 protected:
690
692 void loadPalette();
693
694 QString mSchemeName;
696 QList<QColor> mPalette;
698};
699
700
701#define DEFAULT_CPTCITY_SCHEMENAME "cb/div/BrBG_" //change this
702#define DEFAULT_CPTCITY_VARIANTNAME "05"
703
711{
712 public:
713
723 bool inverted = false,
724 bool doLoadFile = true );
725
734 QgsCptCityColorRamp( const QString &schemeName, const QStringList &variantList,
735 const QString &variantName = QString(), bool inverted = false,
736 bool doLoadFile = true );
737
739 static QgsColorRamp *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY; // cppcheck-suppress duplInheritedMember
740
746 static QString typeString() { return u"cpt-city"_s; } // cppcheck-suppress duplInheritedMember
747
748 QString type() const override;
749
750 void invert() override;
751
752 QgsCptCityColorRamp *clone() const override SIP_FACTORY;
753 void copy( const QgsCptCityColorRamp *other );
754 QgsGradientColorRamp *cloneGradientRamp() const SIP_FACTORY;
755
756 QVariantMap properties() const override;
757
758 QString schemeName() const { return mSchemeName; }
759 QString variantName() const { return mVariantName; }
760 QStringList variantList() const { return mVariantList; }
761
762 // lazy loading - have to call loadPalette() explicitly
763 void setSchemeName( const QString &schemeName ) { mSchemeName = schemeName; mFileLoaded = false; }
764 void setVariantName( const QString &variantName ) { mVariantName = variantName; mFileLoaded = false; }
765 void setVariantList( const QStringList &variantList ) { mVariantList = variantList; }
766 void setName( const QString &schemeName, const QString &variantName = QString(), const QStringList &variantList = QStringList() )
768
769 void loadPalette() { loadFile(); }
770 bool hasMultiStops() const { return mMultiStops; }
771
778 static QString fileNameForVariant( const QString &schema, const QString &variant ) SIP_SKIP;
779
780 QString fileName() const;
781 bool loadFile();
782 bool fileLoaded() const { return mFileLoaded; }
783
784 QString copyingFileName() const;
785 QString descFileName() const;
786 QgsStringMap copyingInfo() const;
787
788 protected:
789 QString mSchemeName;
791 QStringList mVariantList;
792 bool mFileLoaded = false;
793 bool mMultiStops = false;
795
796};
797
798// clazy:excludeall=qstring-allocations
799
800#endif
AngularDirection
Angular directions.
Definition qgis.h:3491
@ CounterClockwise
Counter-clockwise direction.
Definition qgis.h:3493
Color ramp utilising "Color Brewer" preset color schemes.
QColor color(double value) const override
Returns the color corresponding to a specified value.
int count() const override
Returns number of defined colors, or -1 if undefined.
static QString typeString()
Returns the string identifier for QgsColorBrewerColorRamp.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsColorBrewerColorRamp color ramp created using the properties encoded in a string map...
QString type() const override
Returns a string representing the color ramp type.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QString schemeName() const
Returns the name of the color brewer color scheme.
int colors() const
Returns the number of colors in the ramp.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
QgsColorBrewerColorRamp(const QString &schemeName=DEFAULT_COLORBREWER_SCHEMENAME, int colors=DEFAULT_COLORBREWER_COLORS, bool inverted=false)
Constructor for QgsColorBrewerColorRamp.
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.
void loadPalette()
Generates the scheme using the current name and number of colors.
Abstract base class for color ramps.
QgsColorScheme()=default
A color ramp from the CPT City collection.
void setName(const QString &schemeName, const QString &variantName=QString(), const QStringList &variantList=QStringList())
void setSchemeName(const QString &schemeName)
void setVariantList(const QStringList &variantList)
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
QgsCptCityColorRamp(const QString &schemeName=DEFAULT_CPTCITY_SCHEMENAME, const QString &variantName=DEFAULT_CPTCITY_VARIANTNAME, bool inverted=false, bool doLoadFile=true)
Constructor for QgsCptCityColorRamp.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Creates the symbol layer.
QStringList variantList() const
void setVariantName(const QString &variantName)
static QString typeString()
Returns the string identifier for QgsCptCityColorRamp.
QString schemeName() 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.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Creates a new QgsColorRamp from a map of properties.
QgsStringMap info() const
Returns any additional info attached to the gradient ramp (e.g., authorship notes).
Qgis::AngularDirection mDirection
QColor::Spec colorSpec() const
Returns the color specification in which the color component interpolation will occur.
QColor color(double value) const override
Returns the color corresponding to a specified value.
static QString typeString()
Returns the string identifier for QgsGradientColorRamp.
QgsGradientColorRamp(const QColor &color1=DEFAULT_GRADIENT_COLOR1, const QColor &color2=DEFAULT_GRADIENT_COLOR2, bool discrete=false, const QgsGradientStopsList &stops=QgsGradientStopsList())
Constructor for QgsGradientColorRamp.
QColor color1() const
Returns the gradient start color.
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...
InterpolateColorFunc mFunc
QColor color2() const
Returns the gradient end color.
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...
friend class QgsGradientColorRamp
QColor color
Gradient color at stop.
QgsGradientStop(double offset, const QColor &color)
Constructor for QgsGradientStop.
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.
int count() const override
Returns number of defined colors, or -1 if undefined.
void setHueMin(int val)
Sets the minimum hue for generated colors.
void setSatMax(int val)
Sets the maximum saturation for generated colors.
QColor color(double value) const override
Returns the color corresponding to a specified value.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
int valMax() const
Returns the maximum value for generated colors.
int satMax() const
Returns the maximum saturation for generated colors.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsLimitedRandomColorRamp color ramp created using the properties encoded in a string m...
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.
QgsLimitedRandomColorRamp(int count=DEFAULT_RANDOM_COUNT, int hueMin=DEFAULT_RANDOM_HUE_MIN, int hueMax=DEFAULT_RANDOM_HUE_MAX, int satMin=DEFAULT_RANDOM_SAT_MIN, int satMax=DEFAULT_RANDOM_SAT_MAX, int valMin=DEFAULT_RANDOM_VAL_MIN, int valMax=DEFAULT_RANDOM_VAL_MAX)
Constructor for QgsLimitedRandomColorRamp.
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.
QList< QColor > colors() const
Returns the list of colors used by the ramp.
QString schemeName() const override
Gets the name for the color scheme.
static QString typeString()
Returns the string identifier for QgsPresetSchemeColorRamp.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsPresetSchemeColorRamp color ramp created using the properties encoded in a string ma...
QgsPresetSchemeColorRamp(const QList< QColor > &colors=QList< QColor >())
Constructor for QgsPresetSchemeColorRamp.
bool isEditable() const override
Returns whether the color scheme is editable.
A color ramp consisting of random colors, constrained within component ranges.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QList< QColor > mPrecalculatedColors
QgsRandomColorRamp()=default
static QString typeString()
Returns the string identifier for QgsRandomColorRamp.
int count() const override
Returns number of defined colors, or -1 if undefined.
virtual void setTotalColorCount(int colorCount)
Sets the desired total number of unique colors for the resultant ramp.
QColor color(double value) const override
Returns the color corresponding to a specified value.
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:6900
QMap< QString, QString > QgsStringMap
Definition qgis.h:7413
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_FACTORY
Definition qgis_sip.h:84
#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)