[Libreoffice-commits] core.git: cppcanvas/source

Radek Doulik rodo at novell.com
Fri Mar 15 07:34:35 PDT 2013


 cppcanvas/source/inc/implrenderer.hxx    |    1 
 cppcanvas/source/mtfrenderer/emfplus.cxx |   79 ++++++++++++++++++-------------
 2 files changed, 47 insertions(+), 33 deletions(-)

New commits:
commit fa109b4603f06533a63ee19518c482a23976bfe8
Author: Radek Doulik <rodo at novell.com>
Date:   Fri Mar 15 15:30:40 2013 +0100

    implemented EmfPlusRecordTypeDrawEllipse record
    
    Change-Id: If8d7c210e437a041f3202c09f3d26d621b5af748

diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
index 7d82ea7..c2902d6 100644
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ b/cppcanvas/source/inc/implrenderer.hxx
@@ -264,6 +264,7 @@ static float GetSwapFloat( SvStream& rSt )
             /* EMF+ */
             void processEMFPlus( MetaCommentAction* pAct, const ActionFactoryParameters& rFactoryParms, OutDevState& rState, const CanvasSharedPtr& rCanvas );
             double setFont( sal_uInt8 objectId, const ActionFactoryParameters& rParms, OutDevState& rState );
+            void EMFPPlusDrawPolygon (::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, sal_uInt32 penIndex);
             void EMFPPlusFillPolygon (::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, bool isColor, sal_uInt32 brushIndexOrColor);
 
             ActionVector maActions;
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
index f8ae8c3..5864182 100644
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
@@ -1096,6 +1096,41 @@ namespace cppcanvas
             }
         }
 
+        void ImplRenderer::EMFPPlusDrawPolygon (::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms,
+                                                OutDevState& rState, const CanvasSharedPtr& rCanvas, sal_uInt32 penIndex)
+        {
+            EMFPPen* pen = (EMFPPen*) aObjects [penIndex & 0xff];
+
+            SAL_WARN_IF( !pen, "cppcanvas", "emf+ missing pen" );
+
+            if (pen)
+            {
+                rState.isFillColorSet = false;
+                rState.isLineColorSet = true;
+                rState.lineColor = ::vcl::unotools::colorToDoubleSequence (pen->GetColor (),
+                                                                           rCanvas->getUNOCanvas ()->getDevice()->getDeviceColorSpace());
+
+                polygon.transform( rState.mapModeTransform );
+                rendering::StrokeAttributes aStrokeAttributes;
+
+                pen->SetStrokeAttributes (aStrokeAttributes, *this, rState);
+
+                ActionSharedPtr pPolyAction(
+                                            internal::PolyPolyActionFactory::createPolyPolyAction(
+                                                                                                  polygon, rParms.mrCanvas, rState, aStrokeAttributes ) );
+
+                if( pPolyAction )
+                {
+                    maActions.push_back(
+                                        MtfAction(
+                                                  pPolyAction,
+                                                  rParms.mrCurrActionIndex ) );
+
+                    rParms.mrCurrActionIndex += pPolyAction->getActionCount()-1;
+                }
+            }
+        }
+
         void ImplRenderer::processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_uInt32 dataSize, sal_Bool bUseWholeStream)
         {
             sal_uInt32 index;
@@ -1298,13 +1333,15 @@ namespace cppcanvas
                             EMFPPlusFillPolygon (((EMFPPath*) aObjects [index])->GetPolygon (*this), rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor);
                         }
                         break;
+                    case EmfPlusRecordTypeDrawEllipse:
                     case EmfPlusRecordTypeFillEllipse:
                         {
                             sal_uInt32 brushIndexOrColor;
 
-                            rMF >> brushIndexOrColor;
+                            if ( type == EmfPlusRecordTypeFillEllipse )
+                                rMF >> brushIndexOrColorOrPen;
 
-                            EMFP_DEBUG (printf ("EMF+ FillEllipse slot: %u\n", static_cast<unsigned>(flags && 0xff)));
+                            EMFP_DEBUG (printf ("EMF+ %sEllipse slot: %u\n", type == EmfPlusRecordTypeFillEllipse ? "Fill" : "Draw", static_cast<unsigned>(flags & 0xff)));
 
                             float dx, dy, dw, dh;
 
@@ -1317,8 +1354,12 @@ namespace cppcanvas
 
                             ::basegfx::B2DPolyPolygon polyPolygon( ::basegfx::B2DPolygon( ::basegfx::tools::createPolygonFromEllipse( mappedCenter, mappedSize.getX (), mappedSize.getY () ) ) );
 
-                            EMFPPlusFillPolygon( polyPolygon,
-                                                 rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor );
+                            if ( type == EmfPlusRecordTypeFillEllipse )
+                                EMFPPlusFillPolygon( polyPolygon,
+                                                     rFactoryParms, rState, rCanvas, flags & 0x8000, brushIndexOrColor );
+                            else
+                                EMFPPlusDrawPolygon( polyPolygon,
+                                                     rFactoryParms, rState, rCanvas, flags & 0xff );
                         }
                         break;
                     case EmfPlusRecordTypeFillRects:
@@ -1438,38 +1479,10 @@ namespace cppcanvas
                             EMFP_DEBUG (printf ("EMF+\tpen: %u\n", (unsigned int)penIndex));
 
                             EMFPPath* path = (EMFPPath*) aObjects [flags & 0xff];
-                            EMFPPen* pen = (EMFPPen*) aObjects [penIndex & 0xff];
-
-                            SAL_WARN_IF( !pen, "cppcanvas", "EmfPlusRecordTypeDrawPath missing pen" );
                             SAL_WARN_IF( !path, "cppcanvas", "EmfPlusRecordTypeDrawPath missing path" );
 
-                            if (pen && path)
-                            {
-                                rState.isFillColorSet = false;
-                                rState.isLineColorSet = true;
-                                rState.lineColor = ::vcl::unotools::colorToDoubleSequence (pen->GetColor (),
-                                                                                           rCanvas->getUNOCanvas ()->getDevice()->getDeviceColorSpace());
-                                ::basegfx::B2DPolyPolygon& polygon (path->GetPolygon (*this));
-
-                                polygon.transform( rState.mapModeTransform );
-                                rendering::StrokeAttributes aStrokeAttributes;
-
-                                pen->SetStrokeAttributes (aStrokeAttributes, *this, rState);
+                            EMFPPlusDrawPolygon (path->GetPolygon (*this), rFactoryParms, rState, rCanvas, penIndex);
 
-                                ActionSharedPtr pPolyAction(
-                                    internal::PolyPolyActionFactory::createPolyPolyAction(
-                                        polygon, rFactoryParms.mrCanvas, rState, aStrokeAttributes ) );
-
-                                if( pPolyAction )
-                                {
-                                    maActions.push_back(
-                                        MtfAction(
-                                            pPolyAction,
-                                            rFactoryParms.mrCurrActionIndex ) );
-
-                                    rFactoryParms.mrCurrActionIndex += pPolyAction->getActionCount()-1;
-                                }
-                            }
                             break;
                         }
                     case EmfPlusRecordTypeDrawImage:


More information about the Libreoffice-commits mailing list