Example #1
0
QMatrix QSvgTinyDocument::matrixForElement(const QString &id) const
{
    QSvgNode *node = scopeNode(id);

    if (!node) {
        qDebug("Couldn't find node %s. Skipping rendering.", qPrintable(id));
        return QMatrix();
    }

    QTransform t;

    node = node->parent();
    while (node) {
        if (node->m_style.transform)
            t *= node->m_style.transform->qtransform();
        node = node->parent();
    }
    
    return t.toAffine();
}
void SchematicTextLayerKinPaletteItem::transformItem(const QTransform & currTransf, bool includeRatsnest) {
    Q_UNUSED(currTransf);
    Q_UNUSED(includeRatsnest);

    if (m_textThings.count() == 0) {
        initTextThings();
    }

    double rotation;
    QTransform chiefTransform = layerKinChief()->transform();      // assume chief already has rotation
    bool isFlipped = GraphicsUtils::isFlipped(chiefTransform.toAffine(), rotation);
    QString svg;
    if (isFlipped) {
        svg = makeFlipTextSvg();
    }

    if (svg.isEmpty()) {
        svg = this->property("textSvg").toByteArray();
    }

    if (rotation >= 135 && rotation <= 225) {
        svg = vflip(svg, isFlipped);
    }

    reloadRenderer(svg, true);

    QPointF p = layerKinChief()->sceneBoundingRect().topLeft();
    QTransform transform;
    QRectF bounds = boundingRect();
    transform.translate(bounds.width() / 2, bounds.height() / 2);
    transform.rotate(rotation);
    transform.translate(bounds.width() / -2, bounds.height() / -2);
    this->setTransform(transform);

    //QMatrix m1 = chiefTransform.toAffine();
    //layerKinChief()->debugInfo("chief " + TextUtils::svgMatrix(m1));

    //m1 = transform.toAffine();
    //debugInfo("\t " + TextUtils::svgMatrix(m1));
}
Example #3
0
void OverlayScene::drawOverlay(QPainter *painter, QRectF exposed) {
  QList<QGraphicsItem *> items = this->items();
  QVarLengthArray<QGraphicsItem *, 5> overlayItems(items.size());
  QVarLengthArray<QStyleOptionGraphicsItem, 5> options(items.size());
  QLineF v1(0, 0, 1, 0);
  QLineF v2(0, 0, 0, 1);
  for (int i = 0; i < items.size(); i++) {
    QTransform tform = painter->worldTransform(); // should be identity
    if (items[i]->flags() & QGraphicsItem::ItemIgnoresTransformations)
      tform = items[i]->deviceTransform(tform);
    else tform = items[i]->sceneTransform() * tform;
    options[i].exposedRect = tform.inverted().mapRect(exposed);
#if QT_VERSION < 0x40600
    options[i].rect = items[i]->boundingRect().toRect();
    options[i].matrix = tform.toAffine();
    options[i].levelOfDetail = qSqrt(tform.map(v1).length() *
                                     tform.map(v2).length());
#endif
    overlayItems[i] = items[i];
  }
  drawItems(painter, items.size(), overlayItems.data(), options.data(),
            _view->viewport());
}