[Libreoffice-commits] .: src/lib

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Feb 6 01:14:32 PST 2013


 src/lib/MSPUBBlockID.h     |    1 +
 src/lib/MSPUBCollector.cpp |   16 +++++++++++++++-
 src/lib/MSPUBCollector.h   |    1 +
 src/lib/MSPUBParser.cpp    |    5 +++++
 src/lib/ShapeInfo.h        |    9 ++++++++-
 5 files changed, 30 insertions(+), 2 deletions(-)

New commits:
commit a51d131b9196afd68e44df43b75e56fb59d43450
Author: Brennan Vincent <brennan.vincent at gmail.com>
Date:   Fri Feb 1 06:22:26 2013 -0700

    pub2k2+ implement images cropped to shapes.

diff --git a/src/lib/MSPUBBlockID.h b/src/lib/MSPUBBlockID.h
index 9ea0f5e..5a42d72 100644
--- a/src/lib/MSPUBBlockID.h
+++ b/src/lib/MSPUBBlockID.h
@@ -42,6 +42,7 @@ enum MSPUBBlockID // Don't be alarmed by multiple elements with the same value;
   CHUNK_TYPE = 0x2,
   CHUNK_OFFSET = 0x4,
   CHUNK_PARENT_SEQNUM = 0x5,
+  SHAPE_CROP = 0xb7,
   SHAPE_WIDTH = 0xaa,
   SHAPE_HEIGHT = 0xab,
   SHAPE_DONT_STRETCH_BA = 0x07,
diff --git a/src/lib/MSPUBCollector.cpp b/src/lib/MSPUBCollector.cpp
index 5653df8..ad3006a 100644
--- a/src/lib/MSPUBCollector.cpp
+++ b/src/lib/MSPUBCollector.cpp
@@ -412,7 +412,16 @@ boost::function<void(void)> libmspub::MSPUBCollector::paintShape(const ShapeInfo
   const Coordinate &coord = info.m_coordinates.get_value_or(Coordinate());
   BorderPosition borderPosition =
     hasBorderArt ? INSIDE_SHAPE : info.m_borderPosition.get_value_or(HALF_INSIDE_SHAPE);
-  ShapeType type = info.m_type.get_value_or(RECTANGLE);
+  ShapeType type;
+  if (info.m_cropType.is_initialized())
+  {
+    type = info.m_cropType.get();
+  }
+  else
+  {
+    type = info.m_type.get_value_or(RECTANGLE);
+  }
+  
   if (hasFill)
   {
     double x, y, height, width;
@@ -1495,4 +1504,9 @@ void libmspub::MSPUBCollector::setMasterPage(unsigned seqNum, unsigned masterPag
   m_masterPagesByPageSeqNum[seqNum] = masterPageSeqNum;
 }
 
+void libmspub::MSPUBCollector::setShapeCropType(unsigned seqNum, ShapeType cropType)
+{
+  m_shapeInfosBySeqNum[seqNum].m_cropType = cropType;
+}
+
 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/MSPUBCollector.h b/src/lib/MSPUBCollector.h
index 03e7dc5..719eb1e 100644
--- a/src/lib/MSPUBCollector.h
+++ b/src/lib/MSPUBCollector.h
@@ -89,6 +89,7 @@ public:
   void setNextPage(unsigned seqNum);
 
   void setShapeType(unsigned seqNum, ShapeType type);
+  void setShapeCropType(unsigned seqNum, ShapeType cropType);
   void setShapePictureRecolor(unsigned seqNum, const ColorReference &recolor);
   void setShapeTableInfo(unsigned seqNum, const TableInfo &ti);
   void setShapeBorderImageId(unsigned seqNum, unsigned borderImageId);
diff --git a/src/lib/MSPUBParser.cpp b/src/lib/MSPUBParser.cpp
index 8ccb000..4beead4 100644
--- a/src/lib/MSPUBParser.cpp
+++ b/src/lib/MSPUBParser.cpp
@@ -791,6 +791,11 @@ bool libmspub::MSPUBParser::parseShape(WPXInputStream *input,
         m_collector->setShapeVerticalTextAlign(chunk.seqNum,
                                                static_cast<VerticalAlign>(info.data));
       }
+      else if (info.id == SHAPE_CROP)
+      {
+        m_collector->setShapeCropType(chunk.seqNum,
+                                      static_cast<ShapeType>(info.data));
+      }
     }
     if (shouldStretchBorderArt)
     {
diff --git a/src/lib/ShapeInfo.h b/src/lib/ShapeInfo.h
index 70d00c4..a0d193a 100644
--- a/src/lib/ShapeInfo.h
+++ b/src/lib/ShapeInfo.h
@@ -52,6 +52,7 @@ void noop(const CustomShape *);
 struct ShapeInfo
 {
   boost::optional<ShapeType> m_type;
+  boost::optional<ShapeType> m_cropType;
   boost::optional<unsigned> m_imgIndex;
   boost::optional<unsigned> m_borderImgIndex;
   boost::optional<Coordinate> m_coordinates;
@@ -78,7 +79,7 @@ struct ShapeInfo
   boost::optional<VerticalAlign> m_verticalAlign;
   boost::optional<ColorReference> m_pictureRecolor;
   boost::optional<Shadow> m_shadow;
-  ShapeInfo() : m_type(), m_imgIndex(), m_borderImgIndex(),
+  ShapeInfo() : m_type(), m_cropType(), m_imgIndex(), m_borderImgIndex(),
     m_coordinates(), m_lines(), m_pageSeqNum(),
     m_textId(), m_adjustValuesByIndex(), m_adjustValues(),
     m_rotation(), m_flips(), m_margins(), m_borderPosition(),
@@ -95,6 +96,12 @@ struct ShapeInfo
     {
       return getFromDynamicCustomShape(m_customShape.get());
     }
+    if (m_cropType.is_initialized())
+    {
+      return boost::shared_ptr<const CustomShape>(
+               libmspub::getCustomShape(m_cropType.get()),
+               boost::function<void (const CustomShape *)>(noop));
+    }
     return boost::shared_ptr<const CustomShape>(
              libmspub::getCustomShape(m_type.get_value_or(RECTANGLE)),
              boost::function<void (const CustomShape *)>(noop));


More information about the Libreoffice-commits mailing list