void EllipseAnnotation::drawEllipseAnnotaion(QPainter *painter) { QPainterPath path; // first we invert the painter since we have our coordinate system inverted. // inversion is required to draw the elliptic curves at correct angles. painter->scale(1.0, -1.0); painter->translate(0, ((-boundingRect().top()) - boundingRect().bottom())); applyLinePattern(painter); applyFillPattern(painter); qreal startAngle = StringHandler::getNormalizedAngle(mStartAngle); qreal endAngle = StringHandler::getNormalizedAngle(mEndAngle); if ((startAngle - endAngle) == 0) { path.addEllipse(getBoundingRect()); painter->drawPath(path); } else { painter->drawPie(getBoundingRect(), mStartAngle*16, mEndAngle*16 - mStartAngle*16); } }
void RectangleAnnotation::drawRectangleAnnotaion(QPainter *painter) { applyLinePattern(painter); applyFillPattern(painter); painter->drawRoundedRect(getBoundingRect(), mRadius, mRadius); }
/*! * \brief TextAnnotation::drawTextAnnotaion * Draws the Text annotation * \param painter */ void TextAnnotation::drawTextAnnotaion(QPainter *painter) { applyLinePattern(painter); /* Don't apply the fill patterns on Text shapes. */ /*applyFillPattern(painter);*/ // first we invert the painter since we have our coordinate system inverted. painter->scale(1.0, -1.0); painter->translate(0, ((-boundingRect().top()) - boundingRect().bottom())); mTextString = StringHandler::removeFirstLastQuotes(mTextString); mTextString = StringHandler::unparse(QString("\"").append(mTextString).append("\"")); QFont font; if (mFontSize > 0) { font = QFont(mFontName, mFontSize, StringHandler::getFontWeight(mTextStyles), StringHandler::getFontItalic(mTextStyles)); // set font underline if(StringHandler::getFontUnderline(mTextStyles)) { font.setUnderline(true); } font.setPointSizeF(mFontSize/4); painter->setFont(font); } else { font = QFont(mFontName, mFontSize, StringHandler::getFontWeight(mTextStyles), StringHandler::getFontItalic(mTextStyles)); // set font underline if(StringHandler::getFontUnderline(mTextStyles)) { font.setUnderline(true); } painter->setFont(font); QRect fontBoundRect = painter->fontMetrics().boundingRect(boundingRect().toRect(), Qt::TextDontClip, mTextString); float xFactor = boundingRect().width() / fontBoundRect.width(); float yFactor = boundingRect().height() / fontBoundRect.height(); float factor = xFactor < yFactor ? xFactor : yFactor; QFont f = painter->font(); qreal fontSizeFactor = f.pointSizeF()*factor; if ((fontSizeFactor < 12) && mpComponent) { f.setPointSizeF(12); } else if (fontSizeFactor <= 0) { f.setPointSizeF(1); } else { f.setPointSizeF(fontSizeFactor); } painter->setFont(f); } if (mpComponent) { Component *pComponent = mpComponent->getRootParentComponent(); if (pComponent && pComponent->getTransformation()) { QPointF extent1 = pComponent->getTransformation()->getExtent1(); QPointF extent2 = pComponent->getTransformation()->getExtent2(); qreal dy = ((-boundingRect().top()) - boundingRect().bottom()); // if horizontal flip if (extent2.x() < extent1.x()) { painter->scale(-1.0, 1.0); } // if vertical flip if (extent2.y() < extent1.y()) { painter->scale(1.0, -1.0); painter->translate(0, dy); } qreal angle = StringHandler::getNormalizedAngle(pComponent->getTransformation()->getRotateAngle()); if (angle == 180) { painter->scale(-1.0, -1.0); painter->translate(0, dy); } } } else { qreal angle = StringHandler::getNormalizedAngle(mpTransformation->getRotateAngle()); if (angle == 180) { painter->scale(-1.0, -1.0); painter->translate(((-boundingRect().left()) - boundingRect().right()), ((-boundingRect().top()) - boundingRect().bottom())); } } // draw the font if (mpComponent) { painter->drawText(boundingRect(), StringHandler::getTextAlignment(mHorizontalAlignment) | Qt::AlignVCenter | Qt::TextDontClip, mTextString); } else if (boundingRect().width() > 0 && boundingRect().height() > 0) { painter->drawText(boundingRect(), StringHandler::getTextAlignment(mHorizontalAlignment) | Qt::AlignVCenter | Qt::TextDontClip, mTextString); } }