src/gui/painting/qoutlinemapper.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
--- a/src/gui/painting/qoutlinemapper.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/gui/painting/qoutlinemapper.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -234,12 +234,12 @@
 
 
     // Check for out of dev bounds...
-    const bool do_clip = (controlPointRect.left() < -QT_RASTER_COORD_LIMIT
+    const bool do_clip = !m_in_clip_elements && ((controlPointRect.left() < -QT_RASTER_COORD_LIMIT
                           || controlPointRect.right() > QT_RASTER_COORD_LIMIT
                           || controlPointRect.top() < -QT_RASTER_COORD_LIMIT
                           || controlPointRect.bottom() > QT_RASTER_COORD_LIMIT
                           || controlPointRect.width() > QT_RASTER_COORD_LIMIT
-                          || controlPointRect.height() > QT_RASTER_COORD_LIMIT);
+                          || controlPointRect.height() > QT_RASTER_COORD_LIMIT));
 
     if (do_clip) {
         clipElements(elements, elementTypes(), element_count);
@@ -353,7 +353,13 @@
     // instead of going through convenience functionallity, but since
     // this part of code hardly every used, it shouldn't matter.
 
+    m_in_clip_elements = true;
+
     QPainterPath path;
+
+    if (!(m_outline.flags & QT_FT_OUTLINE_EVEN_ODD_FILL))
+        path.setFillRule(Qt::WindingFill);
+
     if (types) {
         for (int i=0; i<element_count; ++i) {
             switch (types[i]) {
@@ -389,6 +395,8 @@
     else
         convertPath(clippedPath);
     m_txop = old_txop;
+
+    m_in_clip_elements = false;
 }
 
 QT_END_NAMESPACE