[Libreoffice-commits] .: 4 commits - filter/inc filter/source sw/source writerfilter/source
Miklos Vajna
vmiklos at kemper.freedesktop.org
Mon May 7 00:33:17 PDT 2012
filter/inc/filter/msfilter/util.hxx | 2
filter/source/msfilter/util.cxx | 11 +++
sw/source/filter/ww8/ww8par6.cxx | 17 -----
sw/source/filter/ww8/ww8struc.hxx | 4 -
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 77 ++++++++++++++++++++++---
writerfilter/source/rtftok/rtfdocumentimpl.hxx | 5 +
writerfilter/source/rtftok/rtfsdrimport.cxx | 17 -----
7 files changed, 95 insertions(+), 38 deletions(-)
New commits:
commit c450ea69921001621a1114369b3508bfa69bd088
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon May 7 09:32:48 2012 +0200
introduce msfilter::util::BGRToRGB to avoid copy&paste
Change-Id: Ic3fa8865bf3862407867b5e4a438e3d9bc723e86
diff --git a/filter/inc/filter/msfilter/util.hxx b/filter/inc/filter/msfilter/util.hxx
index 01ff373..2dc5fa7 100644
--- a/filter/inc/filter/msfilter/util.hxx
+++ b/filter/inc/filter/msfilter/util.hxx
@@ -41,6 +41,8 @@ namespace util {
/// what the encoding is, but you know or can guess the language
MSFILTER_DLLPUBLIC rtl_TextEncoding getBestTextEncodingFromLocale(const ::com::sun::star::lang::Locale &rLocale);
+/// Convert a color in BGR format to RGB.
+MSFILTER_DLLPUBLIC sal_uInt32 BGRToRGB(sal_uInt32 nColour);
}
}
diff --git a/filter/source/msfilter/util.cxx b/filter/source/msfilter/util.cxx
index 76fe07c..03df8af 100644
--- a/filter/source/msfilter/util.cxx
+++ b/filter/source/msfilter/util.cxx
@@ -51,6 +51,17 @@ rtl_TextEncoding getBestTextEncodingFromLocale(const ::com::sun::star::lang::Loc
return RTL_TEXTENCODING_MS_1252;
}
+sal_uInt32 BGRToRGB(sal_uInt32 nColor)
+{
+ sal_uInt8
+ r(static_cast<sal_uInt8>(nColor&0xFF)),
+ g(static_cast<sal_uInt8>(((nColor)>>8)&0xFF)),
+ b(static_cast<sal_uInt8>((nColor>>16)&0xFF)),
+ t(static_cast<sal_uInt8>((nColor>>24)&0xFF));
+ nColor = (t<<24) + (r<<16) + (g<<8) + b;
+ return nColor;
+}
+
}
}
diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx
index 8a71999..d0a94a1 100644
--- a/sw/source/filter/ww8/ww8par6.cxx
+++ b/sw/source/filter/ww8/ww8par6.cxx
@@ -3363,24 +3363,13 @@ void SwWW8ImplReader::Read_TxtColor( sal_uInt16, const sal_uInt8* pData, short n
}
}
-sal_uInt32 wwUtility::BGRToRGB(sal_uInt32 nColor)
-{
- sal_uInt8
- r(static_cast<sal_uInt8>(nColor&0xFF)),
- g(static_cast<sal_uInt8>(((nColor)>>8)&0xFF)),
- b(static_cast<sal_uInt8>((nColor>>16)&0xFF)),
- t(static_cast<sal_uInt8>((nColor>>24)&0xFF));
- nColor = (t<<24) + (r<<16) + (g<<8) + b;
- return nColor;
-}
-
void SwWW8ImplReader::Read_TxtForeColor(sal_uInt16, const sal_uInt8* pData, short nLen)
{
if( nLen < 0 )
pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_COLOR );
else
{
- Color aColor(wwUtility::BGRToRGB(SVBT32ToUInt32(pData)));
+ Color aColor(msfilter::util::BGRToRGB(SVBT32ToUInt32(pData)));
NewAttr(SvxColorItem(aColor, RES_CHRATR_COLOR));
if (pAktColl && pStyles)
pStyles->bTxtColChanged = true;
@@ -4663,9 +4652,9 @@ sal_uInt32 SwWW8ImplReader::ExtractColour(const sal_uInt8* &rpData, bool bVer67)
{
(void) bVer67; // unused in non-debug
OSL_ENSURE(bVer67 == false, "Impossible");
- sal_uInt32 nFore = wwUtility::BGRToRGB(SVBT32ToUInt32(rpData));
+ sal_uInt32 nFore = msfilter::util::BGRToRGB(SVBT32ToUInt32(rpData));
rpData+=4;
- sal_uInt32 nBack = wwUtility::BGRToRGB(SVBT32ToUInt32(rpData));
+ sal_uInt32 nBack = msfilter::util::BGRToRGB(SVBT32ToUInt32(rpData));
rpData+=4;
sal_uInt16 nIndex = SVBT16ToShort(rpData);
rpData+=2;
diff --git a/sw/source/filter/ww8/ww8struc.hxx b/sw/source/filter/ww8/ww8struc.hxx
index 3790ebf..98dff63 100644
--- a/sw/source/filter/ww8/ww8struc.hxx
+++ b/sw/source/filter/ww8/ww8struc.hxx
@@ -34,6 +34,7 @@
#include <sal/config.h>
#include <editeng/borderline.hxx>
+#include <filter/msfilter/util.hxx>
#if defined OSL_BIGENDIAN || SAL_TYPES_ALIGNMENT4 > 2 || defined UNX
# define __WW8_NEEDS_COPY
@@ -978,8 +979,7 @@ struct SEPr
namespace wwUtility
{
- sal_uInt32 BGRToRGB(sal_uInt32 nColour);
- inline sal_uInt32 RGBToBGR(sal_uInt32 nColour) { return BGRToRGB(nColour); }
+ inline sal_uInt32 RGBToBGR(sal_uInt32 nColour) { return msfilter::util::BGRToRGB(nColour); }
}
#endif
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index 01b1d00..4fc0453 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -35,6 +35,7 @@
#include <ooxml/resourceids.hxx> // NS_ooxml namespace
#include <filter/msfilter/escherex.hxx>
+#include <filter/msfilter/util.hxx>
#include <rtfsdrimport.hxx>
@@ -44,18 +45,6 @@ using rtl::OUString;
using rtl::OUStringBuffer;
using rtl::OUStringToOString;
-// NEEDSWORK: wwUtility::BGRToRGB does the same.
-static sal_uInt32 lcl_BGRToRGB(sal_uInt32 nColor)
-{
- sal_uInt8
- r(static_cast<sal_uInt8>(nColor&0xFF)),
- g(static_cast<sal_uInt8>(((nColor)>>8)&0xFF)),
- b(static_cast<sal_uInt8>((nColor>>16)&0xFF)),
- t(static_cast<sal_uInt8>((nColor>>24)&0xFF));
- nColor = (t<<24) + (r<<16) + (g<<8) + b;
- return nColor;
-}
-
namespace writerfilter {
namespace rtftok {
@@ -132,14 +121,14 @@ void RTFSdrImport::resolve(RTFShape& rShape)
}
else if (i->first == "fillColor" && xPropertySet.is())
{
- aAny <<= lcl_BGRToRGB(i->second.toInt32());
+ aAny <<= msfilter::util::BGRToRGB(i->second.toInt32());
xPropertySet->setPropertyValue("FillColor", aAny);
}
else if ( i->first == "fillBackColor" )
; // Ignore: complementer of fillColor
else if (i->first == "lineColor" && xPropertySet.is())
{
- aAny <<= lcl_BGRToRGB(i->second.toInt32());
+ aAny <<= msfilter::util::BGRToRGB(i->second.toInt32());
xPropertySet->setPropertyValue("LineColor", aAny);
}
else if ( i->first == "lineBackColor" )
commit 71bf95db0bf87424678ce62d526e14848cdafec7
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon May 7 09:31:00 2012 +0200
implement RTF_DPFILLBGCR/G/B
Change-Id: I Ie4df6921201b2be4e7d9aa3febd1dcdc1e3eef40
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index be1d9bd..d8fa4c3 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2840,6 +2840,15 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
case RTF_DPLINECOB:
m_aStates.top().aDrawingObject.nLineColorB = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
break;
+ case RTF_DPFILLBGCR:
+ m_aStates.top().aDrawingObject.nFillColorR = nParam; m_aStates.top().aDrawingObject.bHasFillColor = true;
+ break;
+ case RTF_DPFILLBGCG:
+ m_aStates.top().aDrawingObject.nFillColorG = nParam; m_aStates.top().aDrawingObject.bHasFillColor = true;
+ break;
+ case RTF_DPFILLBGCB:
+ m_aStates.top().aDrawingObject.nFillColorB = nParam; m_aStates.top().aDrawingObject.bHasFillColor = true;
+ break;
default:
SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
aSkip.setParsed(false);
@@ -3339,12 +3348,15 @@ int RTFDocumentImpl::popState()
uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+ uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
if (rDrawing.bHasLineColor)
- {
- uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
- }
+ if (rDrawing.bHasFillColor)
+ xPropertySet->setPropertyValue("FillColor", uno::makeAny(sal_uInt32((rDrawing.nFillColorR<<16) + (rDrawing.nFillColorG<<8) + rDrawing.nFillColorB)));
+ else
+ // If there is no fill, the Word default is 100% transparency.
+ xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100)));
Mapper().startShape(xShape);
Mapper().endShape();
@@ -3657,7 +3669,11 @@ RTFDrawingObject::RTFDrawingObject()
: nLineColorR(0),
nLineColorG(0),
nLineColorB(0),
- bHasLineColor(false)
+ bHasLineColor(false),
+ nFillColorR(0),
+ nFillColorG(0),
+ nFillColorB(0),
+ bHasFillColor(false)
{
}
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index d516268..1c7b9ec 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -203,6 +203,8 @@ namespace writerfilter {
std::vector<beans::PropertyValue> aPendingProperties;
sal_uInt8 nLineColorR, nLineColorG, nLineColorB;
bool bHasLineColor;
+ sal_uInt8 nFillColorR, nFillColorG, nFillColorB;
+ bool bHasFillColor;
};
/// Stores the properties of a picture.
commit 4485ff1b51c121627cf30ef219d48614a4de895b
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon May 7 09:30:47 2012 +0200
implement RTF_DPLINECOR/G/B
Change-Id: I179472754f63559668ff918fd2a01331cd3c35bb
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index f23408a..be1d9bd 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2831,6 +2831,15 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
m_aStates.top().nInternalState = INTERNAL_BIN;
m_aStates.top().nBinaryToRead = nParam;
break;
+ case RTF_DPLINECOR:
+ m_aStates.top().aDrawingObject.nLineColorR = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
+ break;
+ case RTF_DPLINECOG:
+ m_aStates.top().aDrawingObject.nLineColorG = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
+ break;
+ case RTF_DPLINECOB:
+ m_aStates.top().aDrawingObject.nLineColorB = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
+ break;
default:
SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
aSkip.setParsed(false);
@@ -3330,6 +3339,13 @@ int RTFDocumentImpl::popState()
uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+
+ if (rDrawing.bHasLineColor)
+ {
+ uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
+ xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
+ }
+
Mapper().startShape(xShape);
Mapper().endShape();
}
@@ -3637,6 +3653,14 @@ RTFPicture::RTFPicture()
{
}
+RTFDrawingObject::RTFDrawingObject()
+ : nLineColorR(0),
+ nLineColorG(0),
+ nLineColorB(0),
+ bHasLineColor(false)
+{
+}
+
RTFFrame::RTFFrame(RTFParserState* pParserState)
: m_pParserState(pParserState),
nX(0),
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index d47ab1a..d516268 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -197,9 +197,12 @@ namespace writerfilter {
class RTFDrawingObject : public RTFShape
{
public:
+ RTFDrawingObject();
uno::Reference<drawing::XShape> xShape;
uno::Reference<beans::XPropertySet> xPropertySet;
std::vector<beans::PropertyValue> aPendingProperties;
+ sal_uInt8 nLineColorR, nLineColorG, nLineColorB;
+ bool bHasLineColor;
};
/// Stores the properties of a picture.
commit 57be17df8f9d69761e648cd1ccd6d6f0084e569a
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon May 7 09:30:12 2012 +0200
rtftok: implement RTF_DPRECT
Change-Id: Iffc00526bd780e19daccea226735b4c4e28bf9c6
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index fa59904..f23408a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -27,6 +27,7 @@
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
#include <com/sun/star/graphic/GraphicProvider.hpp>
#include <com/sun/star/io/UnexpectedEOFException.hpp>
#include <com/sun/star/text/XTextFrame.hpp>
@@ -46,6 +47,7 @@
#include <svtools/grfmgr.hxx>
#include <vcl/svapp.hxx>
#include <filter/msfilter/util.hxx>
+#include <filter/msfilter/escherex.hxx>
#include <doctok/sprmids.hxx> // NS_sprm namespace
#include <doctok/resourceids.hxx> // NS_rtf namespace
@@ -2071,8 +2073,34 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
case RTF_POSXR: m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_xAlign, NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_right); break;
case RTF_DPLINE:
+ case RTF_DPRECT:
{
- m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance("com.sun.star.drawing.LineShape"), uno::UNO_QUERY);
+ sal_Int32 nType = 0;
+ switch (nKeyword)
+ {
+ case RTF_DPLINE:
+ m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance("com.sun.star.drawing.LineShape"), uno::UNO_QUERY);
+ break;
+ case RTF_DPRECT:
+ nType = ESCHER_ShpInst_Rectangle;
+ break;
+ default:
+ break;
+ }
+ if (nType)
+ m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance("com.sun.star.drawing.CustomShape"), uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPageSupplier> xDrawSupplier( m_xDstDoc, uno::UNO_QUERY);
+ if (xDrawSupplier.is())
+ {
+ uno::Reference<drawing::XShapes> xShapes(xDrawSupplier->getDrawPage(), uno::UNO_QUERY);
+ if (xShapes.is())
+ xShapes->add(m_aStates.top().aDrawingObject.xShape);
+ }
+ if (nType)
+ {
+ uno::Reference<drawing::XEnhancedCustomShapeDefaulter> xDefaulter(m_aStates.top().aDrawingObject.xShape, uno::UNO_QUERY);
+ xDefaulter->createCustomShapeDefaults(OUString::valueOf(nType));
+ }
m_aStates.top().aDrawingObject.xPropertySet.set(m_aStates.top().aDrawingObject.xShape, uno::UNO_QUERY);
std::vector<beans::PropertyValue>& rPendingProperties = m_aStates.top().aDrawingObject.aPendingProperties;
for (std::vector<beans::PropertyValue>::iterator i = rPendingProperties.begin(); i != rPendingProperties.end(); ++i)
@@ -3302,13 +3330,6 @@ int RTFDocumentImpl::popState()
uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
- uno::Reference<drawing::XDrawPageSupplier> xDrawSupplier( m_xDstDoc, uno::UNO_QUERY);
- if ( xDrawSupplier.is() )
- {
- uno::Reference< drawing::XShapes > xShapes( xDrawSupplier->getDrawPage(), uno::UNO_QUERY );
- if ( xShapes.is() )
- xShapes->add( xShape );
- }
Mapper().startShape(xShape);
Mapper().endShape();
}
More information about the Libreoffice-commits
mailing list