summaryrefslogtreecommitdiff
path: root/cppcanvas/source/mtfrenderer/implrenderer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cppcanvas/source/mtfrenderer/implrenderer.cxx')
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx74
1 files changed, 59 insertions, 15 deletions
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index e8a6468611f7..f9a72f21194e 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -1,3 +1,4 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -32,7 +33,7 @@
#include <tools/diagnose_ex.h>
#include <canvas/verbosetrace.hxx>
#include <osl/mutex.hxx>
-#include <vos/mutex.hxx>
+#include <osl/mutex.hxx>
#include <vcl/svapp.hxx>
#include <rtl/logfile.hxx>
#include <comphelper/sequence.hxx>
@@ -43,6 +44,7 @@
#include <com/sun/star/rendering/TexturingMode.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/geometry/RealPoint2D.hpp>
+#include <com/sun/star/rendering/PanoseProportion.hpp>
#include <com/sun/star/rendering/ViewState.hpp>
#include <com/sun/star/rendering/RenderState.hpp>
#include <com/sun/star/rendering/XCanvasFont.hpp>
@@ -92,6 +94,8 @@
#include "outdevstate.hxx"
#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#define EMFP_DEBUG(x)
+//#define EMFP_DEBUG(x) x
using namespace ::com::sun::star;
@@ -677,7 +681,7 @@ namespace cppcanvas
// map odf to svg gradient orientation - x
// instead of y direction
aGradInfo.maTextureTransform = aGradInfo.maTextureTransform * aRot90;
- aGradientService = rtl::OUString::createFromAscii("LinearGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LinearGradient"));
break;
case GRADIENT_AXIAL:
@@ -710,7 +714,7 @@ namespace cppcanvas
aShift.translate(-0.5,0);
aGradInfo.maTextureTransform = aGradInfo.maTextureTransform * aShift;
- aGradientService = rtl::OUString::createFromAscii("LinearGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LinearGradient"));
break;
}
@@ -720,7 +724,7 @@ namespace cppcanvas
aOffset,
nSteps,
fBorder);
- aGradientService = rtl::OUString::createFromAscii("EllipticalGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EllipticalGradient"));
break;
case GRADIENT_ELLIPTICAL:
@@ -730,7 +734,7 @@ namespace cppcanvas
nSteps,
fBorder,
fRotation);
- aGradientService = rtl::OUString::createFromAscii("EllipticalGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EllipticalGradient"));
break;
case GRADIENT_SQUARE:
@@ -740,7 +744,7 @@ namespace cppcanvas
nSteps,
fBorder,
fRotation);
- aGradientService = rtl::OUString::createFromAscii("RectangularGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RectangularGradient"));
break;
case GRADIENT_RECT:
@@ -750,7 +754,7 @@ namespace cppcanvas
nSteps,
fBorder,
fRotation);
- aGradientService = rtl::OUString::createFromAscii("RectangularGradient");
+ aGradientService = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RectangularGradient"));
break;
default:
@@ -773,13 +777,13 @@ namespace cppcanvas
uno::Sequence<uno::Any> args(3);
beans::PropertyValue aProp;
- aProp.Name = rtl::OUString::createFromAscii("Colors");
+ aProp.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Colors"));
aProp.Value <<= aColors;
args[0] <<= aProp;
- aProp.Name = rtl::OUString::createFromAscii("Stops");
+ aProp.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Stops"));
aProp.Value <<= aStops;
args[1] <<= aProp;
- aProp.Name = rtl::OUString::createFromAscii("AspectRatio");
+ aProp.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AspectRatio"));
aProp.Value <<= aGradInfo.mfAspectRatio;
args[2] <<= aProp;
@@ -863,6 +867,12 @@ namespace cppcanvas
rParms.mrParms.maFontLetterForm.is_initialized() ?
*rParms.mrParms.maFontLetterForm :
(rFont.GetItalic() == ITALIC_NONE) ? 0 : 9;
+ aFontRequest.FontDescription.FontDescription.Proportion =
+ rParms.mrParms.maFontProportion.isValid() ?
+ rParms.mrParms.maFontProportion.getValue() :
+ (rFont.GetPitch() == PITCH_FIXED)
+ ? rendering::PanoseProportion::MONO_SPACED
+ : rendering::PanoseProportion::ANYTHING;
LanguageType aLang = rFont.GetLanguage();
aFontRequest.Locale = MsLangId::convertLanguageToLocale(aLang, false);
@@ -1821,6 +1831,33 @@ namespace cppcanvas
}
}
}
+ // Handle drawing layer fills
+ else if( pAct->GetComment().Equals( "EMF_PLUS" ) ) {
+ static int count = -1, limit = 0x7fffffff;
+ if (count == -1) {
+ count = 0;
+ if (char *env = getenv ("EMF_PLUS_LIMIT")) {
+ limit = atoi (env);
+ EMFP_DEBUG (printf ("EMF+ records limit: %d\n", limit));
+ }
+ }
+ EMFP_DEBUG (printf ("EMF+ passed to canvas mtf renderer, size: %d\n", pAct->GetDataSize ()));
+ if (count < limit)
+ processEMFPlus( pAct, rFactoryParms, getState( rStates ), rCanvas );
+ count ++;
+ } else if( pAct->GetComment().Equals( "EMF_PLUS_HEADER_INFO" ) ) {
+ EMFP_DEBUG (printf ("EMF+ passed to canvas mtf renderer - header info, size: %d\n", pAct->GetDataSize ()));
+
+ SvMemoryStream rMF ((void*) pAct->GetData (), pAct->GetDataSize (), STREAM_READ);
+
+ rMF >> nFrameLeft >> nFrameTop >> nFrameRight >> nFrameBottom;
+ EMFP_DEBUG (printf ("EMF+ picture frame: %d,%d - %d,%d\n", nFrameLeft, nFrameTop, nFrameRight, nFrameBottom));
+ rMF >> nPixX >> nPixY >> nMmX >> nMmY;
+ EMFP_DEBUG (printf ("EMF+ ref device pixel size: %dx%d mm size: %dx%d\n", nPixX, nPixY, nMmX, nMmY));
+
+ rMF >> aBaseTransform;
+ //aWorldTransform.Set (aBaseTransform);
+ }
}
break;
@@ -1996,8 +2033,8 @@ namespace cppcanvas
::vcl::unotools::b2DPointFromPoint( rRect.TopLeft() ),
::vcl::unotools::b2DPointFromPoint( rRect.BottomRight() ) +
::basegfx::B2DPoint(1,1) ),
- static_cast<MetaRoundRectAction*>(pCurrAct)->GetHorzRound(),
- static_cast<MetaRoundRectAction*>(pCurrAct)->GetVertRound() ));
+ ( (double) static_cast<MetaRoundRectAction*>(pCurrAct)->GetHorzRound() ) / rRect.GetWidth(),
+ ( (double) static_cast<MetaRoundRectAction*>(pCurrAct)->GetVertRound() ) / rRect.GetHeight() ) );
aPoly.transform( getState( rStates ).mapModeTransform );
createFillAndStroke( aPoly,
@@ -2675,7 +2712,7 @@ namespace cppcanvas
{
}
- bool result()
+ bool result() const
{
return mbRet;
}
@@ -2710,7 +2747,7 @@ namespace cppcanvas
{
}
- bool result()
+ bool result() const
{
return true; // nothing can fail here
}
@@ -2980,7 +3017,8 @@ namespace cppcanvas
if( rParams.maFontName.is_initialized() ||
rParams.maFontWeight.is_initialized() ||
rParams.maFontLetterForm.is_initialized() ||
- rParams.maFontUnderline.is_initialized() )
+ rParams.maFontUnderline.is_initialized() ||
+ rParams.maFontProportion.is_initialized() )
{
::cppcanvas::internal::OutDevState& rState = getState( aStateStack );
@@ -2989,6 +3027,10 @@ namespace cppcanvas
aParms );
}
+ /* EMF+ */
+ memset (aObjects, 0, sizeof (aObjects));
+ mbMultipart = false;
+
createActions( const_cast<GDIMetaFile&>(rMtf), // HACK(Q2):
// we're
// changing
@@ -3166,3 +3208,5 @@ namespace cppcanvas
}
}
}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */