Amelioration du positionnement des textes dans l'editeur

Harmonisation des boundingRect des classes PartText{Field,}


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@744 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2009-08-25 23:31:31 +00:00
parent ae57568e65
commit a15ca782c2
2 changed files with 16 additions and 19 deletions

View File

@@ -31,6 +31,7 @@ PartText::PartText(QETElementEditor *editor, QGraphicsItem *parent, ElementScene
QGraphicsTextItem(parent, scene), QGraphicsTextItem(parent, scene),
CustomElementPart(editor) CustomElementPart(editor)
{ {
document() -> setDocumentMargin(1.0);
setDefaultTextColor(Qt::black); setDefaultTextColor(Qt::black);
setFont(QETApp::diagramTextsFont()); setFont(QETApp::diagramTextsFont());
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
@@ -69,8 +70,8 @@ void PartText::fromXml(const QDomElement &xml_element) {
*/ */
const QDomElement PartText::toXml(QDomDocument &xml_document) const { const QDomElement PartText::toXml(QDomDocument &xml_document) const {
QDomElement xml_element = xml_document.createElement("text"); QDomElement xml_element = xml_document.createElement("text");
xml_element.setAttribute("x", QString("%1").arg((scenePos() + margin()).x())); xml_element.setAttribute("x", QString("%1").arg(pos().x()));
xml_element.setAttribute("y", QString("%1").arg((scenePos() + margin()).y())); xml_element.setAttribute("y", QString("%1").arg(pos().y()));
xml_element.setAttribute("text", toPlainText()); xml_element.setAttribute("text", toPlainText());
xml_element.setAttribute("size", font().pointSize()); xml_element.setAttribute("size", font().pointSize());
return(xml_element); return(xml_element);
@@ -84,8 +85,8 @@ QWidget *PartText::elementInformations() {
} }
/** /**
Retourne la position du texte, l'origine etant le point en bas a gauche du Retourne la position du texte, l'origine etant le point a gauche du texte,
texte (et pas du cadre) sur la baseline de la premiere ligne
@return la position du texte @return la position du texte
*/ */
QPointF PartText::pos() const { QPointF PartText::pos() const {
@@ -116,8 +117,10 @@ QPointF PartText::margin() const {
QFont used_font = font(); QFont used_font = font();
QFontMetrics qfm(used_font); QFontMetrics qfm(used_font);
QPointF margin( QPointF margin(
(boundingRect().width () - qfm.width(toPlainText())) / 2.0, // marge autour du texte
((boundingRect().height() - used_font.pointSizeF()) / 3.0) + used_font.pointSizeF() document() -> documentMargin(),
// marge au-dessus du texte + distance entre le plafond du texte et la baseline
document() -> documentMargin() + qfm.ascent()
); );
return(margin); return(margin);
} }
@@ -228,7 +231,7 @@ QVariant PartText::itemChange(GraphicsItemChange change, const QVariant &value)
*/ */
QRectF PartText::boundingRect() const { QRectF PartText::boundingRect() const {
QRectF r = QGraphicsTextItem::boundingRect(); QRectF r = QGraphicsTextItem::boundingRect();
r.adjust(0.0, -2.0, 0.0, 0.0); r.adjust(0.0, -1.1, 0.0, 0.0);
return(r); return(r);
} }

View File

@@ -71,8 +71,8 @@ void PartTextField::fromXml(const QDomElement &xml_element) {
*/ */
const QDomElement PartTextField::toXml(QDomDocument &xml_document) const { const QDomElement PartTextField::toXml(QDomDocument &xml_document) const {
QDomElement xml_element = xml_document.createElement("input"); QDomElement xml_element = xml_document.createElement("input");
xml_element.setAttribute("x", QString("%1").arg((scenePos() + margin()).x())); xml_element.setAttribute("x", QString("%1").arg(pos().x()));
xml_element.setAttribute("y", QString("%1").arg((scenePos() + margin()).y())); xml_element.setAttribute("y", QString("%1").arg(pos().y()));
xml_element.setAttribute("text", toPlainText()); xml_element.setAttribute("text", toPlainText());
xml_element.setAttribute("size", font().pointSize()); xml_element.setAttribute("size", font().pointSize());
if (follow_parent_rotations) xml_element.setAttribute("rotate", "true"); if (follow_parent_rotations) xml_element.setAttribute("rotate", "true");
@@ -87,8 +87,8 @@ QWidget *PartTextField::elementInformations() {
} }
/** /**
Retourne la position du texte, l'origine etant le point en bas a gauche du Retourne la position du texte, l'origine etant le milieu du bord gauche du
texte (et pas du cadre) champ
@return la position du texte @return la position du texte
*/ */
QPointF PartTextField::pos() const { QPointF PartTextField::pos() const {
@@ -132,13 +132,7 @@ void PartTextField::setFollowParentRotations(bool fpr) {
@return Les coordonnees du point situe en bas a gauche du texte. @return Les coordonnees du point situe en bas a gauche du texte.
*/ */
QPointF PartTextField::margin() const { QPointF PartTextField::margin() const {
QFont used_font = font(); return(QPointF(0.0, boundingRect().height() / 2.0));
QFontMetrics qfm(used_font);
QPointF margin(
(boundingRect().width () - qfm.width(toPlainText())) / 2.0,
((boundingRect().height() - used_font.pointSizeF()) / 3.0) + used_font.pointSizeF()
);
return(margin);
} }
/** /**
@@ -253,7 +247,7 @@ QVariant PartTextField::itemChange(GraphicsItemChange change, const QVariant &va
*/ */
QRectF PartTextField::boundingRect() const { QRectF PartTextField::boundingRect() const {
QRectF r = QGraphicsTextItem::boundingRect(); QRectF r = QGraphicsTextItem::boundingRect();
r.adjust(0.0, -2.0, 0.0, 0.0); r.adjust(0.0, -1.1, 0.0, 0.0);
return(r); return(r);
} }