Kaydet (Commit) 720cea21 authored tarafından Daniel Robertson's avatar Daniel Robertson Kaydeden (comit) Thorsten Behrens

canvas: replace for_each with range-based for-loop

Replace ::std::for_each for a more readable range-based for loop in
cases in which the function object to be applied by for_each is more
readable as the body of a for loop.

Change-Id: I5ea0f6a464855b8cc8af38f211bb784dd91eca0d
Reviewed-on: https://gerrit.libreoffice.org/17775Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst 7e383cb5
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <sal/config.h> #include <sal/config.h>
#include <boost/bind.hpp>
#include <boost/cast.hpp> #include <boost/cast.hpp>
#include <basegfx/range/b2drectangle.hxx> #include <basegfx/range/b2drectangle.hxx>
...@@ -59,28 +58,6 @@ namespace dxcanvas ...@@ -59,28 +58,6 @@ namespace dxcanvas
::boost::polymorphic_downcast< Sprite* >( ::boost::polymorphic_downcast< Sprite* >(
rSprite.get() )->redraw(); rSprite.get() )->redraw();
} }
void spriteRedrawStub( const ::canvas::Sprite::Reference& rSprite )
{
if( rSprite.is() )
{
// downcast to derived dxcanvas::Sprite interface, which
// provides the actual redraw methods.
::boost::polymorphic_downcast< Sprite* >(
rSprite.get() )->redraw();
}
}
void spriteRedrawStub2( const ::canvas::SpriteRedrawManager::AreaComponent& rComponent )
{
if( rComponent.second.getSprite().is() )
{
// downcast to derived dxcanvas::Sprite interface, which
// provides the actual redraw methods.
::boost::polymorphic_downcast< Sprite* >(
rComponent.second.getSprite().get() )->redraw();
}
}
} }
SpriteCanvasHelper::SpriteCanvasHelper() : SpriteCanvasHelper::SpriteCanvasHelper() :
...@@ -273,9 +250,17 @@ namespace dxcanvas ...@@ -273,9 +250,17 @@ namespace dxcanvas
// the full sprite area, anyway. But at least optimized in the // the full sprite area, anyway. But at least optimized in the
// sense that unnecessary background paints behind the sprites // sense that unnecessary background paints behind the sprites
// are avoided. // are avoided.
::std::for_each( rUpdateArea.maComponentList.begin(), for( const auto& rComponent : rUpdateArea.maComponentList )
rUpdateArea.maComponentList.end(), {
&spriteRedrawStub2 ); const ::canvas::Sprite::Reference& rSprite( rComponent.second.getSprite() );
if( rSprite.is() )
{
// downcast to derived dxcanvas::Sprite interface, which
// provides the actual redraw methods.
::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw();
}
}
// repaint uncovered areas from backbuffer - take the // repaint uncovered areas from backbuffer - take the
// _rounded_ rectangles from above, to have the update // _rounded_ rectangles from above, to have the update
...@@ -284,12 +269,8 @@ namespace dxcanvas ...@@ -284,12 +269,8 @@ namespace dxcanvas
::basegfx::computeSetDifference( aUncoveredAreas, ::basegfx::computeSetDifference( aUncoveredAreas,
rUpdateArea.maTotalBounds, rUpdateArea.maTotalBounds,
::basegfx::B2DRange( rDestRect ) ); ::basegfx::B2DRange( rDestRect ) );
::std::for_each( aUncoveredAreas.begin(), for( const auto& rUpdateArea : aUncoveredAreas )
aUncoveredAreas.end(), repaintBackground( rUpdateArea, maScrapRect, mpBackBuffer );
::boost::bind( &repaintBackground,
_1,
::boost::cref(maScrapRect),
::boost::cref(mpBackBuffer) ) );
// TODO(E1): Use numeric_cast to catch overflow here // TODO(E1): Use numeric_cast to catch overflow here
::basegfx::B2IRange aActualArea( 0, 0, ::basegfx::B2IRange aActualArea( 0, 0,
...@@ -311,9 +292,15 @@ namespace dxcanvas ...@@ -311,9 +292,15 @@ namespace dxcanvas
// TODO(P2): optimize this by truly rendering to the front // TODO(P2): optimize this by truly rendering to the front
// buffer. Currently, we've the 3D device only for the back // buffer. Currently, we've the 3D device only for the back
// buffer. // buffer.
::std::for_each( rSortedUpdateSprites.begin(), for( const auto& rSprite : rSortedUpdateSprites )
rSortedUpdateSprites.end(), {
&spriteRedrawStub ); if( rSprite.is() )
{
// downcast to derived dxcanvas::Sprite interface, which
// provides the actual redraw methods.
::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw();
}
}
// TODO(E1): Use numeric_cast to catch overflow here // TODO(E1): Use numeric_cast to catch overflow here
::basegfx::B2IRange aActualArea( 0, 0, ::basegfx::B2IRange aActualArea( 0, 0,
...@@ -347,9 +334,15 @@ namespace dxcanvas ...@@ -347,9 +334,15 @@ namespace dxcanvas
// paint sprite // paint sprite
// ============ // ============
::std::for_each( rSortedUpdateSprites.begin(), for( const auto& rSprite : rSortedUpdateSprites )
rSortedUpdateSprites.end(), {
&spriteRedrawStub ); if( rSprite.is() )
{
// downcast to derived dxcanvas::Sprite interface, which
// provides the actual redraw methods.
::boost::polymorphic_downcast< Sprite* >( rSprite.get() )->redraw();
}
}
// add given update area to the 'blit to foreground' rect // add given update area to the 'blit to foreground' rect
maUpdateRect.expand( aActualArea ); maUpdateRect.expand( aActualArea );
......
...@@ -800,9 +800,8 @@ namespace oglcanvas ...@@ -800,9 +800,8 @@ namespace oglcanvas
} }
// own copy, for thread safety // own copy, for thread safety
std::for_each(rAct.maPolyPolys.begin(), for( auto& rPoly : rAct.maPolyPolys )
rAct.maPolyPolys.end(), rPoly.makeUnique();
::boost::mem_fn(&::basegfx::B2DPolyPolygon::makeUnique));
rAct.maFunction = &lcl_fillPolyPolygon; rAct.maFunction = &lcl_fillPolyPolygon;
} }
......
...@@ -293,9 +293,8 @@ namespace oglcanvas ...@@ -293,9 +293,8 @@ namespace oglcanvas
std::sort(aSprites.begin(), std::sort(aSprites.begin(),
aSprites.end(), aSprites.end(),
SpriteComparator()); SpriteComparator());
std::for_each(aSprites.begin(), for( const auto& rSprite : aSprites )
aSprites.end(), rSprite->renderSprite();
std::mem_fn(&CanvasCustomSprite::renderSprite));
// frame counter, other info // frame counter, other info
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <sal/config.h> #include <sal/config.h>
#include <boost/bind.hpp>
#include <boost/cast.hpp> #include <boost/cast.hpp>
#include <basegfx/range/b2drectangle.hxx> #include <basegfx/range/b2drectangle.hxx>
...@@ -99,63 +98,6 @@ namespace vclcanvas ...@@ -99,63 +98,6 @@ namespace vclcanvas
// frontbuffer // frontbuffer
} }
/** Repaint sprite at original position
Used for opaque updates, which render directly to the
front buffer.
*/
void spriteRedrawStub( OutputDevice& rOutDev,
const ::canvas::Sprite::Reference& rSprite )
{
if( rSprite.is() )
{
::boost::polymorphic_downcast< Sprite* >(
rSprite.get() )->redraw( rOutDev,
false );
}
}
/** Repaint sprite at given position
Used for generic update, which renders into vdev of
adapted size.
*/
void spriteRedrawStub2( OutputDevice& rOutDev,
const ::basegfx::B2DPoint& rOutPos,
const ::canvas::Sprite::Reference& rSprite )
{
if( rSprite.is() )
{
Sprite* pSprite = ::boost::polymorphic_downcast< Sprite* >(
rSprite.get() );
// calc relative sprite position in rUpdateArea (which
// need not be the whole screen!)
const ::basegfx::B2DPoint& rSpriteScreenPos( pSprite->getPosPixel() );
const ::basegfx::B2DPoint& rSpriteRenderPos( rSpriteScreenPos - rOutPos );
pSprite->redraw( rOutDev, rSpriteRenderPos, true );
}
}
/** Repaint sprite at original position
Used for opaque updates from scrollUpdate(), which render
directly to the front buffer.
*/
void spriteRedrawStub3( OutputDevice& rOutDev,
const ::canvas::SpriteRedrawManager::AreaComponent& rComponent )
{
const ::canvas::Sprite::Reference& rSprite( rComponent.second.getSprite() );
if( rSprite.is() )
{
::boost::polymorphic_downcast< Sprite* >(
rSprite.get() )->redraw( rOutDev,
false );
}
}
void renderInfoText( OutputDevice& rOutDev, void renderInfoText( OutputDevice& rOutDev,
const OUString& rStr, const OUString& rStr,
const Point& rPos ) const Point& rPos )
...@@ -320,11 +262,11 @@ namespace vclcanvas ...@@ -320,11 +262,11 @@ namespace vclcanvas
// repaint all active sprites on top of background into // repaint all active sprites on top of background into
// VDev. // VDev.
OutputDevice& rTmpOutDev( *maVDev.get() );
mpRedrawManager->forEachSprite( mpRedrawManager->forEachSprite(
::boost::bind( [&rTmpOutDev]( const ::canvas::Sprite::Reference& rSprite )
&spriteRedraw, { spriteRedraw( rTmpOutDev, rSprite ); }
::boost::ref( *maVDev.get() ), );
_1 ) );
// flush to screen // flush to screen
rOutDev.EnableMapMode( false ); rOutDev.EnableMapMode( false );
...@@ -433,12 +375,15 @@ namespace vclcanvas ...@@ -433,12 +375,15 @@ namespace vclcanvas
// opaque sprite content) // opaque sprite content)
// repaint all affected sprites directly to output device // repaint all affected sprites directly to output device
::std::for_each( rUpdateArea.maComponentList.begin(), for( const auto rComponent : rUpdateArea.maComponentList )
rUpdateArea.maComponentList.end(), {
::boost::bind( const ::canvas::Sprite::Reference& rSprite( rComponent.second.getSprite() );
&spriteRedrawStub3,
::boost::ref( rOutDev ), if( rSprite.is() )
_1 ) ); ::boost::polymorphic_downcast< Sprite* >(
rSprite.get() )->redraw( rOutDev,
false );
}
} }
else else
{ {
...@@ -459,12 +404,11 @@ namespace vclcanvas ...@@ -459,12 +404,11 @@ namespace vclcanvas
// clip here, since we're only repainting _parts_ of the // clip here, since we're only repainting _parts_ of the
// sprite // sprite
rOutDev.Push( PushFlags::CLIPREGION ); rOutDev.Push( PushFlags::CLIPREGION );
::std::for_each( aUnscrollableAreas.begin(),
aUnscrollableAreas.end(), for( const auto& rArea : aUnscrollableAreas )
::boost::bind( &opaqueUpdateSpriteArea, opaqueUpdateSpriteArea( aFirst->second.getSprite(),
::boost::cref(aFirst->second.getSprite()), rOutDev, rArea );
::boost::ref(rOutDev),
_1 ) );
rOutDev.Pop(); rOutDev.Pop();
} }
...@@ -475,12 +419,9 @@ namespace vclcanvas ...@@ -475,12 +419,9 @@ namespace vclcanvas
::basegfx::computeSetDifference( aUncoveredAreas, ::basegfx::computeSetDifference( aUncoveredAreas,
rUpdateArea.maTotalBounds, rUpdateArea.maTotalBounds,
::basegfx::B2DRange( rDestRect ) ); ::basegfx::B2DRange( rDestRect ) );
::std::for_each( aUncoveredAreas.begin(),
aUncoveredAreas.end(), for( const auto& rArea : aUncoveredAreas )
::boost::bind( &repaintBackground, repaintBackground( rOutDev, rBackOutDev, rArea );
::boost::ref(rOutDev),
::boost::ref(rBackOutDev),
_1 ) );
} }
void SpriteCanvasHelper::opaqueUpdate( SAL_UNUSED_PARAMETER const ::basegfx::B2DRange&, void SpriteCanvasHelper::opaqueUpdate( SAL_UNUSED_PARAMETER const ::basegfx::B2DRange&,
...@@ -501,12 +442,13 @@ namespace vclcanvas ...@@ -501,12 +442,13 @@ namespace vclcanvas
// and the update will be constrained to that rect. // and the update will be constrained to that rect.
// repaint all affected sprites directly to output device // repaint all affected sprites directly to output device
::std::for_each( rSortedUpdateSprites.begin(), for( const auto& rSprite : rSortedUpdateSprites )
rSortedUpdateSprites.end(), {
::boost::bind( if( rSprite.is() )
&spriteRedrawStub, ::boost::polymorphic_downcast< Sprite* >(
::boost::ref( rOutDev ), rSprite.get() )->redraw( rOutDev,
_1 ) ); false );
}
} }
void SpriteCanvasHelper::genericUpdate( const ::basegfx::B2DRange& rRequestedArea, void SpriteCanvasHelper::genericUpdate( const ::basegfx::B2DRange& rRequestedArea,
...@@ -578,13 +520,22 @@ namespace vclcanvas ...@@ -578,13 +520,22 @@ namespace vclcanvas
// repaint all affected sprites on top of background into // repaint all affected sprites on top of background into
// VDev. // VDev.
::std::for_each( rSortedUpdateSprites.begin(), for( const auto& rSprite : rSortedUpdateSprites )
rSortedUpdateSprites.end(), {
::boost::bind( &spriteRedrawStub2, if( rSprite.is() )
::boost::ref( *maVDev.get() ), {
vcl::unotools::b2DPointFromPoint( Sprite* pSprite = ::boost::polymorphic_downcast< Sprite* >( rSprite.get() );
aOutputPosition),
_1 ) ); // calc relative sprite position in rUpdateArea (which
// need not be the whole screen!)
const ::basegfx::B2DPoint& rSpriteScreenPos( pSprite->getPosPixel() );
const ::basegfx::B2DPoint& rSpriteRenderPos(
rSpriteScreenPos - vcl::unotools::b2DPointFromPoint(aOutputPosition)
);
pSprite->redraw( *maVDev.get(), rSpriteRenderPos, true );
}
}
// flush to screen // flush to screen
rOutDev.EnableMapMode( false ); rOutDev.EnableMapMode( false );
...@@ -673,11 +624,10 @@ namespace vclcanvas ...@@ -673,11 +624,10 @@ namespace vclcanvas
double nPixel(0.0); double nPixel(0.0);
// accumulate pixel count for each sprite into fCount // accumulate pixel count for each sprite into fCount
mpRedrawManager->forEachSprite( ::boost::bind( mpRedrawManager->forEachSprite(
makeAdder(nPixel,1.0), [&nPixel]( const ::canvas::Sprite::Reference& rSprite )
::boost::bind( { makeAdder( nPixel, 1.0 )( calcNumPixel(rSprite) ); }
&calcNumPixel, );
_1 ) ) );
static const int NUM_VIRDEV(2); static const int NUM_VIRDEV(2);
static const int BYTES_PER_PIXEL(3); static const int BYTES_PER_PIXEL(3);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment