Implement the missing raster operations that were in Qt 3
Although not widely used, the raster operations from Qt 3 were useful and some of them were already implemented, this brings the rest of them back for those who need them. Change-Id: Id538611eaaba9be3d39bf2dd33b6c532f5d4aba8 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
This commit is contained in:
parent
12e5464fa3
commit
ae0ddb8c72
@ -3653,6 +3653,107 @@ void QT_FASTCALL rasterop_SourceAndNotDestination(uint *Q_DECL_RESTRICT dest,
|
||||
}
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_NotSourceOrDestination(uint *Q_DECL_RESTRICT dest,
|
||||
const uint *Q_DECL_RESTRICT src,
|
||||
int length,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(const_alpha);
|
||||
while (length--) {
|
||||
*dest = (~(*src) | *dest) | 0xff000000;
|
||||
++dest; ++src;
|
||||
}
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_solid_NotSourceOrDestination(uint *Q_DECL_RESTRICT dest,
|
||||
int length,
|
||||
uint color,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(const_alpha);
|
||||
color = ~color | 0xff000000;
|
||||
while (length--)
|
||||
*dest++ |= color;
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_SourceOrNotDestination(uint *Q_DECL_RESTRICT dest,
|
||||
const uint *Q_DECL_RESTRICT src,
|
||||
int length,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(const_alpha);
|
||||
while (length--) {
|
||||
*dest = (*src | ~(*dest)) | 0xff000000;
|
||||
++dest; ++src;
|
||||
}
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_solid_SourceOrNotDestination(uint *Q_DECL_RESTRICT dest,
|
||||
int length,
|
||||
uint color,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(const_alpha);
|
||||
while (length--) {
|
||||
*dest = (color | ~(*dest)) | 0xff000000;
|
||||
++dest;
|
||||
}
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_ClearDestination(uint *Q_DECL_RESTRICT dest,
|
||||
const uint *Q_DECL_RESTRICT src,
|
||||
int length,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(src);
|
||||
comp_func_solid_SourceOver (dest, length, 0xff000000, const_alpha);
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_solid_ClearDestination(uint *Q_DECL_RESTRICT dest,
|
||||
int length,
|
||||
uint color,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(color);
|
||||
comp_func_solid_SourceOver (dest, length, 0xff000000, const_alpha);
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_SetDestination(uint *Q_DECL_RESTRICT dest,
|
||||
const uint *Q_DECL_RESTRICT src,
|
||||
int length,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(src);
|
||||
comp_func_solid_SourceOver (dest, length, 0xffffffff, const_alpha);
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_solid_SetDestination(uint *Q_DECL_RESTRICT dest,
|
||||
int length,
|
||||
uint color,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(color);
|
||||
comp_func_solid_SourceOver (dest, length, 0xffffffff, const_alpha);
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_NotDestination(uint *Q_DECL_RESTRICT dest,
|
||||
const uint *Q_DECL_RESTRICT src,
|
||||
int length,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(src);
|
||||
rasterop_solid_SourceXorDestination (dest, length, 0x00ffffff, const_alpha);
|
||||
}
|
||||
|
||||
void QT_FASTCALL rasterop_solid_NotDestination(uint *Q_DECL_RESTRICT dest,
|
||||
int length,
|
||||
uint color,
|
||||
uint const_alpha)
|
||||
{
|
||||
Q_UNUSED(color);
|
||||
rasterop_solid_SourceXorDestination (dest, length, 0x00ffffff, const_alpha);
|
||||
}
|
||||
|
||||
static CompositionFunctionSolid functionForModeSolid_C[] = {
|
||||
comp_func_solid_SourceOver,
|
||||
comp_func_solid_DestinationOver,
|
||||
@ -3686,7 +3787,13 @@ static CompositionFunctionSolid functionForModeSolid_C[] = {
|
||||
rasterop_solid_NotSourceXorDestination,
|
||||
rasterop_solid_NotSource,
|
||||
rasterop_solid_NotSourceAndDestination,
|
||||
rasterop_solid_SourceAndNotDestination
|
||||
rasterop_solid_SourceAndNotDestination,
|
||||
rasterop_solid_SourceAndNotDestination,
|
||||
rasterop_solid_NotSourceOrDestination,
|
||||
rasterop_solid_SourceOrNotDestination,
|
||||
rasterop_solid_ClearDestination,
|
||||
rasterop_solid_SetDestination,
|
||||
rasterop_solid_NotDestination
|
||||
};
|
||||
|
||||
static const CompositionFunctionSolid *functionForModeSolid = functionForModeSolid_C;
|
||||
@ -3724,7 +3831,13 @@ static CompositionFunction functionForMode_C[] = {
|
||||
rasterop_NotSourceXorDestination,
|
||||
rasterop_NotSource,
|
||||
rasterop_NotSourceAndDestination,
|
||||
rasterop_SourceAndNotDestination
|
||||
rasterop_SourceAndNotDestination,
|
||||
rasterop_SourceAndNotDestination,
|
||||
rasterop_NotSourceOrDestination,
|
||||
rasterop_SourceOrNotDestination,
|
||||
rasterop_ClearDestination,
|
||||
rasterop_SetDestination,
|
||||
rasterop_NotDestination
|
||||
};
|
||||
|
||||
static const CompositionFunction *functionForMode = functionForMode_C;
|
||||
|
@ -98,7 +98,12 @@ CompositionFunctionSolid qt_functionForModeSolid_IWMMXT[numCompositionFunctions]
|
||||
rasterop_solid_NotSourceXorDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_NotSource<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_NotSourceAndDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_SourceAndNotDestination<QIWMMXTIntrinsics>
|
||||
rasterop_solid_SourceAndNotDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_NotSourceOrDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_SourceOrNotDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_ClearDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_SetDestination<QIWMMXTIntrinsics>,
|
||||
rasterop_solid_NotDestination<QIWMMXTIntrinsics>
|
||||
};
|
||||
|
||||
CompositionFunction qt_functionForMode_IWMMXT[] = {
|
||||
@ -134,7 +139,12 @@ CompositionFunction qt_functionForMode_IWMMXT[] = {
|
||||
rasterop_NotSourceXorDestination,
|
||||
rasterop_NotSource,
|
||||
rasterop_NotSourceAndDestination,
|
||||
rasterop_SourceAndNotDestination
|
||||
rasterop_SourceAndNotDestination,
|
||||
rasterop_NotSourceOrDestination,
|
||||
rasterop_SourceOrNotDestination,
|
||||
rasterop_ClearDestination,
|
||||
rasterop_SetDestination,
|
||||
rasterop_NotDestination
|
||||
};
|
||||
|
||||
void qt_blend_color_argb_iwmmxt(int count, const QSpan *spans, void *userData)
|
||||
|
@ -926,7 +926,11 @@ void QT_FASTCALL rasterop_NotSourceXorDestination(uint *dest, const uint *src, i
|
||||
void QT_FASTCALL rasterop_NotSource(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_NotSourceAndDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_SourceAndNotDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
|
||||
void QT_FASTCALL rasterop_NotSourceOrDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_SourceOrNotDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_ClearDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_SetDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_NotDestination(uint *dest, const uint *src, int length, uint const_alpha);
|
||||
// prototypes of all the solid composition functions
|
||||
void QT_FASTCALL comp_func_solid_SourceOver(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL comp_func_solid_DestinationOver(uint *dest, int length, uint color, uint const_alpha);
|
||||
@ -961,6 +965,11 @@ void QT_FASTCALL rasterop_solid_NotSourceXorDestination(uint *dest, int length,
|
||||
void QT_FASTCALL rasterop_solid_NotSource(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_NotSourceAndDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_SourceAndNotDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_NotSourceOrDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_SourceOrNotDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_ClearDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_SetDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
void QT_FASTCALL rasterop_solid_NotDestination(uint *dest, int length, uint color, uint const_alpha);
|
||||
|
||||
|
||||
struct QPixelLayout;
|
||||
|
@ -347,7 +347,12 @@ CompositionFunctionSolid qt_functionForModeSolid_SSE2[numCompositionFunctions] =
|
||||
rasterop_solid_NotSourceXorDestination,
|
||||
rasterop_solid_NotSource,
|
||||
rasterop_solid_NotSourceAndDestination,
|
||||
rasterop_solid_SourceAndNotDestination
|
||||
rasterop_solid_SourceAndNotDestination,
|
||||
rasterop_solid_NotSourceOrDestination,
|
||||
rasterop_solid_SourceOrNotDestination,
|
||||
rasterop_solid_ClearDestination,
|
||||
rasterop_solid_SetDestination,
|
||||
rasterop_solid_NotDestination
|
||||
};
|
||||
|
||||
CompositionFunction qt_functionForMode_SSE2[numCompositionFunctions] = {
|
||||
@ -383,7 +388,12 @@ CompositionFunction qt_functionForMode_SSE2[numCompositionFunctions] = {
|
||||
rasterop_NotSourceXorDestination,
|
||||
rasterop_NotSource,
|
||||
rasterop_NotSourceAndDestination,
|
||||
rasterop_SourceAndNotDestination
|
||||
rasterop_SourceAndNotDestination,
|
||||
rasterop_NotSourceOrDestination,
|
||||
rasterop_SourceOrNotDestination,
|
||||
rasterop_ClearDestination,
|
||||
rasterop_SetDestination,
|
||||
rasterop_NotDestination
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -105,7 +105,7 @@ extern CompositionFunction qt_functionForMode_IWMMXT[];
|
||||
extern CompositionFunctionSolid qt_functionForModeSolid_IWMMXT[];
|
||||
#endif
|
||||
|
||||
static const int numCompositionFunctions = 33;
|
||||
static const int numCompositionFunctions = 38;
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
@ -2320,6 +2320,23 @@ void QPainter::setBrushOrigin(const QPointF &p)
|
||||
where the source is AND'ed with the inverted destination pixels
|
||||
(src AND (NOT dst)).
|
||||
|
||||
\value RasterOp_NotSourceOrDestination Does a bitwise operation
|
||||
where the source is inverted and then OR'ed with the destination
|
||||
((NOT src) OR dst).
|
||||
|
||||
\value RasterOp_ClearDestination The pixels in the destination are
|
||||
cleared (set to 0) independent of the source.
|
||||
|
||||
\value RasterOp_SetDestination The pixels in the destination are
|
||||
set (set to 1) independent of the source.
|
||||
|
||||
\value RasterOp_NotDestination Does a bitwise operation
|
||||
where the destination pixels are inverted (NOT dst).
|
||||
|
||||
\value RasterOp_SourceOrNotDestination Does a bitwise operation
|
||||
where the source is OR'ed with the inverted destination pixels
|
||||
(src OR (NOT dst)).
|
||||
|
||||
\sa compositionMode(), setCompositionMode(), {QPainter#Composition
|
||||
Modes}{Composition Modes}, {Image Composition Example}
|
||||
*/
|
||||
|
@ -171,7 +171,12 @@ public:
|
||||
RasterOp_NotSourceXorDestination,
|
||||
RasterOp_NotSource,
|
||||
RasterOp_NotSourceAndDestination,
|
||||
RasterOp_SourceAndNotDestination
|
||||
RasterOp_SourceAndNotDestination,
|
||||
RasterOp_NotSourceOrDestination,
|
||||
RasterOp_SourceOrNotDestination,
|
||||
RasterOp_ClearDestination,
|
||||
RasterOp_SetDestination,
|
||||
RasterOp_NotDestination
|
||||
};
|
||||
void setCompositionMode(CompositionMode mode);
|
||||
CompositionMode compositionMode() const;
|
||||
|
Loading…
Reference in New Issue
Block a user