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

List:       koffice
Subject:    Bug#31534: marked as done (another patch for better clipart rendering) by thierry lorthiois <lor.thi
From:       owner () bugs ! kde ! org (Stephan Kulow)
Date:       2001-08-31 9:18:05
[Download RAW message or body]

Your message with subj: (no subject)

has caused the attached bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I'm
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Stephan Kulow
(administrator, KDE bugs database)

Received: (at submit) by bugs.kde.org; 25 Aug 2001 09:05:59 +0000
Received: (qmail 14931 invoked from network); 25 Aug 2001 09:05:59 -0000
Received: from mail.libertysurf.net (213.36.80.91)
  by max.tat.physik.uni-tuebingen.de with SMTP; 25 Aug 2001 09:05:59 -0000
Received: from there (213.36.9.82) by mail.libertysurf.net (5.1.053)
        id 3B85B73400028D35 for submit@bugs.kde.org; Sat, 25 Aug 2001 11:05:02 +0200
Message-ID: <3B85B73400028D35@mail.libertysurf.net> (added by postmaster@libertysurf.fr)
From: thierry lorthiois <lor.thi@libertysurf.fr>
Reply-To: lor.thi@libertysurf.fr
To: submit@bugs.kde.org
Subject: another patch for better clipart rendering
Date: Sat, 25 Aug 2001 11:03:47 +0200
X-Mailer: KMail [version 1.3]
MIME-Version: 1.0
Content-Type: Multipart/Mixed;
  boundary="------------Boundary-00=_B69M2NBOWVO2FHDMEA7K"
X-Spam-Rating: max.tat.physik.uni-tuebingen.de 600/1000/N



Package: koffice
Version:cvs 24/08 (using KDE 2.2.0)
Severity:normal
Installed from: compiled sources
distribution, OS, Compiler:  Suse7.1, linux 2.4.0, gcc 2.95.2

here the new version:

1 some new function: arc, pie, chord, rectangle, roundrectangle, pixel
2 add a kdebug message when createpen have 6 parameters 
   (possible but undocumented case)
   and the width of the pen is broken (101, 76, ...) when createpen have 6 
parameters 

bye.

thierry lorthiois

["patch-wmf" (text/x-diff)]

diff -uNp kwmf/metafuncs.h new/metafuncs.h
--- kwmf/metafuncs.h	Thu Aug 23 15:02:08 2001
+++ new/metafuncs.h	Sat Aug 25 10:40:00 2001
@@ -35,15 +35,15 @@ struct MetaFuncRec
       { "MOVETO",               0x0214, &QWinMetaFile::moveTo },
       { "EXCLUDECLIPRECT",      0x0415, 0 },
       { "INTERSECTCLIPRECT",    0x0416, 0 },
-      { "ARC",                  0x0817, 0 },
+      { "ARC",                  0x0817, &QWinMetaFile::arc },
       { "ELLIPSE",              0x0418, &QWinMetaFile::ellipse },
       { "FLOODFILL",            0x0419, 0 },
-      { "PIE",                  0x081A, 0 },
-      { "RECTANGLE",            0x041B, 0 },
-      { "ROUNDRECT",            0x061C, 0 },
+      { "PIE",                  0x081A, &QWinMetaFile::pie },
+      { "RECTANGLE",            0x041B, &QWinMetaFile::rectangle },
+      { "ROUNDRECT",            0x061C, &QWinMetaFile::roundRect },
       { "PATBLT",               0x061D, 0 },
       { "SAVEDC",               0x001E, 0 },
-      { "SETPIXEL",             0x041F, 0 },
+      { "SETPIXEL",             0x041F, &QWinMetaFile::setPixel },
       { "OFFSETCLIPRGN",        0x0220, 0 },
       { "TEXTOUT",              0x0521, 0 },
       { "BITBLT",               0x0922, 0 },
@@ -59,7 +59,7 @@ struct MetaFuncRec
       { "SELECTCLIPREGION",     0x012C, 0 },
       { "SELECTOBJECT",         0x012D, &QWinMetaFile::selectObject },
       { "SETTEXTALIGN",         0x012E, 0 },
-      { "CHORD",                0x0830, 0 },
+      { "CHORD",                0x0830, &QWinMetaFile::chord },
       { "SETMAPPERFLAGS",       0x0231, 0 },
       { "EXTTEXTOUT",           0x0a32, 0 },
       { "SETDIBTODEV",          0x0d33, 0 },
diff -uNp kwmf/qwmf.cc new/qwmf.cc
--- kwmf/qwmf.cc	Thu Aug 23 15:02:08 2001
+++ new/qwmf.cc	Sat Aug 25 10:43:16 2001
@@ -16,6 +16,7 @@
  * USA.
  */
 
