[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegames/kollision
From:       Paolo Capriotti <paolo.capriotti () gmail ! com>
Date:       2009-06-30 19:47:56
Message-ID: 1246391276.420726.12187.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 989736 by capriotti:

Allow QGraphicsTextItem to wrap text.

This should fix the issue with the German translation.

CCBUG: 169202


 M  +10 -6     mainarea.cpp  
 M  +13 -6     message.cpp  
 M  +3 -1      message.h  


--- trunk/KDE/kdegames/kollision/mainarea.cpp #989735:989736
@@ -96,7 +96,7 @@
 
 Animation* MainArea::writeMessage(const QString& text)
 {
-    Message* message = new Message(text, m_msg_font);
+    Message* message = new Message(text, m_msg_font, m_size);
     message->setPosition(QPointF(m_size, m_size) / 2.0);
     addItem(message);
     message->setOpacityF(0.0);
@@ -125,7 +125,7 @@
     m_welcome_msg.clear();
     foreach (const QString &line, text.split("\n")) {
         m_welcome_msg.append(
-            KSharedPtr<Message>(new Message(line, m_msg_font)));
+            KSharedPtr<Message>(new Message(line, m_msg_font, m_size)));
     }
     displayMessages(m_welcome_msg);
 
@@ -148,17 +148,21 @@
 
 void MainArea::displayMessages(const QList<KSharedPtr<Message> >& messages)
 {
-    const int step = 45;
-    QPointF pos(m_size / 2.0, (m_size - step * messages.size()) / 2.0);
+    int totalHeight = 0;
+    foreach (KSharedPtr<Message> message, messages) {
+      totalHeight += message->height();
+    }
+    QPointF pos(m_size / 2.0, (m_size - totalHeight) / 2.0);
 
     for (int i = 0; i < messages.size(); i++) {
         KSharedPtr<Message> msg = messages[i];
+        int halfHeight = msg->height() / 2;
+        pos.ry() += halfHeight;
         msg->setPosition(pos);
         msg->setZValue(10.0);
         msg->show();
         addItem(msg.data());
-
-        pos.ry() += step;
+        pos.ry() += halfHeight;
     }
 }
 
--- trunk/KDE/kdegames/kollision/message.cpp #989735:989736
@@ -10,8 +10,10 @@
 #include "message.h"
 #include <QFontMetrics>
 #include <QPainter>
+#include <QTextDocument>
+#include <QTextOption>
 
-Message::Message(const QString& text, const QFont& font)
+Message::Message(const QString& text, const QFont& font, int maxwidth)
 : QGraphicsTextItem(text)
 , m_opacity(1.0)
 , m_velocity(0.0, 0.0)
@@ -19,12 +21,14 @@
     setFont(font);
     setDefaultTextColor(Qt::black);
     setAcceptsHoverEvents(false);
+    document()->setTextWidth(maxwidth);
+    QTextOption opts = document()->defaultTextOption();
+    opts.setAlignment(Qt::AlignHCenter);
+    document()->setDefaultTextOption(opts);
     
-    // translate so that the origin is the center of the
-    // bounding rect
-    QFontMetrics metrics(font);
-    QSize offset = metrics.boundingRect(text).size();
-    translate(-offset.width() / 2, -offset.height() / 2);
+    // translate so that the origin is the center
+    translate(-document()->size().width() / 2, 
+              -document()->size().height() / 2);
 }
 
 void Message::paint(QPainter *painter, 
@@ -68,3 +72,6 @@
     return QGraphicsTextItem::pos();
 }
 
+int Message::height() const {
+    return document()->size().height();
+}
--- trunk/KDE/kdegames/kollision/message.h #989735:989736
@@ -19,7 +19,7 @@
     qreal m_opacity;
     QPointF m_velocity;
 public:
-    Message(const QString& text, const QFont& font);
+    Message(const QString& text, const QFont& font, int maxwidth);
     
     virtual void paint(QPainter *painter, 
                        const QStyleOptionGraphicsItem* option, 
@@ -33,6 +33,8 @@
     
     virtual void setPosition(const QPointF& pos);
     virtual QPointF position() const;
+    
+    int height() const;
 };
 
 typedef KSharedPtr<Message> MessagePtr;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic