23using namespace Qt::StringLiterals;
34 return QPainter::CompositionMode_SourceOver;
36 return QPainter::CompositionMode_Lighten;
38 return QPainter::CompositionMode_Screen;
40 return QPainter::CompositionMode_ColorDodge;
42 return QPainter::CompositionMode_Plus;
44 return QPainter::CompositionMode_Darken;
46 return QPainter::CompositionMode_Multiply;
48 return QPainter::CompositionMode_ColorBurn;
50 return QPainter::CompositionMode_Overlay;
52 return QPainter::CompositionMode_SoftLight;
54 return QPainter::CompositionMode_HardLight;
56 return QPainter::CompositionMode_Difference;
58 return QPainter::CompositionMode_Exclusion;
60 return QPainter::CompositionMode_Source;
62 return QPainter::CompositionMode_DestinationOver;
64 return QPainter::CompositionMode_Clear;
66 return QPainter::CompositionMode_Destination;
68 return QPainter::CompositionMode_SourceIn;
70 return QPainter::CompositionMode_DestinationIn;
72 return QPainter::CompositionMode_SourceOut;
74 return QPainter::CompositionMode_DestinationOut;
76 return QPainter::CompositionMode_SourceAtop;
78 return QPainter::CompositionMode_DestinationAtop;
80 return QPainter::CompositionMode_Xor;
83 return QPainter::CompositionMode_SourceOver;
93 case QPainter::CompositionMode_SourceOver:
95 case QPainter::CompositionMode_Lighten:
97 case QPainter::CompositionMode_Screen:
99 case QPainter::CompositionMode_ColorDodge:
101 case QPainter::CompositionMode_Plus:
103 case QPainter::CompositionMode_Darken:
105 case QPainter::CompositionMode_Multiply:
107 case QPainter::CompositionMode_ColorBurn:
109 case QPainter::CompositionMode_Overlay:
111 case QPainter::CompositionMode_SoftLight:
113 case QPainter::CompositionMode_HardLight:
115 case QPainter::CompositionMode_Difference:
117 case QPainter::CompositionMode_Exclusion:
119 case QPainter::CompositionMode_Source:
121 case QPainter::CompositionMode_DestinationOver:
123 case QPainter::CompositionMode_Clear:
125 case QPainter::CompositionMode_Destination:
127 case QPainter::CompositionMode_SourceIn:
129 case QPainter::CompositionMode_DestinationIn:
131 case QPainter::CompositionMode_SourceOut:
133 case QPainter::CompositionMode_DestinationOut:
135 case QPainter::CompositionMode_SourceAtop:
137 case QPainter::CompositionMode_DestinationAtop:
139 case QPainter::CompositionMode_Xor:
142 QgsDebugError( u
"Composition mode %1 mapped to Normal"_s.arg( blendMode ) );
182QTransform
QgsPainting::triangleToTriangleTransform(
double inX1,
double inY1,
double inX2,
double inY2,
double inX3,
double inY3,
double outX1,
double outY1,
double outX2,
double outY2,
double outX3,
double outY3,
bool &ok )
199 return ( U.inverted( &ok ) ) * V;
202bool QgsPainting::drawTriangleUsingTexture( QPainter *painter,
const QPolygonF &triangle,
const QImage &textureImage,
float textureX1,
float textureY1,
float textureX2,
float textureY2,
float textureX3,
float textureY3 )
206 textureX1 * ( textureImage.width() - 1 ), textureY1 * ( textureImage.height() - 1 ),
207 textureX2 * ( textureImage.width() - 1 ), textureY2 * ( textureImage.height() - 1 ),
208 textureX3 * ( textureImage.width() - 1 ), textureY3 * ( textureImage.height() - 1 ),
209 triangle.at( 0 ).x(), triangle.at( 0 ).y(),
210 triangle.at( 1 ).x(), triangle.at( 1 ).y(),
211 triangle.at( 2 ).x(), triangle.at( 2 ).y(),
218 const QBrush previousBrush = painter->brush();
220 QBrush textureBrush( textureImage );
221 textureBrush.setTransform( brushTransform );
223 painter->setBrush( textureBrush );
224 painter->drawPolygon( triangle );
225 painter->setBrush( previousBrush );
258 painter->scale( xScale, yScale );
259 painter->drawPicture( QPointF( point.x() / xScale, point.y() / yScale ), picture );
260 painter->scale( 1 / xScale, 1 / yScale );
BlendMode
Blending modes defining the available composition modes that can be used when painting.
@ Destination
Destination.
@ DestinationOut
Destination out.
@ DestinationIn
Destination in.
@ DestinationOver
Destination over.
@ DestinationAtop
Destination atop.
static bool drawTriangleUsingTexture(QPainter *painter, const QPolygonF &triangle, const QImage &textureImage, float textureX1, float textureY1, float textureX2, float textureY2, float textureX3, float textureY3)
Draws a triangle onto a painter using a mapped texture image.
static int qtDefaultDpiY()
Returns the default Qt vertical DPI.
static Qgis::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a Qgis::BlendMode corresponding to a QPainter::CompositionMode.
static bool isClippingMode(Qgis::BlendMode mode)
Returns true if mode is a clipping blend mode.
static int qtDefaultDpiX()
Returns the default Qt horizontal DPI.
static QTransform triangleToTriangleTransform(double inX1, double inY1, double inX2, double inY2, double inX3, double inY3, double outX1, double outY1, double outX2, double outY2, double outX3, double outY3, bool &ok)
Calculates the QTransform which maps the triangle defined by the points (inX1, inY1),...
static QPainter::CompositionMode getCompositionMode(Qgis::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a Qgis::BlendMode.
static void applyScaleFixForQPictureDpi(QPainter *painter)
Applies a workaround to a painter to avoid an issue with incorrect scaling when drawing QPictures.
static void drawPicture(QPainter *painter, const QPointF &point, const QPicture &picture)
Draws a picture onto a painter, correctly applying workarounds to avoid issues with incorrect scaling...
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
#define QgsDebugError(str)
Q_GUI_EXPORT int qt_defaultDpiX()
Q_GUI_EXPORT int qt_defaultDpiY()