Fix rounding error in QInputMethod::cursorRectangle().
authorAndrew den Exter <andrew.den-exter@nokia.com>
Thu, 23 Feb 2012 05:02:23 +0000 (15:02 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 23 Feb 2012 08:33:27 +0000 (09:33 +0100)
Use QRectF consistently to avoid the rounding done in the conversion
to QRect.

Task-number: QTBUG-24463
Change-Id: If9ea858ebabf8c449ea058b9d379d4a57cb6c82d
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
src/gui/kernel/qinputmethod.cpp
tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp

index de00396..9e72444 100644 (file)
@@ -154,9 +154,9 @@ QRectF QInputMethod::cursorRectangle() const
 
     QInputMethodQueryEvent query(Qt::ImCursorRectangle);
     QGuiApplication::sendEvent(d->inputItem.data(), &query);
-    QRect r = query.value(Qt::ImCursorRectangle).toRect();
+    QRectF r = query.value(Qt::ImCursorRectangle).toRectF();
     if (!r.isValid())
-        return QRect();
+        return QRectF();
 
     return d->inputItemTransform.mapRect(r);
 }
index 2ca921b..c906eba 100644 (file)
@@ -50,7 +50,7 @@ class InputItem : public QObject
 {
     Q_OBJECT
 public:
-    InputItem() : m_enabled(true) {}
+    InputItem() : cursorRectangle(1, 2, 3, 4), m_enabled(true) {}
 
     bool event(QEvent *event)
     {
@@ -59,7 +59,7 @@ public:
             if (query->queries() & Qt::ImEnabled)
                 query->setValue(Qt::ImEnabled, m_enabled);
             if (query->queries() & Qt::ImCursorRectangle)
-                query->setValue(Qt::ImCursorRectangle, QRectF(1, 2, 3, 4));
+                query->setValue(Qt::ImCursorRectangle, cursorRectangle);
             if (query->queries() & Qt::ImPreferredLanguage)
                 query->setValue(Qt::ImPreferredLanguage, QString("English"));
             m_lastQueries = query->queries();
@@ -76,6 +76,7 @@ public:
         }
     }
 
+    QRectF cursorRectangle;
     Qt::InputMethodQueries m_lastQueries;
     bool m_enabled;
 };
@@ -226,7 +227,11 @@ void tst_qinputmethod::cursorRectangle()
 
     QCOMPARE(qApp->inputMethod()->cursorRectangle(), transform.mapRect(QRectF(1, 2, 3, 4)));
 
+    m_inputItem.cursorRectangle = QRectF(1.5, 2, 1, 8);
+    QCOMPARE(qApp->inputMethod()->cursorRectangle(), transform.mapRect(QRectF(1.5, 2, 1, 8)));
+
     // reset
+    m_inputItem.cursorRectangle = QRectF(1, 2, 3, 4);
     qApp->inputMethod()->setInputItemTransform(QTransform());
 }