[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