fdo#73300: sw: GraphicObjects are never swapped out

In SwNoTxtFrm::PaintPicture() the GraphicObjects are no longer painted
via GraphicObject::Draw() any more there is the problem that they are
not cached any more in the display cache of the GraphicManager; that
used to immediately swap out the Graphic but now they are never swapped
out.  Since there appears to be no use of the GraphicManager's display
cache in the new drawinglayer based rendering path i have no idea how to
swap out the Graphic immediately; instead use the same time-out that
SdrGrafObj is using already.

This timeout is derived from the setting:
Tools->Options->LibreOffice->Memory->Graphics cache->"Remove from memory
after".

(regression from 2e5167528f)

Change-Id: I0d9b535a82646d9b6635cfb3917f74dcc3ad8720
This commit is contained in:
Michael Stahl
2014-02-02 23:59:17 +01:00
parent e4be770ec8
commit 2d9d20edc9
2 changed files with 6 additions and 4 deletions

View File

@@ -71,7 +71,7 @@ using namespace ::com::sun::star::io;
// #i122985# it is not correct to set the swap-timeout to a hard-coded 5000ms as it was before.
// Added code and experimented what to do as a good compromize, see description
sal_uInt32 getCacheTimeInMs()
SVX_DLLPUBLIC sal_uInt32 getCacheTimeInMs()
{
static bool bSetAtAll(true);

View File

@@ -56,6 +56,8 @@
using namespace com::sun::star;
SVX_DLLPUBLIC sal_uInt32 getCacheTimeInMs();
SwGrfNode::SwGrfNode(
const SwNodeIndex & rWhere,
const OUString& rGrfName, const OUString& rFltName,
@@ -69,7 +71,7 @@ SwGrfNode::SwGrfNode(
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( sal_False )
{
maGrfObj.SetSwapStreamHdl( LINK( this, SwGrfNode, SwapGraphic ) );
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic), getCacheTimeInMs() );
bInSwapIn = bChgTwipSize = bChgTwipSizeFromPixel = bLoadLowResGrf =
bFrameInPaint = bScaleImageMap = sal_False;
@@ -87,7 +89,7 @@ SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( sal_False )
{
maGrfObj.SetSwapStreamHdl( LINK( this, SwGrfNode, SwapGraphic ) );
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic), getCacheTimeInMs() );
if( rGrfObj.HasUserData() && rGrfObj.IsSwappedOut() )
maGrfObj.SetSwapState();
bInSwapIn = bChgTwipSize = bChgTwipSizeFromPixel= bLoadLowResGrf =
@@ -112,7 +114,7 @@ SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
mbLinkedInputStreamReady( false ),
mbIsStreamReadOnly( sal_False )
{
maGrfObj.SetSwapStreamHdl( LINK( this, SwGrfNode, SwapGraphic ) );
maGrfObj.SetSwapStreamHdl( LINK(this, SwGrfNode, SwapGraphic), getCacheTimeInMs() );
Graphic aGrf; aGrf.SetDefaultType();
maGrfObj.SetGraphic( aGrf, rGrfName );