From f6708992a050b6b2b84d7783e52916161637dde8 Mon Sep 17 00:00:00 2001 From: Andre Fischer Date: Thu, 1 Jul 2010 14:05:39 +0200 Subject: impress193 #i112841# Prevent marquee text from crashing when too wide. --- canvas/source/tools/pagemanager.cxx | 42 +++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 18 deletions(-) (limited to 'canvas') diff --git a/canvas/source/tools/pagemanager.cxx b/canvas/source/tools/pagemanager.cxx index b867b432857c..b2a71bf86cd3 100644 --- a/canvas/source/tools/pagemanager.cxx +++ b/canvas/source/tools/pagemanager.cxx @@ -70,7 +70,8 @@ namespace canvas { maPages.push_back(pPage); FragmentSharedPtr pFragment(pPage->allocateSpace(rSize)); - maFragments.push_back(pFragment); + if (pFragment) + maFragments.push_back(pFragment); return pFragment; } @@ -124,34 +125,39 @@ namespace canvas FragmentContainer_t::const_iterator candidate(maFragments.begin()); while(candidate != aEnd) { - if(!((*candidate)->isNaked())) + if(*candidate && !((*candidate)->isNaked())) break; ++candidate; } - const ::basegfx::B2ISize& rSize((*candidate)->getSize()); - sal_uInt32 nMaxArea(rSize.getX()*rSize.getY()); - - FragmentContainer_t::const_iterator it(candidate); - while(it != aEnd) + if (candidate != aEnd) { - if(!((*it)->isNaked())) + const ::basegfx::B2ISize& rSize((*candidate)->getSize()); + sal_uInt32 nMaxArea(rSize.getX()*rSize.getY()); + + FragmentContainer_t::const_iterator it(candidate); + while(it != aEnd) { - const ::basegfx::B2ISize& rCandidateSize((*it)->getSize()); - const sal_uInt32 nArea(rCandidateSize.getX()*rCandidateSize.getY()); - if(nArea > nMaxArea) + if (*it && !((*it)->isNaked())) { - candidate=it; - nMaxArea=nArea; + const ::basegfx::B2ISize& rCandidateSize((*it)->getSize()); + const sal_uInt32 nArea(rCandidateSize.getX()*rCandidateSize.getY()); + if(nArea > nMaxArea) + { + candidate=it; + nMaxArea=nArea; + } } + + ++it; } - ++it; + // this does not erase the candidate, + // but makes it 'naked'... + (*candidate)->free(*candidate); } - - // this does not erase the candidate, - // but makes it 'naked'... - (*candidate)->free(*candidate); + else + break; } } -- cgit