⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdrawhelper.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        for (int i = 0; i < length; ++i)            dest[i] = color + BYTE_MUL(dest[i], qAlpha(~color));    }}static void QT_FASTCALL comp_func_SourceOver(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            uint s = src[i];            dest[i] = s + BYTE_MUL(dest[i], qAlpha(~s));        }    } else {        for (int i = 0; i < length; ++i) {            uint s = BYTE_MUL(src[i], const_alpha);            dest[i] = s + BYTE_MUL(dest[i], qAlpha(~s));        }    }}/*  result = d + s * dia  dest = (d + s * dia) * ca + d * cia       = d + s * dia * ca*/static void QT_FASTCALL comp_func_solid_DestinationOver(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha != 255)        color = BYTE_MUL(color, const_alpha);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        dest[i] = d + BYTE_MUL(color, qAlpha(~d));    }}static void QT_FASTCALL comp_func_DestinationOver(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            uint d = dest[i];            dest[i] = d + BYTE_MUL(src[i], qAlpha(~d));        }    } else {        for (int i = 0; i < length; ++i) {            uint d = dest[i];            uint s = BYTE_MUL(src[i], const_alpha);            dest[i] = d + BYTE_MUL(s, qAlpha(~d));        }    }}/*  result = s * da  dest = s * da * ca + d * cia*/static void QT_FASTCALL comp_func_solid_SourceIn(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(color, qAlpha(dest[i]));    } else {        color = BYTE_MUL(color, const_alpha);        uint cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(d), d, cia);        }    }}static void QT_FASTCALL comp_func_SourceIn(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(src[i], qAlpha(dest[i]));    } else {        uint cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint d = dest[i];            uint s = BYTE_MUL(src[i], const_alpha);            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, cia);        }    }}/*  result = d * sa  dest = d * sa * ca + d * cia       = d * (sa * ca + cia)*/static void QT_FASTCALL comp_func_solid_DestinationIn(uint *dest, int length, uint color, uint const_alpha){    uint a = qAlpha(color);    if (const_alpha != 255) {        a = BYTE_MUL(a, const_alpha) + 255 - const_alpha;    }    for (int i = 0; i < length; ++i) {        dest[i] = BYTE_MUL(dest[i], a);    }}static void QT_FASTCALL comp_func_DestinationIn(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(dest[i], qAlpha(src[i]));    } else {        int cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint a = BYTE_MUL(qAlpha(src[i]), const_alpha) + cia;            dest[i] = BYTE_MUL(dest[i], a);        }    }}/*  result = s * dia  dest = s * dia * ca + d * cia*/static void QT_FASTCALL comp_func_solid_SourceOut(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(color, qAlpha(~dest[i]));    } else {        color = BYTE_MUL(color, const_alpha);        int cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(~d), d, cia);        }    }}static void QT_FASTCALL comp_func_SourceOut(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(src[i], qAlpha(~dest[i]));    } else {        int cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint s = BYTE_MUL(src[i], const_alpha);            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, cia);        }    }}/*  result = d * sia  dest = d * sia * ca + d * cia       = d * (sia * ca + cia)*/static void QT_FASTCALL comp_func_solid_DestinationOut(uint *dest, int length, uint color, uint const_alpha){    uint a = qAlpha(~color);    if (const_alpha != 255)        a = BYTE_MUL(a, const_alpha) + 255 - const_alpha;    for (int i = 0; i < length; ++i)        dest[i] = BYTE_MUL(dest[i], a);}static void QT_FASTCALL comp_func_DestinationOut(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i)            dest[i] = BYTE_MUL(dest[i], qAlpha(~src[i]));    } else {        int cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint sia = BYTE_MUL(qAlpha(~src[i]), const_alpha) + cia;            dest[i] = BYTE_MUL(dest[i], sia);        }    }}/*  result = s*da + d*sia  dest = s*da*ca + d*sia*ca + d *cia       = s*ca * da + d * (sia*ca + cia)       = s*ca * da + d * (1 - sa*ca)*/static void QT_FASTCALL comp_func_solid_SourceAtop(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha != 255) {        color = BYTE_MUL(color, const_alpha);    }    uint sia = qAlpha(~color);    for (int i = 0; i < length; ++i)        dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(dest[i]), dest[i], sia);}static void QT_FASTCALL comp_func_SourceAtop(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            uint s = src[i];            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, qAlpha(~s));        }    } else {        for (int i = 0; i < length; ++i) {            uint s = BYTE_MUL(src[i], const_alpha);            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, qAlpha(~s));        }    }}/*  result = d*sa + s*dia  dest = d*sa*ca + s*dia*ca + d *cia       = s*ca * dia + d * (sa*ca + cia)*/static void QT_FASTCALL comp_func_solid_DestinationAtop(uint *dest, int length, uint color, uint const_alpha){    uint a = qAlpha(color);    if (const_alpha != 255) {        color = BYTE_MUL(color, const_alpha);        a = qAlpha(color) + 255 - const_alpha;    }    for (int i = 0; i < length; ++i) {        uint d = dest[i];        dest[i] = INTERPOLATE_PIXEL_255(d, a, color, qAlpha(~d));    }}static void QT_FASTCALL comp_func_DestinationAtop(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            uint s = src[i];            uint d = dest[i];            dest[i] = INTERPOLATE_PIXEL_255(d, qAlpha(s), s, qAlpha(~d));        }    } else {        int cia = 255 - const_alpha;        for (int i = 0; i < length; ++i) {            uint s = BYTE_MUL(src[i], const_alpha);            uint d = dest[i];            uint a = qAlpha(s) + cia;            dest[i] = INTERPOLATE_PIXEL_255(d, a, s, qAlpha(~d));        }    }}/*  result = d*sia + s*dia  dest = d*sia*ca + s*dia*ca + d *cia       = s*ca * dia + d * (sia*ca + cia)       = s*ca * dia + d * (1 - sa*ca)*/static void QT_FASTCALL comp_func_solid_XOR(uint *dest, int length, uint color, uint const_alpha){    if (const_alpha != 255)        color = BYTE_MUL(color, const_alpha);    uint sia = qAlpha(~color);    for (int i = 0; i < length; ++i) {        uint d = dest[i];        dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(~d), d, sia);    }}static void QT_FASTCALL comp_func_XOR(uint *dest, const uint *src, int length, uint const_alpha){    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            uint d = dest[i];            uint s = src[i];            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, qAlpha(~s));        }    } else {        for (int i = 0; i < length; ++i) {            uint d = dest[i];            uint s = BYTE_MUL(src[i], const_alpha);            dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, qAlpha(~s));        }    }}static const CompositionFunctionSolid functionForModeSolid_C[] = {        comp_func_solid_SourceOver,        comp_func_solid_DestinationOver,        comp_func_solid_Clear,        comp_func_solid_Source,        0,        comp_func_solid_SourceIn,        comp_func_solid_DestinationIn,        comp_func_solid_SourceOut,        comp_func_solid_DestinationOut,        comp_func_solid_SourceAtop,        comp_func_solid_DestinationAtop,        comp_func_solid_XOR};static const CompositionFunctionSolid *functionForModeSolid = functionForModeSolid_C;static const CompositionFunction functionForMode_C[] = {        comp_func_SourceOver,        comp_func_DestinationOver,        comp_func_Clear,        comp_func_Source,        0,        comp_func_SourceIn,        comp_func_DestinationIn,        comp_func_SourceOut,        comp_func_DestinationOut,        comp_func_SourceAtop,        comp_func_DestinationAtop,        comp_func_XOR};static const CompositionFunction *functionForMode = functionForMode_C;static TextureBlendType getBlendType(const QSpanData *data){    TextureBlendType ft;    if (data->txop <= QPainterPrivate::TxTranslate)        if (data->texture.type == TextureData::Tiled)            ft = BlendTiled;        else            ft = BlendUntransformed;    else if (data->bilinear)        if (data->texture.type == TextureData::Tiled)            ft = BlendTransformedBilinearTiled;        else            ft = BlendTransformedBilinear;    else        if (data->texture.type == TextureData::Tiled)            ft = BlendTransformedTiled;        else            ft = BlendTransformed;    return ft;}static inline Operator getOperator(const QSpanData *data){    Operator op;    bool solidSource = false;    switch(data->type) {    case QSpanData::Solid:        solidSource = (qAlpha(data->solid.color) == 255);        break;    case QSpanData::LinearGradient:        solidSource = !data->gradient.alphaColor;        getLinearGradientValues(&op.linear, data);        op.src_fetch = fetchLinearGradient;        break;    case QSpanData::RadialGradient:        solidSource = !data->gradient.alphaColor;        getRadialGradientValues(&op.radial, data);        op.src_fetch = fetchRadialGradient;        break;    case QSpanData::ConicalGradient:        solidSource = !data->gradient.alphaColor;        op.src_fetch = fetchConicalGradient;        break;    case QSpanData::Texture:        op.src_fetch = sourceFetch[getBlendType(data)][data->texture.format];        solidSource = data->texture.format != QImage::Format_ARGB32_Premultiplied                      && data->texture.format != QImage::Format_ARGB32                      && data->texture.format != QImage::Format_Indexed8;    default:        break;    }    op.mode = data->rasterBuffer->compositionMode;    if (op.mode == QPainter::CompositionMode_SourceOver && solidSource)        op.mode = QPainter::CompositionMode_Source;    op.dest_fetch = destFetchProc[data->rasterBuffer->format];    if (op.mode == QPainter::CompositionMode_Source) {        switch (data->rasterBuffer->format) {        case QImage::Format_RGB32:        case QImage::Format_ARGB32_Premultiplied:            // this one sets up the pointer correctly so we save one copy            op.dest_fetch = destFetchProc[QImage::Format_ARGB32_Premultiplied];            break;        default:            op.dest_fetch = 0;        }    }    op.dest_store = destStoreProc[data->rasterBuffer->format];    op.funcSolid = functionForModeSolid[op.mode];    op.func = functionForMode[op.mode];    return op;}// -------------------- blend methods ---------------------static void blend_color_generic(int count, const QSpan *spans, void *userData){    QSpanData *data = reinterpret_cast<QSpanData *>(userData);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -