diff options
Diffstat (limited to 'cppcanvas/source/mtfrenderer/implrenderer.cxx')
-rw-r--r-- | cppcanvas/source/mtfrenderer/implrenderer.cxx | 74 |
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: */ |