diff options
author | Andre Fischer <af@openoffice.org> | 2010-07-01 14:05:39 +0200 |
---|---|---|
committer | Andre Fischer <af@openoffice.org> | 2010-07-01 14:05:39 +0200 |
commit | f6708992a050b6b2b84d7783e52916161637dde8 (patch) | |
tree | 6ef35c8c9a7940c3ace008417596bb3dae0ee86d /canvas/source | |
parent | 7f0993d43019a0ccb7f89c11fc23704c063b902f (diff) |
impress193 #i112841# Prevent marquee text from crashing when too wide.
Diffstat (limited to 'canvas/source')
-rw-r--r-- | canvas/source/tools/pagemanager.cxx | 42 |
1 files changed, 24 insertions, 18 deletions
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; } } |