Author: jghali
Date: Wed Jul 17 23:20:09 2019
New Revision: 23083

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23083
Log:
#14434: Converting true type fonts to outlines produces wrong shapes

Modified:
    trunk/Scribus/scribus/fonts/scfontmetrics.cpp

Modified: trunk/Scribus/scribus/fonts/scfontmetrics.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23083&path=/trunk/Scribus/scribus/fonts/scfontmetrics.cpp
==============================================================================
--- trunk/Scribus/scribus/fonts/scfontmetrics.cpp       (original)
+++ trunk/Scribus/scribus/fonts/scfontmetrics.cpp       Wed Jul 17 23:20:09 2019
@@ -421,19 +421,25 @@
 {
        qreal tox = ( to->x / FTSCALE );
        qreal toy = ( to->y / FTSCALE );
-       if ( !composite->hasLastQuadPoint(tox, toy, tox, toy, tox, toy, tox, 
toy))
+       if (!composite->hasLastQuadPoint(tox, toy, tox, toy, tox, toy, tox, 
toy))
                composite->addQuadPoint(tox, toy, tox, toy, tox, toy, tox, toy);
        return 0;
 }
 
 static int traceQuadraticBezier( FT_Vector *control, FT_Vector *to, 
FPointArray *composite )
 {
-       qreal x1 = ( control->x / FTSCALE );
-       qreal y1 = ( control->y / FTSCALE );
-       qreal x2 = ( to->x / FTSCALE );
-       qreal y2 = ( to->y / FTSCALE );
-       if ( !composite->hasLastQuadPoint(x2, y2, x1, y1, x2, y2, x2, y2))
-               composite->addQuadPoint(x2, y2, x1, y1, x2, y2, x2, y2);
+       const FPoint& prev = composite->last();
+       qreal x1 = (prev.x() + 2 * control->x / FTSCALE) / 3.0;
+       qreal y1 = (prev.y() + 2 * control->y / FTSCALE) / 3.0;
+       qreal x2 = (to->x / FTSCALE + 2 * (control->x / FTSCALE)) / 3.0;
+       qreal y2 = (to->y / FTSCALE + 2 * (control->y / FTSCALE)) / 3.0;
+       qreal x3 = (to->x / FTSCALE);
+       qreal y3 = (to->y / FTSCALE);
+       if ( !composite->hasLastQuadPoint(x3, y3, x2, y2, x3, y3, x3, y3) )
+       {
+               composite->setPoint(composite->size() - 1, FPoint(x1, y1));
+               composite->addQuadPoint(x3, y3, x2, y2, x3, y3, x3, y3);
+       }
        return 0;
 }
 
@@ -447,7 +453,7 @@
        qreal y3 = ( to->y / FTSCALE );
        if ( !composite->hasLastQuadPoint(x3, y3, x2, y2, x3, y3, x3, y3) )
        {
-               composite->setPoint(composite->size()-1, FPoint(x1, y1));
+               composite->setPoint(composite->size() - 1, FPoint(x1, y1));
                composite->addQuadPoint(x3, y3, x2, y2, x3, y3, x3, y3);
        }
        return 0;


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to