Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi Stephan,

I am unable to reproduce it here. Do you have some other way to
reproduce it other then make check?

I am attaching updated patch with fixed loop. Please could you try it?

Cheers
Radek

On Wed, 2012-01-25 at 10:42 +0100, Stephan Bergmann wrote:
One thing I did notice with the first hunk of your patch is that it 
moved "pAction = NextAction();" outside the for loop -- but that looks 
irrelevant to the problem at hand, as ImplPlayWithRenderer appears to 
always return true in the newly introduced if here.

Also, forms_unoapi now triggers lots of

warn:legacy.osl:10979:9:/data/lo/core/cppcanvas/source/mtfrenderer/implrenderer.cxx:2715: 
Unknown meta action type encountered

from within ImplPlayWithRenderer and at least once triggers that 
function's catch (RuntimeException) block with an exception with message

basegfx::B2DPolyPolygon cppcanvas::tools::createTextLinesPolyPolygon(basegfx::B2DPoint, const 
double&, const cppcanvas::tools::TextLineInfo&),
::cppcanvas::internal::createTextLinesPolyPolygon(): Unexpected strikeout case

-- anomalies the original code did not exhibit.

Stephan


diff --git a/vcl/source/gdi/gdimtf.cxx b/vcl/source/gdi/gdimtf.cxx
index e9ac49e..1f7a670 100644
--- a/vcl/source/gdi/gdimtf.cxx
+++ b/vcl/source/gdi/gdimtf.cxx
@@ -406,29 +406,31 @@ void GDIMetaFile::Play( OutputDevice* pOut, size_t nPos )
         pOut->SetLayoutMode( 0 );
         pOut->SetDigitLanguage( 0 );
 
-        for( size_t nCurPos = nCurrentActionElement; nCurPos < nPos; nCurPos++ )
-        {
-            if( !Hook() )
+        OSL_TRACE("GDIMetaFile::Play on device of size: %d x %d", 
pOut->GetOutputSizePixel().Width(), pOut->GetOutputSizePixel().Height());
+        if( !ImplPlayWithRenderer( pOut, Point(0,0), pOut->GetOutputSizePixel() ) ) {
+            for( size_t nCurPos = nCurrentActionElement; nCurPos < nPos; nCurPos++ )
             {
-                MetaCommentAction* pCommentAct = static_cast<MetaCommentAction*>(pAction);
-                if( pAction->GetType() == META_COMMENT_ACTION &&
-                    
pCommentAct->GetComment().equalsL(RTL_CONSTASCII_STRINGPARAM("DELEGATE_PLUGGABLE_RENDERER")) )
-                {
-                    ImplDelegate2PluggableRenderer(pCommentAct, pOut);
-                }
-                else
+                if( !Hook() )
                 {
-                    pAction->Execute( pOut );
+                    MetaCommentAction* pCommentAct = static_cast<MetaCommentAction*>(pAction);
+                    if( pAction->GetType() == META_COMMENT_ACTION &&
+                        
pCommentAct->GetComment().equalsL(RTL_CONSTASCII_STRINGPARAM("DELEGATE_PLUGGABLE_RENDERER")) )
+                    {
+                        ImplDelegate2PluggableRenderer(pCommentAct, pOut);
+                    }
+                    else
+                    {
+                        pAction->Execute( pOut );
+                    }
+
+                    // flush output from time to time
+                    if( i++ > nSyncCount )
+                        ( (Window*) pOut )->Flush(), i = 0;
                 }
 
-                // flush output from time to time
-                if( i++ > nSyncCount )
-                    ( (Window*) pOut )->Flush(), i = 0;
+                pAction = NextAction();
             }
-
-            pAction = NextAction();
         }
-
         pOut->Pop();
     }
 }
@@ -608,7 +610,7 @@ void GDIMetaFile::Play( OutputDevice* pOut, const Point& rPos,
     {
         GDIMetaFile*    pMtf = pOut->GetConnectMetaFile();
 
-        if( bUseCanvas && !pMtf && ImplPlayWithRenderer( pOut, rPos, aDestSize ) )
+        if( bUseCanvas && ImplPlayWithRenderer( pOut, rPos, aDestSize ) )
             return;
 
         Size aTmpPrefSize( pOut->LogicToPixel( GetPrefSize(), aDrawMap ) );

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.