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

📄 context2d.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        pen.setJoinStyle(Qt::MiterJoin);    m_painter.setPen(pen);}void Context2D::setMiterLimit(qreal m){    QPen pen = m_painter.pen();    pen.setMiterLimit(m);    m_painter.setPen(pen);}qreal Context2D::lineWidth() const{    return m_painter.pen().widthF();}QString Context2D::lineCap() const{    return QString();}QString Context2D::lineJoin() const{    return QString();}qreal Context2D::miterLimit() const{    return 0;}void Context2D::setShadowOffsetX(qreal x){    Q_UNUSED(x);}void Context2D::setShadowOffsetY(qreal y){    Q_UNUSED(y);}void Context2D::setShadowBlur(qreal b){    Q_UNUSED(b);}void Context2D::setShadowColor(const QColor &c){    Q_UNUSED(c);}qreal Context2D::shadowOffsetX() const{    return 0;}qreal Context2D::shadowOffsetY() const{    return 0;}qreal Context2D::shadowBlur() const{    return 0;}QColor Context2D::shadowColor() const{    return QColor();}void Context2D::clearRect(qreal x, qreal y, qreal w, qreal h){    m_painter.save();    m_painter.setCompositionMode(QPainter::CompositionMode_Source);    m_painter.fillRect(QRectF(x, y, w, h), QColor(0, 0, 0, 0));    m_painter.restore();}void Context2D::fillRect(qreal x, qreal y, qreal w, qreal h){    m_painter.fillRect(QRectF(x, y, w, h), m_painter.brush());}void Context2D::strokeRect(qreal x, qreal y, qreal w, qreal h){    QPainterPath path; path.addRect(x, y, w, h);    m_painter.strokePath(path, m_painter.pen());}void Context2D::beginPath(){    m_path = QPainterPath();    m_state.creatingShape = true;}void Context2D::closePath(){    m_path.closeSubpath();    m_state.creatingShape = false;}void Context2D::moveTo(qreal x, qreal y){    QPointF pt = m_state.matrix.map(QPointF(x, y));    m_path.moveTo(pt);}void Context2D::lineTo(qreal x, qreal y){    QPointF pt = m_state.matrix.map(QPointF(x, y));    m_path.lineTo(pt);}void Context2D::quadraticCurveTo(qreal cpx, qreal cpy, qreal x, qreal y){    QPointF cp = m_state.matrix.map(QPointF(cpx, cpy));    QPointF xy = m_state.matrix.map(QPointF(x, y));    m_path.quadTo(cp, xy);}void Context2D::bezierCurveTo(qreal cp1x, qreal cp1y,                              qreal cp2x, qreal cp2y, qreal x, qreal y){    QPointF cp1 = m_state.matrix.map(QPointF(cp1x, cp1y));    QPointF cp2 = m_state.matrix.map(QPointF(cp2x, cp2y));    QPointF end = m_state.matrix.map(QPointF(x, y));    m_path.cubicTo(cp1, cp2, end);}void Context2D::arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius){    //FIXME: this is surely busted    QPointF st  = m_state.matrix.map(QPointF(x1, y1));    QPointF end = m_state.matrix.map(QPointF(x2, y2));    m_path.arcTo(st.x(), st.y(),                 end.x()-st.x(), end.y()-st.y(),                 radius, 90);}void Context2D::rect(qreal x, qreal y, qreal w, qreal h){    QPainterPath path; path.addRect(x, y, w, h);    path = m_state.matrix.map(path);    m_path.addPath(path);}void Context2D::arc(qreal xc, qreal yc, qreal radius,                    qreal sar, qreal ear,                    bool anticlockwise){    //### HACK    // In Qt we don't switch the coordinate system for degrees    // and still use the 0,0 as bottom left for degrees so we need    // to switch    sar = -sar;    ear = -ear;    anticlockwise = !anticlockwise;    //end hack    float sa = DEGREES(sar);    float ea = DEGREES(ear);    double span = 0;    double xs     = xc - radius;    double ys     = yc - radius;    double width  = radius*2;    double height = radius*2;    if (!anticlockwise && (ea < sa)) {        span += 360;    } else if (anticlockwise && (sa < ea)) {        span -= 360;    }    //### this is also due to switched coordinate system    // we would end up with a 0 span instead of 360    if (!(qFuzzyCompare(span + (ea - sa), 0.0) &&          qFuzzyCompare(qAbs(span), 360.0))) {        span   += ea - sa;    }    QPainterPath path;    path.moveTo(QPointF(xc + radius  * cos(sar),                                yc - radius  * sin(sar)));    path.arcTo(xs, ys, width, height, sa, span);    path = m_state.matrix.map(path);    m_path.addPath(path);}void Context2D::fill(){    m_painter.fillPath(m_path, m_painter.brush());    m_state.creatingShape = false;}void Context2D::stroke(){    m_painter.strokePath(m_path, m_painter.pen());    m_state.creatingShape = false;}void Context2D::clip(){    m_painter.setClipPath(m_path);}bool Context2D::isPointInPath(qreal x, qreal y) const{    return m_path.contains(QPointF(x, y));}ImageData Context2D::getImageData(qreal sx, qreal sy, qreal sw, qreal sh){    Q_UNUSED(sx);    Q_UNUSED(sy);    Q_UNUSED(sw);    Q_UNUSED(sh);    return ImageData();}void Context2D::putImageData(ImageData image, qreal dx, qreal dy){    Q_UNUSED(image);    Q_UNUSED(dx);    Q_UNUSED(dy);}Context2D::Context2D(QContext2DCanvas *parent)    : QObject(parent),      m_cache(parent->size(), QImage::Format_ARGB32_Premultiplied){    m_cache.fill(qRgba(0,0,0,0));    CanvasGradientData::setup(parent->engine());    begin();}const QImage &Context2D::end(){    if (m_painter.isActive())        m_painter.end();    m_state.creatingShape = false;    return m_cache;}void Context2D::begin(){    if (!m_painter.isActive()) {        m_painter.begin(&m_cache);        m_painter.setRenderHint(QPainter::Antialiasing);        m_painter.setBrush(Qt::black);    }}void Context2D::clear(){    m_cache.fill(qRgba(0,0,0,0));}void Context2D::setSize(int w, int h){    if (m_painter.isActive())        end();    QImage newi(w, h, QImage::Format_ARGB32_Premultiplied);    newi.fill(qRgba(0,0,0,0));    QPainter p(&newi);    p.drawImage(0, 0, m_cache);    p.end();    m_cache = newi;    begin();}void Context2D::drawImage(DomImage *image, qreal dx, qreal dy){    if (!image)        return;    if (dx < 0) {        qreal sx = qAbs(dx);        qreal sy = qAbs(dy);        qreal sw = image->width() - sx;        qreal sh = image->height() - sy;        drawImage(image, sx, sy, sw, sh, 0, 0, sw, sh);    } else {        m_painter.drawImage(QPointF(dx, dy), image->image());    }}void Context2D::drawImage(DomImage *image, qreal dx, qreal dy,                          qreal dw, qreal dh){    if (!image)        return;    m_painter.drawImage(QRectF(dx, dy, dw, dh).toRect(), image->image());}void Context2D::drawImage(DomImage *image, qreal sx, qreal sy,                          qreal sw, qreal sh, qreal dx, qreal dy,                          qreal dw, qreal dh){    if (!image)        return;    m_painter.drawImage(QRectF(dx, dy, dw, dh), image->image(),                        QRectF(sx, sy, sw, sh));}

⌨️ 快捷键说明

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