+#include <math.h>
 #include <qfile.h>
 #include <qfileinfo.h>
 #include <qpainter.h>
@@ -516,6 +517,56 @@ void QWinMetaFile::deleteObject( short, 
 
 
 //-----------------------------------------------------------------------------
+void QWinMetaFile::arc( short, short* parm )
+{
+    int xCenter, yCenter;
+    int angleStart, angleEnd;
+
+    xCenter = parm[ 7 ] + ((parm[ 5 ] - parm[ 7 ]) / 2);
+    yCenter = parm[ 6 ] + ((parm[ 4 ] - parm[ 6 ]) / 2);
+
+    if ( (parm[ 3 ] - xCenter) != 0 )
+        angleStart = (int)((atan( (yCenter - parm[ 2 ]) / (parm[ 3 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleStart = 1440;
+    if ( parm[ 2 ] >  yCenter ) angleStart += 2880;
+
+    if ( (parm[ 1 ] - xCenter) != 0 )
+        angleEnd = (int)((atan( (yCenter - parm[ 0 ]) / (parm[ 1 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleEnd = 1440;
+    if ( parm[ 0 ] >  yCenter ) angleEnd += 2880;
+
+    mPainter.drawArc( parm[ 7 ], parm[ 6 ], parm[ 5 ]-parm[ 7 ], parm[ 4 ]-parm[ 6 \
], angleStart, angleEnd-angleStart); +}
+
+
+//-----------------------------------------------------------------------------
+void QWinMetaFile::chord( short, short* parm )
+{
+    int xCenter, yCenter;
+    int angleStart, angleEnd;
+
+    xCenter = parm[ 7 ] + ((parm[ 5 ] - parm[ 7 ]) / 2);
+    yCenter = parm[ 6 ] + ((parm[ 4 ] - parm[ 6 ]) / 2);
+
+    if ( (parm[ 3 ] - xCenter) != 0 )
+        angleStart = (int)((atan( (yCenter - parm[ 2 ]) / (parm[ 3 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleStart = 1440;
+    if ( parm[ 2 ] >  yCenter ) angleStart += 2880;
+
+    if ( (parm[ 1 ] - xCenter) != 0 )
+        angleEnd = (int)((atan( (yCenter - parm[ 0 ]) / (parm[ 1 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleEnd = 1440;
+    if ( parm[ 0 ] >  yCenter ) angleEnd += 2880;
+
+    mPainter.drawChord( parm[ 7 ], parm[ 6 ], parm[ 5 ]-parm[ 7 ], parm[ 4 ]-parm[ 6 \
], angleStart, angleEnd-angleStart); +}
+
+
+//-----------------------------------------------------------------------------
 void QWinMetaFile::ellipse( short, short* parm )
 {
     mPainter.drawEllipse( parm[ 3 ], parm[ 2 ], parm[ 1 ]-parm[ 3 ], parm[ 0 ]-parm[ \
2 ] ); @@ -523,6 +574,68 @@ void QWinMetaFile::ellipse( short, short
 
 
 //-----------------------------------------------------------------------------
+void QWinMetaFile::pie( short, short* parm )
+{
+    int xCenter, yCenter;
+    int angleStart, angleEnd;
+
+    xCenter = parm[ 7 ] + ((parm[ 5 ] - parm[ 7 ]) / 2);
+    yCenter = parm[ 6 ] + ((parm[ 4 ] - parm[ 6 ]) / 2);
+
+    if ( (parm[ 3 ] - xCenter) != 0 )
+        angleStart = (int)((atan( (yCenter - parm[ 2 ]) / (parm[ 3 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleStart = 1440;
+    if ( parm[ 2 ] >  yCenter ) angleStart += 2880;
+
+    if ( (parm[ 1 ] - xCenter) != 0 )
+        angleEnd = (int)((atan( (yCenter - parm[ 0 ]) / (parm[ 1 ] - xCenter) ) * \
5760) / 6.28332); +    else
+        angleEnd = 1440;
+    if ( parm[ 0 ] >  yCenter ) angleEnd += 2880;
+
+    mPainter.drawPie( parm[ 7 ], parm[ 6 ], parm[ 5 ]-parm[ 7 ], parm[ 4 ]-parm[ 6 \
], angleStart, angleEnd-angleStart); +}
+
+
+//-----------------------------------------------------------------------------
+void QWinMetaFile::rectangle( short, short* parm )
+{
+    mPainter.drawRect( parm[ 3 ], parm[ 2 ], parm[ 1 ]-parm[ 3 ], parm[ 0 ]-parm[ 2 \
] ); +}
+
+
+//-----------------------------------------------------------------------------
+void QWinMetaFile::roundRect( short, short* parm )
+{
+    // 4 lines
+    mPainter.moveTo( parm[ 5 ] + parm[ 1 ], parm[ 4 ] );
+    mPainter.lineTo( parm[ 3 ] - parm[ 1 ], parm[ 4 ] );
+    mPainter.moveTo( parm[ 5 ] + parm[ 1 ], parm[ 2 ] );
+    mPainter.lineTo( parm[ 3 ] - parm[ 1 ], parm[ 2 ] );
+
+    mPainter.moveTo( parm[ 5 ], parm[ 4 ] + parm[ 0 ] );
+    mPainter.lineTo( parm[ 5 ], parm[ 2 ] - parm[ 0 ] );
+    mPainter.moveTo( parm[ 3 ], parm[ 4 ] + parm[ 0 ] );
+    mPainter.lineTo( parm[ 3 ], parm[ 2 ] - parm[ 0 ] );
+
+    //  4 arcs
+    mPainter.drawArc( parm[ 5 ], parm[ 4 ], parm[ 1 ] * 2, parm[ 0 ] * 2, 1440, 1440 \
); +    mPainter.drawArc( parm[ 5 ], parm[ 2 ] - (parm[ 0 ] * 2), parm[ 1 ] * 2, \
parm[ 0 ] * 2, 2880, 1440 ); +    mPainter.drawArc( parm[ 3 ] - (parm[ 1 ] * 2), \
parm[ 2 ] - (parm[ 0 ] * 2), parm[ 1 ] * 2, parm[ 0 ] * 2, 4320, 1440 ); +    \
mPainter.drawArc( parm[ 3 ] - (parm[ 1 ] * 2), parm[ 4 ], parm[ 1 ] * 2, parm[ 0 ] * \
2, 0, 1440 ); +}
+
+
+//-----------------------------------------------------------------------------
+void QWinMetaFile::setPixel( short num, short* parm )
+{
+    mPainter.setPen( color( parm ) );
+    mPainter.drawPoint( parm[ 3 ], parm[ 2 ] );
+}
+
+
+//-----------------------------------------------------------------------------
 void QWinMetaFile::polygon( short num, short* parm )
 {
     QPointArray* pa;
@@ -675,7 +788,7 @@ void QWinMetaFile::createBrushIndirect( 
 
 
 //-----------------------------------------------------------------------------
-void QWinMetaFile::createPenIndirect( short, short* parm )
+void QWinMetaFile::createPenIndirect( short nbParm, short* parm )
 {
     static Qt::PenStyle styleTab[] =
     { Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLine, Qt::DashDotDotLine,
@@ -683,13 +796,13 @@ void QWinMetaFile::createPenIndirect( sh
     Qt::PenStyle style;
     WinObjPenHandle* handle = createPen();
 
-    if ( parm[ 0 ]>=0 && parm[ 0 ]<6 ) style=styleTab[ parm[ 0 ] ];
-    else
-    {
+    if ( (parm[ 0 ] < 0) || (parm[ 0 ] >= 6) || (nbParm > 5) )
+    {   // sometimes nbParm = 6
         kdDebug() << "QWinMetaFile::createPenIndirect: invalid pen " << parm[ 0 ] << \
endl;  style = Qt::SolidLine;
         parm[ 1 ] = 1;
     }
+    else  style=styleTab[ parm[ 0 ] ];
     // if ( parm[ 1 ]<=0 ) style=NoPen;
 
     handle->pen.setStyle( style );
diff -uNp kwmf/qwmf.h new/qwmf.h
--- kwmf/qwmf.h	Thu Aug 23 15:02:08 2001
+++ new/qwmf.h	Sat Aug 25 10:39:26 2001
@@ -92,8 +92,20 @@ public: // should be protected but canno
     void lineTo( short num, short* parms );
     // move pen to coord
     void moveTo( short num, short* parms );
+    // draw arc
+    void arc( short num, short* parms );
+    // draw chord
+    void chord( short num, short* parms );
     // draw ellipse
     void ellipse( short num, short* parms );
+    // draw pie
+    void pie( short num, short* parms );
+    // draw a rectangle
+    void rectangle( short num, short* parms );
+    // draw a round rectangle
+    void roundRect( short num, short* parms );
+    // Set a pixel
+    void setPixel( short num, short* parms );
     // Activate object handle
     void selectObject( short num, short* parms );
     // Free object handle



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

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