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

📄 qpicture.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 4 页
字号:
{    Q_D(QPicture);#if defined(QT_DEBUG)    int                strm_pos;#endif    quint8     c;                      // command id    quint8     tiny_len;               // 8-bit length descriptor    qint32     len;                    // 32-bit length descriptor    qint16     i_16, i1_16, i2_16;     // parameters...    qint8      i_8;    quint32    ul;    double     dbl;    bool       bl;    QByteArray  str1;    QString     str;    QPointF     p, p1, p2;    QPoint      ip, ip1, ip2;    QRect       ir;    QRectF      r;    QPolygonF   a;    QPolygon    ia;    QColor      color;    QFont       font;    QPen        pen;    QBrush      brush;    QRegion     rgn;    QMatrix     wmatrix;    QTransform  matrix;    QTransform worldMatrix = painter->transform();    worldMatrix.scale(qreal(painter->device()->logicalDpiX()) / qreal(qt_defaultDpiX()),                      qreal(painter->device()->logicalDpiY()) / qreal(qt_defaultDpiY()));    painter->setTransform(worldMatrix);    while (nrecords-- && !s.atEnd()) {        s >> c;                 // read cmd        s >> tiny_len;          // read param length        if (tiny_len == 255)    // longer than 254 bytes            s >> len;        else            len = tiny_len;#if defined(QT_DEBUG)        strm_pos = s.device()->pos();#endif        switch (c) {            // exec cmd        case QPicturePrivate::PdcNOP:            break;        case QPicturePrivate::PdcDrawPoint:            if (d->formatMajor <= 5) {                s >> ip;                painter->drawPoint(ip);            } else {                s >> p;                painter->drawPoint(p);            }            break;        case QPicturePrivate::PdcDrawPoints:// ## implement me in the picture paint engine//                 s >> a >> i1_32 >> i2_32;//                 painter->drawPoints(a.mid(i1_32, i2_32));            break;        case QPicturePrivate::PdcDrawPath: {            QPainterPath path;            s >> path;            painter->drawPath(path);            break;        }        case QPicturePrivate::PdcDrawLine:            if (d->formatMajor <= 5) {                s >> ip1 >> ip2;                painter->drawLine(ip1, ip2);            } else {                s >> p1 >> p2;                painter->drawLine(p1, p2);            }            break;        case QPicturePrivate::PdcDrawRect:            if (d->formatMajor <= 5) {                s >> ir;                painter->drawRect(ir);            } else {                s >> r;                painter->drawRect(r);            }            break;        case QPicturePrivate::PdcDrawRoundRect:            if (d->formatMajor <= 5) {                s >> ir >> i1_16 >> i2_16;                painter->drawRoundRect(ir, i1_16, i2_16);            } else {                s >> r >> i1_16 >> i2_16;                painter->drawRoundRect(r, i1_16, i2_16);            }            break;        case QPicturePrivate::PdcDrawEllipse:            if (d->formatMajor <= 5) {                s >> ir;                painter->drawEllipse(ir);            } else {                s >> r;                painter->drawEllipse(r);            }            break;        case QPicturePrivate::PdcDrawArc:            if (d->formatMajor <= 5) {                s >> ir;                r = ir;            } else {                s >> r;            }            s >> i1_16 >> i2_16;            painter->drawArc(r, i1_16, i2_16);            break;        case QPicturePrivate::PdcDrawPie:            if (d->formatMajor <= 5) {                s >> ir;                r = ir;            } else {                s >> r;            }            s >> i1_16 >> i2_16;            painter->drawPie(r, i1_16, i2_16);            break;        case QPicturePrivate::PdcDrawChord:            if (d->formatMajor <= 5) {                s >> ir;                r = ir;            } else {                s >> r;            }            s >> i1_16 >> i2_16;            painter->drawChord(r, i1_16, i2_16);            break;        case QPicturePrivate::PdcDrawLineSegments:            s >> ia;            painter->drawLines(ia);            ia.clear();            break;        case QPicturePrivate::PdcDrawPolyline:            if (d->formatMajor <= 5) {                s >> ia;                painter->drawPolyline(ia);                ia.clear();            } else {                s >> a;                painter->drawPolyline(a);                a.clear();            }            break;        case QPicturePrivate::PdcDrawPolygon:            if (d->formatMajor <= 5) {                s >> ia >> i_8;                painter->drawPolygon(ia, i_8 ? Qt::WindingFill : Qt::OddEvenFill);                a.clear();            } else {                s >> a >> i_8;                painter->drawPolygon(a, i_8 ? Qt::WindingFill : Qt::OddEvenFill);                a.clear();            }            break;        case QPicturePrivate::PdcDrawCubicBezier: {            s >> ia;            QPainterPath path;            Q_ASSERT(ia.size() == 4);            path.moveTo(ia.at(0));            path.cubicTo(ia.at(1), ia.at(2), ia.at(3));            painter->strokePath(path, painter->pen());            a.clear();        }            break;        case QPicturePrivate::PdcDrawText:            s >> ip >> str1;            painter->drawText(ip, QString::fromLatin1(str1));            break;        case QPicturePrivate::PdcDrawTextFormatted:            s >> ir >> i_16 >> str1;            painter->drawText(ir, i_16, QString::fromLatin1(str1));            break;        case QPicturePrivate::PdcDrawText2:            if (d->formatMajor <= 5) {                s >> ip >> str;                painter->drawText(ip, str);            } else {                s >> p >> str;                painter->drawText(p, str);            }            break;        case QPicturePrivate::PdcDrawText2Formatted:            s >> ir;            s >> i_16;            s >> str;            painter->drawText(ir, i_16, str);            break;        case QPicturePrivate::PdcDrawTextItem: {            s >> p >> str >> font >> ul;            // the text layout direction is not used here because it's already            // aligned when QPicturePaintEngine::drawTextItem() serializes the            // drawText() call, therefore ul is unsed in this context            if (d->formatMajor >= 9) {                s >> dbl;                QFont fnt(font);                if (dbl != 1.0) {                    FakeDevice fake;                    fake.setDpiX(qRound(dbl*qt_defaultDpiX()));                    fake.setDpiY(qRound(dbl*qt_defaultDpiY()));                    fnt = QFont(font, &fake);                }                qreal justificationWidth;                s >> justificationWidth;                int flags = Qt::TextSingleLine | Qt::TextDontClip;                QTextOption opt;                opt.setTextDirection(painter->layoutDirection());                QSizeF size(1, 1);                if (justificationWidth > 0) {                    size.setWidth(justificationWidth);                    flags |= Qt::TextJustificationForced;                    opt.setAlignment(Qt::AlignJustify);                }                QFontMetrics fm(fnt);                QPointF pt(p.x(), p.y() - fm.ascent());                qt_format_text(fnt, QRectF(pt, size), flags, &opt,                               str, /*brect=*/0, /*tabstops=*/0, /*...*/0, /*tabarraylen=*/0, painter);            } else {                qt_format_text(font, QRectF(p, QSizeF(1, 1)), Qt::TextSingleLine | Qt::TextDontClip, /*opt*/0,                               str, /*brect=*/0, /*tabstops=*/0, /*...*/0, /*tabarraylen=*/0, painter);            }            break;        }        case QPicturePrivate::PdcDrawPixmap: {            QPixmap pixmap;            if (d->formatMajor < 4) {                s >> ip >> pixmap;                painter->drawPixmap(ip, pixmap);            } else if (d->formatMajor <= 5) {                s >> ir >> pixmap;                painter->drawPixmap(ir, pixmap);            } else {                QRectF sr;                if (d->dont_stream_pixmaps) {                    int index;                    s >> r >> index >> sr;                    Q_ASSERT(index < d->pixmap_list.size());                    pixmap = d->pixmap_list.at(index);                } else {                    s >> r >> pixmap >> sr;                }                painter->drawPixmap(r, pixmap, sr);            }        }            break;        case QPicturePrivate::PdcDrawTiledPixmap: {            QPixmap pixmap;            if (d->dont_stream_pixmaps) {                int index;                s >> r >> index >> p;                Q_ASSERT(index < d->pixmap_list.size());                pixmap = d->pixmap_list.at(index);            } else {                s >> r >> pixmap >> p;            }            painter->drawTiledPixmap(r, pixmap, p);        }            break;        case QPicturePrivate::PdcDrawImage: {            QImage image;            if (d->formatMajor < 4) {                s >> p >> image;                painter->drawPixmap(p, QPixmap::fromImage(image));            } else if (d->formatMajor <= 5){                s >> ir >> image;                painter->drawPixmap(ir, QPixmap::fromImage(image), QRect(0, 0, ir.width(), ir.height()));            } else {                s >> r >> image;                painter->drawPixmap(r, QPixmap::fromImage(image), QRectF(0, 0, r.width(), r.height()));            }        }            break;        case QPicturePrivate::PdcBegin:            s >> ul;                        // number of records            if (!exec(painter, s, ul))                return false;            break;        case QPicturePrivate::PdcEnd:            if (nrecords == 0)                return true;            break;        case QPicturePrivate::PdcSave:            painter->save();            break;        case QPicturePrivate::PdcRestore:            painter->restore();            break;        case QPicturePrivate::PdcSetBkColor:            s >> color;            painter->setBackground(color);            break;        case QPicturePrivate::PdcSetBkMode:            s >> i_8;            painter->setBackgroundMode((Qt::BGMode)i_8);            break;        case QPicturePrivate::PdcSetROP: // NOP            s >> i_8;            break;        case QPicturePrivate::PdcSetBrushOrigin:            if (d->formatMajor <= 5) {                s >> ip;                painter->setBrushOrigin(ip);            } else {                s >> p;                painter->setBrushOrigin(p);            }            break;        case QPicturePrivate::PdcSetFont:            s >> font;            painter->setFont(font);            break;        case QPicturePrivate::PdcSetPen:            s >> pen;            painter->setPen(pen);            break;        case QPicturePrivate::PdcSetBrush:            s >> brush;            painter->setBrush(brush);            break;// #ifdef Q_Q3PAINTER//         case QPicturePrivate::PdcSetTabStops://                 s >> i_16;//                 painter->setTabStops(i_16);//                 break;//             case QPicturePrivate::PdcSetTabArray://                 s >> i_16;//                 if (i_16 == 0) {//                     painter->setTabArray(0);//                 } else {//                     int *ta = new int[i_16];//                     for (int i=0; i<i_16; i++) {//                         s >> i1_16;//                         ta[i] = i1_16;//                     }//                     painter->setTabArray(ta);//                     delete [] ta;//                 }//                 break;// #endif        case QPicturePrivate::PdcSetVXform:            s >> i_8;            painter->setViewTransformEnabled(i_8);            break;        case QPicturePrivate::PdcSetWindow:            s >> r;            painter->setWindow(r.toRect());            break;        case QPicturePrivate::PdcSetViewport:            s >> r;            painter->setViewport(r.toRect());            break;        case QPicturePrivate::PdcSetWXform:            s >> i_8;            painter->setMatrixEnabled(i_8);            break;        case QPicturePrivate::PdcSetWMatrix:            if (d->formatMajor >= 8) {                s >> matrix >> i_8;            } else {                s >> wmatrix >> i_8;                matrix = QTransform(wmatrix);            }            // i_8 is always false due to updateXForm() in qpaintengine_pic.cpp            painter->setTransform(matrix * worldMatrix, i_8);            break;// #ifdef Q_Q3PAINTER//             case QPicturePrivate::PdcSaveWMatrix://                 painter->saveWorldMatrix();//                 break;//             case QPicturePrivate::PdcRestoreWMatrix://                 painter->restoreWorldMatrix();//                 break;// #endif        case QPicturePrivate::PdcSetClip:            s >> i_8;            painter->setClipping(i_8);            break;        case QPicturePrivate::PdcSetClipRegion:            s >> rgn >> i_8;            if (d->formatMajor >= 9) {                painter->setClipRegion(rgn, Qt::ClipOperation(i_8));            } else {                painter->setClipRegion(rgn);            }            break;        case QPicturePrivate::PdcSetClipPath:            {                QPainterPath path;                s >> path >> i_8;                painter->setClipPath(path, Qt::ClipOperation(i_8));                break;            }        case QPicturePrivate::PdcSetRenderHint:            s >> ul;            painter->setRenderHint(QPainter::Antialiasing,                                   bool(ul & QPainter::Antialiasing));            painter->setRenderHint(QPainter::SmoothPixmapTransform,                                   bool(ul & QPainter::SmoothPixmapTransform));            break;        case QPicturePrivate::PdcSetCompositionMode:            s >> ul;            painter->setCompositionMode((QPainter::CompositionMode)ul);            break;        case QPicturePrivate::PdcSetClipEnabled:            s >> bl;            painter->setClipping(bl);            break;        case QPicturePrivate::PdcSetOpacity:            s >> dbl;            painter->setOpacity(qreal(dbl));            break;        default:            qWarning("QPicture::play: Invalid command %d", c);            if (len)                        // skip unknown command                s.device()->seek(s.device()->pos()+len);        }#if defined(QT_DEBUG)        //qDebug("device->at(): %i, strm_pos: %i len: %i", (int)s.device()->pos(), strm_pos, len);        Q_ASSERT(qint32(s.device()->pos() - strm_pos) == len);#endif    }    return false;}/*!    Internal implementation of the virtual QPaintDevice::metric()    function.    A picture has the following hard-coded values: numcolors=16777216    and depth=24.    \a m is the metric to get.*/int QPicture::metric(PaintDeviceMetric m) const{    int val;    QRect brect = boundingRect();    switch (m) {        case PdmWidth:            val = brect.width();            break;        case PdmHeight:            val = brect.height();            break;        case PdmWidthMM:            val = int(25.4/qt_defaultDpiX()*brect.width());            break;        case PdmHeightMM:            val = int(25.4/qt_defaultDpiY()*brect.height());            break;        case PdmDpiX:        case PdmPhysicalDpiX:            val = qt_defaultDpiX();            break;        case PdmDpiY:        case PdmPhysicalDpiY:            val = qt_defaultDpiY();            break;        case PdmNumColors:            val = 16777216;            break;        case PdmDepth:            val = 24;            break;        default:            val = 0;            qWarning("QPicture::metric: Invalid metric command");    }    return val;}/*!    \fn void QPicture::detach()    \internal

⌨️ 快捷键说明

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