[Libreoffice-commits] libcdr.git: 4 commits - src/lib

Fridrich Å trba fridrich.strba at bluewin.ch
Tue Mar 5 02:01:05 PST 2013


 src/lib/CDRCollector.h          |    4 ++--
 src/lib/CDRContentCollector.cpp |   27 +++++++++++++++------------
 src/lib/CDRContentCollector.h   |    6 +++---
 src/lib/CDRParser.cpp           |   21 ++++++++++++++++++---
 src/lib/CDRParser.h             |    2 ++
 src/lib/CDRStylesCollector.h    |    4 ++--
 src/lib/CDRTypes.h              |    6 +++---
 src/lib/CMXParser.cpp           |    8 ++++----
 src/lib/CMXParser.h             |    2 +-
 9 files changed, 50 insertions(+), 30 deletions(-)

New commits:
commit 2aca278872fb6d9cc7fdecd41322ae82b4fa541d
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Mar 5 11:00:40 2013 +0100

    Trying to get some reasonable position for the text

diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index fe6fe90..840f164 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -1145,10 +1145,8 @@ void libcdr::CDRContentCollector::collectArtisticText(double, double)
     m_currentText = &(iter->second);
 }
 
-void libcdr::CDRContentCollector::collectParagraphText(double x, double y, double width, double height)
+void libcdr::CDRContentCollector::collectParagraphText(double, double, double width, double height)
 {
-  m_currentBox.m_x = x;
-  m_currentBox.m_y = y;
   m_currentBox.m_w = width;
   m_currentBox.m_h = height;
   std::map<unsigned, std::vector<CDRText> >::const_iterator iter = m_ps.m_texts.find(m_spnd);
commit fe0ea8729b77daa9d732b8b3ebf054381b7bed1c
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Mar 5 10:56:42 2013 +0100

    Some more work on the text frames

diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index e72a7e3..fe6fe90 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -53,7 +53,7 @@ libcdr::CDRContentCollector::CDRContentCollector(libcdr::CDRParserState &ps, lib
   m_page(ps.m_pages[0]), m_pageIndex(0), m_currentFildId(0), m_currentOutlId(0), m_spnd(0),
   m_currentObjectLevel(0), m_currentGroupLevel(0), m_currentVectLevel(0), m_currentPageLevel(0),
   m_currentImage(), m_currentText(0), m_currentTextOffsetX(0.0), m_currentTextOffsetY(0.0),
-  m_currentBBox(), m_currentPath(), m_currentTransforms(), m_fillTransforms(),
+  m_currentBox(), m_currentPath(), m_currentTransforms(), m_fillTransforms(),
   m_polygon(0), m_isInPolygon(false), m_isInSpline(false), m_outputElements(0),
   m_contentOutputElements(), m_fillOutputElements(),
   m_groupLevels(), m_groupTransforms(), m_splineData(), m_fillOpacity(1.0), m_ps(ps)
@@ -111,7 +111,7 @@ void libcdr::CDRContentCollector::collectObject(unsigned level)
   m_currentObjectLevel = level;
   m_currentFildId = 0;
   m_currentOutlId = 0;
-  m_currentBBox = CDRBox();
+  m_currentBox = CDRBox();
 }
 
 void libcdr::CDRContentCollector::collectGroup(unsigned level)
@@ -399,19 +399,19 @@ void libcdr::CDRContentCollector::_flushCurrentPath()
     if (!m_groupTransforms.empty())
       m_groupTransforms.top().applyToPoint(currentTextOffsetX, currentTextOffsetY);
     WPXPropertyList textFrameProps;
-    if (m_currentBBox.getWidth() > 0.0 && m_currentBBox.getHeight() > 0.0)
+    if (m_currentBox.getWidth() > 0.0 && m_currentBox.getHeight() > 0.0)
     {
-      textFrameProps.insert("svg:width", m_currentBBox.getWidth() * 1.05);
-      textFrameProps.insert("svg:height", m_currentBBox.getHeight());
-      currentTextOffsetX = m_currentBBox.getMinX();
-      currentTextOffsetY = m_currentBBox.getMinY();
+      textFrameProps.insert("svg:width", m_currentBox.getWidth() * 1.05);
+      textFrameProps.insert("svg:height", m_currentBox.getHeight());
+      currentTextOffsetX = m_currentBox.getMinX();
+      currentTextOffsetY = m_currentBox.getMinY();
     }
     CDRTransform tmpTrafo(1.0, 0.0, -m_page.offsetX, 0.0, 1.0, -m_page.offsetY);
     tmpTrafo.applyToPoint(currentTextOffsetX, currentTextOffsetY);
     tmpTrafo = CDRTransform(1.0, 0.0, 0.0, 0.0, -1.0, m_page.height);
     tmpTrafo.applyToPoint(currentTextOffsetX, currentTextOffsetY);
     textFrameProps.insert("svg:x", currentTextOffsetX);
-    textFrameProps.insert("svg:y", currentTextOffsetY - m_currentBBox.getHeight());
+    textFrameProps.insert("svg:y", currentTextOffsetY - m_currentBox.getHeight());
     textFrameProps.insert("fo:padding-top", 0.0);
     textFrameProps.insert("fo:padding-bottom", 0.0);
     textFrameProps.insert("fo:padding-left", 0.0);
@@ -1094,7 +1094,7 @@ void libcdr::CDRContentCollector::collectBBox(double x0, double y0, double x1, d
     m_page.offsetX = bBox.getMinX();
     m_page.offsetY = bBox.getMinY();
   }
-  m_currentBBox = bBox;
+  m_currentBox = bBox;
 }
 
 void libcdr::CDRContentCollector::collectSpnd(unsigned spnd)
