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

📄 qpaintengine.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        p.drawPixmap(0, y, *tile, 0, 0, tile->width(), y);        y *= 2;    }}void qt_draw_tile(QPaintEngine *gc, qreal x, qreal y, qreal w, qreal h,                  const QPixmap &pixmap, qreal xOffset, qreal yOffset){    qreal yPos, xPos, drawH, drawW, yOff, xOff;    yPos = y;    yOff = yOffset;    while(yPos < y + h) {        drawH = pixmap.height() - yOff;    // Cropping first row        if (yPos + drawH > y + h)           // Cropping last row            drawH = y + h - yPos;        xPos = x;        xOff = xOffset;        while(xPos < x + w) {            drawW = pixmap.width() - xOff; // Cropping first column            if (xPos + drawW > x + w)           // Cropping last column                drawW = x + w - xPos;            if (drawW > 0 && drawH > 0)                gc->drawPixmap(QRectF(xPos, yPos, drawW, drawH), pixmap, QRectF(xOff, yOff, drawW, drawH));            xPos += drawW;            xOff = 0;        }        yPos += drawH;        yOff = 0;    }}/*!    Reimplement this function to draw the \a pixmap in the given \a    rect, starting at the given \a p. The pixmap will be    drawn repeatedly until the \a rect is filled.*/void QPaintEngine::drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p){    int sw = pixmap.width();    int sh = pixmap.height();    if (sw*sh < 8192 && sw*sh < 16*rect.width()*rect.height()) {        int tw = sw, th = sh;        while (tw*th < 32678 && tw < rect.width()/2)            tw *= 2;        while (tw*th < 32678 && th < rect.height()/2)            th *= 2;        QPixmap tile;        if (pixmap.depth() == 1) {            tile = QBitmap(tw, th);        } else {            tile = QPixmap(tw, th);            if (pixmap.hasAlphaChannel())                tile.fill(Qt::transparent);        }        qt_fill_tile(&tile, pixmap);        qt_draw_tile(this, rect.x(), rect.y(), rect.width(), rect.height(), tile, p.x(), p.y());    } else {        qt_draw_tile(this, rect.x(), rect.y(), rect.width(), rect.height(), pixmap, p.x(), p.y());    }}/*!    \fn void QPaintEngine::drawImage(const QRectF &rectangle, const QImage    &image, const QRectF &sr, Qt::ImageConversionFlags flags)    Reimplement this function to draw the part of the \a image    specified by the \a sr rectangle in the given \a rectangle using    the given conversion flags \a flags, to convert it to a pixmap.*/void QPaintEngine::drawImage(const QRectF &r, const QImage &image, const QRectF &sr,                             Qt::ImageConversionFlags flags){    QRectF baseSize(0, 0, image.width(), image.height());    QImage im = image;    if (baseSize != sr)        im = im.copy(qFloor(sr.x()), qFloor(sr.y()),                     qCeil(sr.width()), qCeil(sr.height()));    if (im.depth() == 1)        im = im.convertToFormat(QImage::Format_RGB32);    QPixmap pm = QPixmap::fromImage(im, flags);    drawPixmap(r, pm, QRectF(QPointF(0, 0), pm.size()));}/*!    \fn Type QPaintEngine::type() const    Reimplement this function to return the paint engine \l{Type}.*//*!    \fn void QPaintEngine::fix_neg_rect(int *x, int *y, int *w, int *h);    \internal*//*!    \fn bool QPaintEngine::testDirty(DirtyFlags df)    \internal*//*!    \fn void QPaintEngine::clearDirty(DirtyFlags df)    \internal*//*!    \fn void QPaintEngine::setDirty(DirtyFlags df)    \internal*//*!    \fn bool QPaintEngine::hasFeature(PaintEngineFeatures feature) const    Returns true if the paint engine supports the specified \a    feature; otherwise returns false.*//*!    \fn void QPaintEngine::updateState(const QPaintEngineState &state)    Reimplement this function to update the state of a paint engine.    When implemented, this function is responsible for checking the    paint engine's current \a state and update the properties that are    changed. Use the QPaintEngineState::state() function to find out    which properties that must be updated, then use the corresponding    \l {GetFunction}{get function} to retrieve the current values for    the given properties.    \sa QPaintEngineState*//*!    Creates a paint engine with the featureset specified by \a caps.*/QPaintEngine::QPaintEngine(PaintEngineFeatures caps)    : state(0),      gccaps(caps),      active(0),      selfDestruct(false),      d_ptr(new QPaintEnginePrivate){    d_ptr->q_ptr = this;}/*!  \internal*/QPaintEngine::QPaintEngine(QPaintEnginePrivate &dptr, PaintEngineFeatures caps)    : state(0),      gccaps(caps),      active(0),      selfDestruct(false),      d_ptr(&dptr){    d_ptr->q_ptr = this;}/*!    Destroys the paint engine.*/QPaintEngine::~QPaintEngine(){    delete d_ptr;}/*!    Returns the paint engine's painter.*/QPainter *QPaintEngine::painter() const{    return state ? state->painter() : 0;}/*!    The default implementation ignores the \a path and does nothing.*/void QPaintEngine::drawPath(const QPainterPath &){    if (hasFeature(PainterPaths)) {        qWarning("QPaintEngine::drawPath: Must be implemented when feature PainterPaths is set");    }}/*!    This function draws the text item \a textItem at position \a p. The    default implementation of this function converts the text to a    QPainterPath and paints the resulting path.*/void QPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem){    const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);    QPainterPath path;#ifndef Q_WS_MAC    path.setFillRule(Qt::WindingFill);#endif    if (ti.num_glyphs)        ti.fontEngine->addOutlineToPath(p.x(), p.y(), ti.glyphs, ti.num_glyphs, &path, ti.flags);    if (!path.isEmpty()) {        painter()->save();        painter()->setRenderHint(QPainter::Antialiasing,                                 bool((painter()->renderHints() & QPainter::TextAntialiasing)                                      && !(painter()->font().styleStrategy() & QFont::NoAntialias)));        painter()->setBrush(state->pen().brush());        painter()->setPen(Qt::NoPen);        painter()->drawPath(path);        painter()->restore();    }}/*!    The default implementation splits the list of lines in \a lines    into \a lineCount separate calls to drawPath() or drawPolygon()    depending on the feature set of the paint engine.*/void QPaintEngine::drawLines(const QLineF *lines, int lineCount){    for (int i=0; i<lineCount; ++i) {        QPointF pts[2] = { lines[i].p1(), lines[i].p2() };        drawPolygon(pts, 2, PolylineMode);    }}/*!    \overload    The default implementation converts the first \a lineCount lines    in \a lines to a QLineF and calls the floating point version of    this function.*/void QPaintEngine::drawLines(const QLine *lines, int lineCount){    struct PointF {        qreal x;        qreal y;    };    struct LineF {        PointF p1;        PointF p2;    };    Q_ASSERT(sizeof(PointF) == sizeof(QPointF));    Q_ASSERT(sizeof(LineF) == sizeof(QLineF));    LineF fl[256];    while (lineCount) {        int i = 0;        while (i < lineCount && i < 256) {            fl[i].p1.x = lines[i].x1();            fl[i].p1.y = lines[i].y1();            fl[i].p2.x = lines[i].x2();            fl[i].p2.y = lines[i].y2();            ++i;        }        drawLines((QLineF *)(void *)fl, i);        lines += i;        lineCount -= i;    }}/*!    \overload    The default implementation converts the first \a rectCount    rectangles in the buffer \a rects to a QRectF and calls the    floating point version of this function.*/void QPaintEngine::drawRects(const QRect *rects, int rectCount){    struct RectF {        qreal x;        qreal y;        qreal w;        qreal h;    };    Q_ASSERT(sizeof(RectF) == sizeof(QRectF));    RectF fr[256];    while (rectCount) {        int i = 0;        while (i < rectCount && i < 256) {            fr[i].x = rects[i].x();            fr[i].y = rects[i].y();            fr[i].w = rects[i].width();            fr[i].h = rects[i].height();            ++i;        }        drawRects((QRectF *)(void *)fr, i);        rects += i;        rectCount -= i;    }}/*!    Draws the first \a rectCount rectangles in the buffer \a    rects. The default implementation of this function calls drawPath()    or drawPolygon() depending on the feature set of the paint engine.*/void QPaintEngine::drawRects(const QRectF *rects, int rectCount){    if (hasFeature(PainterPaths) &&        !state->penNeedsResolving() &&        !state->brushNeedsResolving()) {        for (int i=0; i<rectCount; ++i) {            QPainterPath path;            path.addRect(rects[i]);            if (path.isEmpty())                continue;            drawPath(path);        }    } else {        for (int i=0; i<rectCount; ++i) {            QRectF rf = rects[i];            QPointF pts[4] = { QPointF(rf.x(), rf.y()),                               QPointF(rf.x() + rf.width(), rf.y()),                               QPointF(rf.x() + rf.width(), rf.y() + rf.height()),                               QPointF(rf.x(), rf.y() + rf.height()) };            drawPolygon(pts, 4, ConvexMode);        }    }}/*!    \internal    Sets the paintdevice that this engine operates on to \a device*/void QPaintEngine::setPaintDevice(QPaintDevice *device){    d_func()->pdev = device;}/*!    Returns the device that this engine is painting on, if painting is    active; otherwise returns 0.*/QPaintDevice *QPaintEngine::paintDevice() const{    return d_func()->pdev;}#ifdef Q_WS_WIN/*!    \internal    Empty default implementation.*/HDC QPaintEngine::getDC() const{    return 0;}/*!    \internal    Empty default implementation.*/void QPaintEngine::releaseDC(HDC) const{}#endif/*!    \internal    Returns the offset from the painters origo to the engines    origo. This value is used by QPainter for engines who have    internal double buffering.    This function only makes sense when the engine is active.*/QPoint QPaintEngine::coordinateOffset() const{    return QPoint();}/*!    \internal    Sets the system clip for this engine. The system clip defines the    basis area that the engine has to draw in. All clips that are    set must be an intersection with the system clip.    Reset the systemclip to no clip by setting an empty region.*/void QPaintEngine::setSystemClip(const QRegion &region){    if (isActive()) {        qWarning("QPaintEngine::setSystemClip: Should not be changed while engine is active");        return;    }    d_func()->systemClip = region;}/*!    \internal    Returns the system clip. The system clip is read only while the    painter is active. An empty region indicates that system clip    is not in use.*/QRegion QPaintEngine::systemClip() const{    return d_func()->systemClip;}/*!    \internal    Sets the target rect for drawing within the backing store. This    function should ONLY be used by the backing store.*/void QPaintEngine::setSystemRect(const QRect &rect){    if (isActive()) {        qWarning("QPaintEngine::setSystemRect: Should not be changed while engine is active");        return;    }    d_func()->systemRect = rect;}/*!    \internal    Retreives the rect for drawing within the backing store. This    function should ONLY be used by the backing store. */QRect QPaintEngine::systemRect() const{    return d_func()->systemRect;}

⌨️ 快捷键说明

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