include/svx/svdobj.hxx | 5 +++++ sd/source/core/sdpage2.cxx | 6 +++++- svx/source/svdraw/svdotextdecomposition.cxx | 28 ++++++++++++++++++++++------ 3 files changed, 32 insertions(+), 7 deletions(-)
New commits: commit b12b1663d135f94eb56f3c1f852ef008e87c4e5f Author: Luboš Luňák <[email protected]> AuthorDate: Fri Oct 9 18:10:50 2020 +0200 Commit: Luboš Luňák <[email protected]> CommitDate: Fri Oct 16 10:11:38 2020 +0200 try to prefetch also graphics for background fill bitmap Change-Id: Ib6be487500e45ab984b7ca63d85352696d9d4051 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104132 Tested-by: Jenkins Reviewed-by: Luboš Luňák <[email protected]> diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index de4ebc3f9b4f..cb98d67a2891 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -74,6 +74,7 @@ class SdrGluePointList; class SdrLayerIDSet; class Fraction; enum class PointerStyle; +class Graphic; namespace basegfx { @@ -917,6 +918,8 @@ public: const css::uno::WeakReference< css::uno::XInterface >& getWeakUnoShape() const { return maWeakUnoShape; } void setSuitableOutlinerBg(Outliner& rOutliner) const; + // If fillstyle is drawing::FillStyle_BITMAP, returns the graphic. + const Graphic* getFillGraphic() const; protected: tools::Rectangle aOutRect; // surrounding rectangle for Paint (incl. LineWidth, ...) @@ -995,6 +998,8 @@ protected: // helper function for reimplementing Clone(). template< typename T > T* CloneHelper(SdrModel& rTargetModel) const; + const SfxItemSet* getBackgroundFillSet() const; + private: struct Impl; std::unique_ptr<Impl> mpImpl; diff --git a/sd/source/core/sdpage2.cxx b/sd/source/core/sdpage2.cxx index 089712ab2693..142b40a6bb25 100644 --- a/sd/source/core/sdpage2.cxx +++ b/sd/source/core/sdpage2.cxx @@ -614,9 +614,13 @@ void SdPage::getGraphicsForPrefetch(std::vector<Graphic*>& graphics) const { for( size_t i = 0; i < GetObjCount(); ++i) { - if( SdrGrafObj* grafObj = dynamic_cast<SdrGrafObj*>(GetObj(i))) + SdrObject* obj = GetObj(i); + if( SdrGrafObj* grafObj = dynamic_cast<SdrGrafObj*>(obj)) if(!grafObj->GetGraphic().isAvailable()) graphics.push_back( const_cast<Graphic*>(&grafObj->GetGraphic())); + if( const Graphic* fillGraphic = obj->getFillGraphic()) + if(!fillGraphic->isAvailable()) + graphics.push_back( const_cast<Graphic*>(fillGraphic)); } } diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index 499585c7f5f5..1650ffa71fab 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -30,6 +30,7 @@ #include <svx/sdtaiitm.hxx> #include <svx/sdtaaitm.hxx> #include <svx/xfillit0.hxx> +#include <svx/xbtmpit.hxx> #include <basegfx/vector/b2dvector.hxx> #include <sdr/primitive2d/sdrtextprimitive2d.hxx> #include <drawinglayer/primitive2d/textprimitive2d.hxx> @@ -860,6 +861,17 @@ void SdrTextObj::impDecomposeAutoFitTextPrimitive( // Resolves: fdo#35779 set background color of this shape as the editeng background if there // is one. Check the shape itself, then the host page, then that page's master page. void SdrObject::setSuitableOutlinerBg(::Outliner& rOutliner) const +{ + const SfxItemSet* pBackgroundFillSet = getBackgroundFillSet(); + if (drawing::FillStyle_NONE != pBackgroundFillSet->Get(XATTR_FILLSTYLE).GetValue()) + { + Color aColor(rOutliner.GetBackgroundColor()); + GetDraftFillColor(*pBackgroundFillSet, aColor); + rOutliner.SetBackgroundColor(aColor); + } +} + +const SfxItemSet* SdrObject::getBackgroundFillSet() const { const SfxItemSet* pBackgroundFillSet = &GetObjectItemSet(); @@ -879,13 +891,17 @@ void SdrObject::setSuitableOutlinerBg(::Outliner& rOutliner) const } } } + return pBackgroundFillSet; +} - if (drawing::FillStyle_NONE != pBackgroundFillSet->Get(XATTR_FILLSTYLE).GetValue()) - { - Color aColor(rOutliner.GetBackgroundColor()); - GetDraftFillColor(*pBackgroundFillSet, aColor); - rOutliner.SetBackgroundColor(aColor); - } +const Graphic* SdrObject::getFillGraphic() const +{ + if(IsGroupObject()) // Doesn't make sense, and GetObjectItemSet() asserts. + return nullptr; + const SfxItemSet* pBackgroundFillSet = getBackgroundFillSet(); + if (drawing::FillStyle_BITMAP != pBackgroundFillSet->Get(XATTR_FILLSTYLE).GetValue()) + return nullptr; + return &pBackgroundFillSet->Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic(); } void SdrTextObj::impDecomposeBlockTextPrimitive( _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
