src/hbcore/primitives/hbrichtextitem.cpp
changeset 1 f7ac710697a9
parent 0 16d8024aca5e
child 21 4633027730f5
child 34 ed14f46c0e55
--- a/src/hbcore/primitives/hbrichtextitem.cpp	Mon Apr 19 14:02:13 2010 +0300
+++ b/src/hbcore/primitives/hbrichtextitem.cpp	Mon May 03 12:48:33 2010 +0300
@@ -36,6 +36,7 @@
 #include <QTextLayout>
 #include <QPainter>
 #include <QAbstractTextDocumentLayout>
+#include <QApplication>
 
 const int KMinimumLetersToShow = 4;
 
@@ -110,12 +111,11 @@
 {
     Qt::Alignment oldAlign = mTextOption.alignment();
     Qt::Alignment alignment = QStyle::visualAlignment(newDirection, mAlignment);
-    if(alignment!=oldAlign) {
-        mTextOption.setAlignment(alignment);
-        mRtf->setDefaultTextOption(mTextOption);
-        return true;
-    }
-    return false;
+    mTextOption.setAlignment(alignment);
+    mTextOption.setTextDirection(newDirection);
+    mRtf->setDefaultTextOption(mTextOption);
+
+    return alignment!=oldAlign;
 }
 
 void HbRichTextItemPrivate::setSize(const QSizeF &newSize)
@@ -276,6 +276,10 @@
 
     Q_D(HbRichTextItem);
 
+    // Save painter's state
+    QRegion oldClipRegion = painter->clipRegion();
+    QTransform oldTransform = painter->transform();
+
     if(!d->mDontPrint) {
         if(!d->mDontClip) {
             painter->setClipRect(contentsRect(), Qt::IntersectClip);
@@ -285,6 +289,10 @@
         context.palette.setColor(QPalette::Text, textDefaultColor());
         d->mRtf->documentLayout()->draw(painter, context);
     }
+
+    // Restore painter's state
+    painter->setClipRegion(oldClipRegion);
+    painter->setTransform(oldTransform);
 }
 
 /*!
@@ -342,9 +350,8 @@
     switch(event->type()) {
     case QEvent::LayoutDirectionChange: {
             prepareGeometryChange();
-            if(d->setLayoutDirection(layoutDirection())) {
-                update();
-            }
+            d->setLayoutDirection(layoutDirection());
+            update();
         }
         break;
 
@@ -480,9 +487,24 @@
 void HbRichTextItem::setTextDefaultColor(const QColor &color)
 {
     Q_D(HbRichTextItem);
+
+    d->setApiProtectionFlag(HbWidgetBasePrivate::AC_TextColor, color.isValid());
     if (d->mColor != color) {
         d->mColor = color;
-        update();
+
+        if (!color.isValid()) {
+            QGraphicsWidget* ccsHandler = parentWidget();
+            // check if there is a widget which handles CSS
+            if (ccsHandler!=NULL) {
+                // this is needed to enforce color fetch from CSS
+                HbEvent themeEvent(HbEvent::ThemeChanged);
+                QApplication::sendEvent(ccsHandler, &themeEvent);
+            }
+        }
+
+        if (!d->mText.isEmpty()) {
+            update();
+        }
     }
 }