From: Fridrich S. <str...@us...> - 2010-06-04 15:19:08
|
Update of /cvsroot/libwpg/libwpg/src/lib In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv13027/src/lib Modified Files: WPG2Parser.cpp WPGXParser.cpp WPGXParser.h Log Message: Fixing rotation angles Index: WPG2Parser.cpp =================================================================== RCS file: /cvsroot/libwpg/libwpg/src/lib/WPG2Parser.cpp,v retrieving revision 1.102 retrieving revision 1.103 diff -u -d -r1.102 -r1.103 --- WPG2Parser.cpp 4 Jun 2010 09:01:38 -0000 1.102 +++ WPG2Parser.cpp 4 Jun 2010 15:19:00 -0000 1.103 @@ -165,7 +165,7 @@ unsigned long objectId; unsigned long lockFlags; - long rotationAngle; + double rotationAngle; long sxcos; long sycos; long kxsin; @@ -193,7 +193,7 @@ framed(true), objectId(0), lockFlags(0), - rotationAngle(0), + rotationAngle(0.0), sxcos(0), sycos(0), kxsin(0), @@ -1256,7 +1256,7 @@ if(ch->hasObjectId) ch->objectId = readU16(); if(ch->objectId >> 15) ch->objectId = ((ch->objectId & 0x7fff) << 16) | readU16(); - if(ch->rotate) ch->rotationAngle = readS32(); + if(ch->rotate) ch->rotationAngle = fixedPointToDouble(readU32()); if(ch->rotate || ch->scale) { @@ -1550,7 +1550,7 @@ propList.insert("svg:rx", (TO_DOUBLE(radx) / m_xres)); propList.insert("svg:ry", (TO_DOUBLE(rady) / m_xres)); if (objCh.rotate) - propList.insert("libwpg:rotate", (double)(objCh.rotationAngle)); + propList.insert("libwpg:rotate", objCh.rotationAngle, WPX_GENERIC); m_painter->setStyle( objCh.filled ? m_gradient : ::WPXPropertyListVector(), m_style ); m_painter->drawEllipse(propList); Index: WPGXParser.cpp =================================================================== RCS file: /cvsroot/libwpg/libwpg/src/lib/WPGXParser.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- WPGXParser.cpp 30 Dec 2008 08:53:57 -0000 1.18 +++ WPGXParser.cpp 4 Jun 2010 15:19:00 -0000 1.19 @@ -27,6 +27,15 @@ #include "WPGXParser.h" +double fixedPointToDouble(const unsigned int fixedPointNumber) +{ + short fixedPointNumberIntegerPart = (short)((fixedPointNumber & 0xFFFF0000) >> 16); + double fixedPointNumberFractionalPart = (double)((double)(fixedPointNumber & 0x0000FFFF)/(double)0xFFFF); + return ((fixedPointNumberIntegerPart >= 0) ? + ((double)fixedPointNumberIntegerPart + fixedPointNumberFractionalPart) : + ((double)fixedPointNumberIntegerPart - fixedPointNumberFractionalPart)); +} + WPGXParser::WPGXParser(WPXInputStream *input, libwpg::WPGPaintInterface* painter): m_input(input), m_painter(painter), m_colorPalette(std::map<int,libwpg::WPGColor>()) { Index: WPGXParser.h =================================================================== RCS file: /cvsroot/libwpg/libwpg/src/lib/WPGXParser.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- WPGXParser.h 28 Nov 2008 11:53:03 -0000 1.16 +++ WPGXParser.h 4 Jun 2010 15:19:00 -0000 1.17 @@ -34,6 +34,8 @@ #include <map> +double fixedPointToDouble(unsigned int fixedPointNumber); + class WPGXParser { public: @@ -49,7 +51,7 @@ int readS32(); unsigned int readVariableLengthInteger(); WPGXParser& operator=(const WPGXParser& parser); - + protected: WPXInputStream* m_input; libwpg::WPGPaintInterface* m_painter; |