@@ -1137,15 +1137,20 @@ void libcdr::CDRContentCollector::collectVectorPattern(unsigned id, const WPXBin
 #endif
 }
 
-void libcdr::CDRContentCollector::collectArtisticText(double /* x */, double /* y */)
+void libcdr::CDRContentCollector::collectArtisticText(double, double)
 {
+  m_currentBox.m_w *= 2.0;
   std::map<unsigned, std::vector<CDRText> >::const_iterator iter = m_ps.m_texts.find(m_spnd);
   if (iter != m_ps.m_texts.end())
     m_currentText = &(iter->second);
 }
 
-void libcdr::CDRContentCollector::collectParagraphText(double /* x */, double /* y */, double /* width */, double /* height */)
+void libcdr::CDRContentCollector::collectParagraphText(double x, double y, double width, double height)
 {
+  m_currentBox.m_x = x;
+  m_currentBox.m_y = y;
+  m_currentBox.m_w = width;
+  m_currentBox.m_h = height;
   std::map<unsigned, std::vector<CDRText> >::const_iterator iter = m_ps.m_texts.find(m_spnd);
   if (iter != m_ps.m_texts.end())
     m_currentText = &(iter->second);
diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h
index abdaa2a..5781d25 100644
--- a/src/lib/CDRContentCollector.h
+++ b/src/lib/CDRContentCollector.h
@@ -121,7 +121,7 @@ private:
   const std::vector<CDRText> *m_currentText;
   double m_currentTextOffsetX;
   double m_currentTextOffsetY;
-  CDRBox m_currentBBox;
+  CDRBox m_currentBox;
 
   CDRPath m_currentPath;
   CDRTransforms m_currentTransforms;
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 631a2f1..9103507 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -517,7 +517,7 @@ bool libcdr::CDRParser::parseRecord(WPXInputStream *input, unsigned *blockLength
         m_collector->collectPage(level);
       else if (listType == FOURCC_obj)
         m_collector->collectObject(level);
-      else if (listType == FOURCC_grp)
+      else if (listType == FOURCC_grp || listType == FOURCC_lnkg)
         m_collector->collectGroup(level);
       else if ((listType & 0xffffff) == FOURCC_CDR || (listType & 0xffffff) == FOURCC_cdr)
       {
commit b68d1926a0bf57a3a48327683bcb7a7f472de325
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Mar 5 09:35:13 2013 +0100

    CDRBBox -> CDRBox

diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index c2a3702..e72a7e3 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -111,7 +111,7 @@ void libcdr::CDRContentCollector::collectObject(unsigned level)
   m_currentObjectLevel = level;
   m_currentFildId = 0;
   m_currentOutlId = 0;
-  m_currentBBox = CDRBBox();
+  m_currentBBox = CDRBox();
 }
 
 void libcdr::CDRContentCollector::collectGroup(unsigned level)
@@ -1086,7 +1086,7 @@ void libcdr::CDRContentCollector::collectFillOpacity(double opacity)
 
 void libcdr::CDRContentCollector::collectBBox(double x0, double y0, double x1, double y1)
 {
-  CDRBBox bBox(x0, y0, x1, y1);
+  CDRBox bBox(x0, y0, x1, y1);
   if (m_currentVectLevel && m_page.width == 0.0 && m_page.height == 0.0)
   {
     m_page.width = bBox.getWidth();
diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h
index 52daef8..abdaa2a 100644
--- a/src/lib/CDRContentCollector.h
+++ b/src/lib/CDRContentCollector.h
@@ -121,7 +121,7 @@ private:
   const std::vector<CDRText> *m_currentText;
   double m_currentTextOffsetX;
   double m_currentTextOffsetY;
-  CDRBBox m_currentBBox;
+  CDRBox m_currentBBox;
 
   CDRPath m_currentPath;
   CDRTransforms m_currentTransforms;
diff --git a/src/lib/CDRTypes.h b/src/lib/CDRTypes.h
index ff371ba..b6e19c7 100644
--- a/src/lib/CDRTypes.h
+++ b/src/lib/CDRTypes.h
@@ -38,15 +38,15 @@ namespace libcdr
 {
 class CDRPath;
 
-struct CDRBBox
+struct CDRBox
 {
   double m_x;
   double m_y;
   double m_w;
   double m_h;
-  CDRBBox()
+  CDRBox()
     : m_x(0.0), m_y(0.0), m_w(0.0), m_h(0.0) {}
-  CDRBBox(double x0, double y0, double x1, double y1)
+  CDRBox(double x0, double y0, double x1, double y1)
     : m_x(x0 < x1 ? x0 : x1), m_y(y0 < y1 ? y0 : y1), m_w(fabs(x1-x0)), m_h(fabs(y1-y0)) {}
   double getWidth() const
   {
diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index 9df2b56..ce0150a 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -199,7 +199,7 @@ void libcdr::CMXParser::readCMXHeader(WPXInputStream *input)
   m_infoSectionOffset = readU32(input, m_bigEndian);
   m_thumbnailOffset = readU32(input, m_bigEndian);
 #ifdef DEBUG
-  CDRBBox box = readBBox(input);
+  CDRBox box = readBBox(input);
 #endif
   CDR_DEBUG_MSG(("CMX Offsets: index section 0x%.8x, info section: 0x%.8x, thumbnail: 0x%.8x\n",
                  m_indexSectionOffset, m_infoSectionOffset, m_thumbnailOffset));
@@ -297,7 +297,7 @@ void libcdr::CMXParser::readPage(WPXInputStream *input, unsigned length)
 
 void libcdr::CMXParser::readBeginPage(WPXInputStream *input)
 {
-  CDRBBox box;
+  CDRBox box;
   CDRTransform matrix;
   unsigned flags = 0;
   if (m_precision == libcdr::PRECISION_32BIT)
@@ -622,13 +622,13 @@ libcdr::CDRTransform libcdr::CMXParser::readMatrix(WPXInputStream *input)
   }
 }
 
-libcdr::CDRBBox libcdr::CMXParser::readBBox(WPXInputStream *input)
+libcdr::CDRBox libcdr::CMXParser::readBBox(WPXInputStream *input)
 {
   double x0 = readCoordinate(input, m_bigEndian);
   double y0 = readCoordinate(input, m_bigEndian);
   double x1 = readCoordinate(input, m_bigEndian);
   double y1 = readCoordinate(input, m_bigEndian);
-  CDRBBox box(x0, y0, x1, y1);
+  CDRBox box(x0, y0, x1, y1);
   return box;
 }
 
diff --git a/src/lib/CMXParser.h b/src/lib/CMXParser.h
index 9fa44eb..a2f814a 100644
--- a/src/lib/CMXParser.h
+++ b/src/lib/CMXParser.h
@@ -73,7 +73,7 @@ private:
 
   // Types readers
   CDRTransform readMatrix(WPXInputStream *input);
-  CDRBBox readBBox(WPXInputStream *input);
+  CDRBox readBBox(WPXInputStream *input);
   void readFill(WPXInputStream *input);
 
   // Complex types readers
commit 59a24dd4cc9a8aa697609e5d21c789f901709e3d
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Mar 5 09:30:20 2013 +0100

    Stub reading and processing of text coordinates

diff --git a/src/lib/CDRCollector.h b/src/lib/CDRCollector.h
index e2cac1f..c481a53 100644
--- a/src/lib/CDRCollector.h
+++ b/src/lib/CDRCollector.h
@@ -126,8 +126,8 @@ public:
   virtual void collectFont(unsigned fontId, unsigned short fontEncoding, const WPXString &font) = 0;
   virtual void collectText(unsigned textId, unsigned styleId, const std::vector<unsigned char> &data,
                            const std::vector<uint64_t> &charDescriptions, const std::map<unsigned, CDRCharacterStyle> &styleOverrides) = 0;
-  virtual void collectArtisticText() = 0;
-  virtual void collectParagraphText() = 0;
+  virtual void collectArtisticText(double x, double y) = 0;
+  virtual void collectParagraphText(double x, double y, double width, double height) = 0;
   virtual void collectStlt(const std::map<unsigned, CDRCharacterStyle> &charStyles) = 0;
 };
 
diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index 3e9669f..c2a3702 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -1137,14 +1137,14 @@ void libcdr::CDRContentCollector::collectVectorPattern(unsigned id, const WPXBin
 #endif
 }
 
-void libcdr::CDRContentCollector::collectArtisticText()
+void libcdr::CDRContentCollector::collectArtisticText(double /* x */, double /* y */)
 {
   std::map<unsigned, std::vector<CDRText> >::const_iterator iter = m_ps.m_texts.find(m_spnd);
   if (iter != m_ps.m_texts.end())
     m_currentText = &(iter->second);
 }
 
-void libcdr::CDRContentCollector::collectParagraphText()
+void libcdr::CDRContentCollector::collectParagraphText(double /* x */, double /* y */, double /* width */, double /* height */)
 {
   std::map<unsigned, std::vector<CDRText> >::const_iterator iter = m_ps.m_texts.find(m_spnd);
   if (iter != m_ps.m_texts.end())
diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h
index 56fc5ce..52daef8 100644
--- a/src/lib/CDRContentCollector.h
+++ b/src/lib/CDRContentCollector.h
@@ -89,8 +89,8 @@ public:
   void collectFont(unsigned, unsigned short, const WPXString &) {}
   void collectText(unsigned, unsigned, const std::vector<unsigned char>&,
                    const std::vector<uint64_t>&, const std::map<unsigned, CDRCharacterStyle>&) {}
-  void collectArtisticText();
-  void collectParagraphText();
+  void collectArtisticText(double x, double y);
+  void collectParagraphText(double x, double y, double width, double height);
   void collectStlt(const std::map<unsigned, CDRCharacterStyle> &) {}
 
 private:
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 08dcccf..631a2f1 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -1962,11 +1962,11 @@ void libcdr::CDRParser::readLoda(WPXInputStream *input, unsigned length)
       else if (chunkType == 0x25) // Path
         readPath(input);
       else if ((m_version >= 400 && chunkType == 0x04) || (m_version < 400 && chunkType == 0x03)) // Artistic text
-        m_collector->collectArtisticText();
+        readArtisticText(input);
       else if ((m_version >= 400 && chunkType == 0x05) || (m_version < 400 && chunkType == 0x04)) // Bitmap
         readBitmap(input);
       else if ((m_version >= 400 && chunkType == 0x06) || (m_version < 400 && chunkType == 0x05)) // Paragraph text
-        m_collector->collectParagraphText();
+        readParagraphText(input);
       else if (chunkType == 0x14) // Polygon
         readPolygonCoords(input);
     }
@@ -2975,4 +2975,19 @@ void libcdr::CDRParser::readStyd(WPXInputStream *input)
   input->seek(startPosition+chunkLength, WPX_SEEK_SET);
 }
 
+void libcdr::CDRParser::readArtisticText(WPXInputStream *input)
+{
+  double x = readCoordinate(input);
+  double y = readCoordinate(input);
+  m_collector->collectArtisticText(x, y);
+}
+
+void libcdr::CDRParser::readParagraphText(WPXInputStream *input)
+{
+  input->seek(4, WPX_SEEK_CUR);
+  double width = readCoordinate(input);
+  double height = readCoordinate(input);
+  m_collector->collectParagraphText(0.0, 0.0, width, height);
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/CDRParser.h b/src/lib/CDRParser.h
index 967ed57..9e74bf8 100644
--- a/src/lib/CDRParser.h
+++ b/src/lib/CDRParser.h
@@ -108,6 +108,8 @@ private:
   void readTxsm16(WPXInputStream *input);
   void readTxsm6(WPXInputStream *input);
   void readTxsm5(WPXInputStream *input);
+  void readArtisticText(WPXInputStream *input);
+  void readParagraphText(WPXInputStream *input);
 
   bool _redirectX6Chunk(WPXInputStream **input, unsigned &length);
 
diff --git a/src/lib/CDRStylesCollector.h b/src/lib/CDRStylesCollector.h
index c284cf2..2f7742a 100644
--- a/src/lib/CDRStylesCollector.h
+++ b/src/lib/CDRStylesCollector.h
@@ -91,8 +91,8 @@ public:
   void collectFont(unsigned fontId, unsigned short fontEncoding, const WPXString &font);
   void collectText(unsigned textId, unsigned styleId, const std::vector<unsigned char> &data,
                    const std::vector<uint64_t> &charDescriptions, const std::map<unsigned, CDRCharacterStyle> &styleOverrides);
-  void collectArtisticText() {}
-  void collectParagraphText() {}
+  void collectArtisticText(double, double) {}
+  void collectParagraphText(double, double, double, double) {}
   void collectStlt(const std::map<unsigned, CDRCharacterStyle> &charStyles);
 
 private:


More information about the Libreoffice-commits mailing list