📄 qpaintengine_pic.cpp
字号:
SERIALIZE_CMD(QPicturePrivate::PdcSetBkColor); d->s << bgBrush.color(); writeCmdLength(pos, QRect(), false); SERIALIZE_CMD(QPicturePrivate::PdcSetBkMode); d->s << (qint8) bgMode; writeCmdLength(pos, QRectF(), false);}void QPicturePaintEngine::updateMatrix(const QTransform &matrix){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> updateMatrix():" << matrix;#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcSetWMatrix); d->s << matrix << (qint8) false; writeCmdLength(pos, QRectF(), false);}void QPicturePaintEngine::updateClipRegion(const QRegion ®ion, Qt::ClipOperation op){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> updateClipRegion(): op:" << op << "bounding rect:" << region.boundingRect();#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcSetClipRegion); d->s << region << qint8(op); writeCmdLength(pos, QRectF(), false);}void QPicturePaintEngine::updateClipPath(const QPainterPath &path, Qt::ClipOperation op){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> updateClipPath(): op:" << op << "bounding rect:" << path.boundingRect();#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcSetClipPath); d->s << path << qint8(op); writeCmdLength(pos, QRectF(), false);}void QPicturePaintEngine::updateRenderHints(QPainter::RenderHints hints){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> updateRenderHints(): " << hints;#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcSetRenderHint); d->s << (quint32) hints; writeCmdLength(pos, QRect(), false);}void QPicturePaintEngine::writeCmdLength(int pos, const QRectF &r, bool corr){ Q_D(QPicturePaintEngine); int newpos = d->pic_d->pictb.pos(); // new position int length = newpos - pos; QRectF br(r); if (length < 255) { // write 8-bit length d->pic_d->pictb.seek(pos - 1); // position to right index d->s << (quint8)length; } else { // write 32-bit length d->s << (quint32)0; // extend the buffer d->pic_d->pictb.seek(pos - 1); // position to right index d->s << (quint8)255; // indicate 32-bit length char *p = d->pic_d->pictb.buffer().data(); memmove(p+pos+4, p+pos, length); // make room for 4 byte d->s << (quint32)length; newpos += 4; } d->pic_d->pictb.seek(newpos); // set to new position if (br.width() > 0.0 || br.height() > 0.0) { if (corr) { // widen bounding rect int w2 = painter()->pen().width() / 2; br.setCoords(br.left() - w2, br.top() - w2, br.right() + w2, br.bottom() + w2); } br = painter()->transform().mapRect(br); if (painter()->hasClipping()) { QRect cr = painter()->clipRegion().boundingRect(); br &= cr; } if (br.width() > 0.0 || br.height() > 0.0) { int minx = qFloor(br.left()); int miny = qFloor(br.top()); int maxx = qCeil(br.right()); int maxy = qCeil(br.bottom()); if (d->pic_d->brect.width() > 0 || d->pic_d->brect.height() > 0) { minx = qMin(minx, d->pic_d->brect.left()); miny = qMin(miny, d->pic_d->brect.top()); maxx = qMax(maxx, d->pic_d->brect.x() + d->pic_d->brect.width()); maxy = qMax(maxy, d->pic_d->brect.y() + d->pic_d->brect.height()); d->pic_d->brect = QRect(minx, miny, maxx - minx, maxy - miny); } else { d->pic_d->brect = QRect(minx, miny, maxx - minx, maxy - miny); } } }}void QPicturePaintEngine::drawPath(const QPainterPath &path){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> drawPath():" << path.boundingRect();#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawPath); d->s << path; writeCmdLength(pos, path.boundingRect(), true);}void QPicturePaintEngine::drawPolygon(const QPointF *points, int numPoints, PolygonDrawMode mode){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> drawPolygon(): size=" << numPoints;#endif int pos; QPolygonF polygon; for (int i=0; i<numPoints; ++i) polygon << points[i]; if (mode == PolylineMode) { SERIALIZE_CMD(QPicturePrivate::PdcDrawPolyline); d->s << polygon; } else { SERIALIZE_CMD(QPicturePrivate::PdcDrawPolygon); d->s << polygon; d->s << (qint8)(mode == OddEvenMode ? 0 : 1); } writeCmdLength(pos, polygon.boundingRect(), true);}void QPicturePaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> drawPixmap():" << r;#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawPixmap); if (d->pic_d->dont_stream_pixmaps) { int index = d->pic_d->pixmap_list.size(); d->pic_d->pixmap_list.append(pm); d->s << r << index << sr; } else { d->s << r << pm << sr; } writeCmdLength(pos, r, false);}void QPicturePaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> drawTiledPixmap():" << r << s;#endif int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawTiledPixmap); if (d->pic_d->dont_stream_pixmaps) { int index = d->pic_d->pixmap_list.size(); d->pic_d->pixmap_list.append(pixmap); d->s << r << index << s; } else { d->s << r << pixmap << s; } writeCmdLength(pos, r, false);}extern int qt_defaultDpi();void QPicturePaintEngine::drawTextItem(const QPointF &p , const QTextItem &ti){ Q_D(QPicturePaintEngine);#ifdef QT_PICTURE_DEBUG qDebug() << " -> drawTextItem():" << p << ti.text();#endif if (d->pic_d->formatMajor >= 9) { const QTextItemInt &si = static_cast<const QTextItemInt &>(ti); int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawTextItem); QFont fnt = ti.font(); fnt.setUnderline(false); fnt.setStrikeOut(false); fnt.setOverline(false); qreal justificationWidth = 0; if (si.justified) justificationWidth = si.width.toReal(); d->s << p << ti.text() << fnt << ti.renderFlags() << double(fnt.d->dpi)/qt_defaultDpi() << justificationWidth; writeCmdLength(pos, /*brect=*/QRectF(), /*corr=*/false); } else if (d->pic_d->formatMajor >= 8) { // old old (buggy) format int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawTextItem); d->s << QPointF(p.x(), p.y() - ti.ascent()) << ti.text() << ti.font() << ti.renderFlags(); writeCmdLength(pos, /*brect=*/QRectF(), /*corr=*/false); } else { // old (buggy) format int pos; SERIALIZE_CMD(QPicturePrivate::PdcDrawText2); d->s << p << ti.text(); writeCmdLength(pos, QRectF(p, QSizeF(1,1)), true); }}void QPicturePaintEngine::updateState(const QPaintEngineState &state){ QPaintEngine::DirtyFlags flags = state.state(); if (flags & DirtyPen) updatePen(state.pen()); if (flags & DirtyBrush) updateBrush(state.brush()); if (flags & DirtyBrushOrigin) updateBrushOrigin(state.brushOrigin()); if (flags & DirtyFont) updateFont(state.font()); if (flags & DirtyBackground) updateBackground(state.backgroundMode(), state.backgroundBrush()); if (flags & DirtyTransform) updateMatrix(state.transform()); if (flags & DirtyClipEnabled) updateClipEnabled(state.isClipEnabled()); if (flags & DirtyClipRegion) updateClipRegion(state.clipRegion(), state.clipOperation()); if (flags & DirtyClipPath) updateClipPath(state.clipPath(), state.clipOperation()); if (flags & DirtyHints) updateRenderHints(state.renderHints()); if (flags & DirtyCompositionMode) updateCompositionMode(state.compositionMode()); if (flags & DirtyOpacity) updateOpacity(state.opacity());}#endif // QT_NO_PICTURE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -