diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2021-04-19 21:37:53 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2021-04-20 09:31:38 +0200 |
commit | eec03e848cb6874ce6d64dc0b8f45dbaf52e6c2b (patch) | |
tree | 76049007161f5a1a66f2a3a242bc4e126791004f | |
parent | 4cb71fefc61d9015a0142f3a4fdafc5250913f2c (diff) |
tdf#86321: Revert "Resolves: #i123539# some optimizations for 3D chart..."
This reverts commit db1d2af02861b49e4f53d726d59cd71c20cee9b1
The commit was already partically reverted in
bca8d8985666d3fd22b91eb280f9baaeb933c2d0 < Resolves: tdf#90583
3D pie-chart missing guide handles >.
This partial revert broke the optimization introduced in
db1d2af02861b49e4f53d726d59cd71c20cee9b1 <Resolves: #i123539#
some optimizations for 3D chart...> for 3D charts like
https://bz.apache.org/ooo/attachment.cgi?id=81810
Later, 3D charts were optimized again in
55a7e836a2db662a53adc4f8b98d08b06790c758 < chart2: When
creating objects prevent setting object rects dirty > so
the remaining code originally introduced can go.
Import time of https://bz.apache.org/ooo/attachment.cgi?id=81810
is the same with and without this patch
Change-Id: I25338d0dfb4b41651dfe05e7bfbd74c86091dacb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114313
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx | 6 | ||||
-rw-r--r-- | svx/source/sdr/contact/viewcontactofsdrole2obj.cxx | 76 | ||||
-rw-r--r-- | svx/source/unodraw/unoshape.cxx | 10 |
3 files changed, 25 insertions, 67 deletions
diff --git a/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx b/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx index ac7a861e924f..f034f02a6da5 100644 --- a/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx +++ b/svx/inc/sdr/contact/viewcontactofsdrole2obj.hxx @@ -31,9 +31,6 @@ namespace sdr::contact class ViewContactOfSdrOle2Obj final : public ViewContactOfSdrRectObj { private: - // #i123539# allow local buffering of chart data (if chart) - drawinglayer::primitive2d::Primitive2DReference mxChartContent; - // Create an Object-Specific ViewObjectContact, set ViewContact and // ObjectContact. Always needs to return something. virtual ViewObjectContact& @@ -56,9 +53,6 @@ public: // from the VOC which knows that drawinglayer::primitive2d::Primitive2DContainer createPrimitive2DSequenceWithParameters() const; - // #i123539# get rid of buffered chart content (if there) on change - virtual void ActionChanged() override; - virtual basegfx::B2DRange getRange(const drawinglayer::geometry::ViewInformation2D& rViewInfo2D) const override; diff --git a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx index db65802718c3..0c53ef5a4499 100644 --- a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx +++ b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx @@ -45,8 +45,7 @@ ViewObjectContact& ViewContactOfSdrOle2Obj::CreateObjectSpecificViewObjectContac } ViewContactOfSdrOle2Obj::ViewContactOfSdrOle2Obj(SdrOle2Obj& rOle2Obj) -: ViewContactOfSdrRectObj(rOle2Obj), - mxChartContent() +: ViewContactOfSdrRectObj(rOle2Obj) { } @@ -90,45 +89,30 @@ drawinglayer::primitive2d::Primitive2DContainer ViewContactOfSdrOle2Obj::createP if(GetOle2Obj().IsChart()) { - // #i123539# allow buffering and reuse of local chart data to not need to rebuild it - // on every ViewObjectContact::getPrimitive2DSequence call. TTTT: Not needed for - // aw080, there this mechanism already works differently - if(mxChartContent.is()) + // try to get chart primitives and chart range directly from xChartModel + basegfx::B2DRange aChartContentRange; + const drawinglayer::primitive2d::Primitive2DContainer aChartSequence( + ChartHelper::tryToGetChartContentAsPrimitive2DSequence( + GetOle2Obj().getXModel(), + aChartContentRange)); + const double fWidth(aChartContentRange.getWidth()); + const double fHeight(aChartContentRange.getHeight()); + + if(!aChartSequence.empty() + && basegfx::fTools::more(fWidth, 0.0) + && basegfx::fTools::more(fHeight, 0.0)) { - xContent = mxChartContent; - } - else - { - // try to get chart primitives and chart range directly from xChartModel - basegfx::B2DRange aChartContentRange; - const drawinglayer::primitive2d::Primitive2DContainer aChartSequence( - ChartHelper::tryToGetChartContentAsPrimitive2DSequence( - GetOle2Obj().getXModel(), - aChartContentRange)); - const double fWidth(aChartContentRange.getWidth()); - const double fHeight(aChartContentRange.getHeight()); - - if(!aChartSequence.empty() - && basegfx::fTools::more(fWidth, 0.0) - && basegfx::fTools::more(fHeight, 0.0)) - { - // create embedding transformation - basegfx::B2DHomMatrix aEmbed( - basegfx::utils::createTranslateB2DHomMatrix( - -aChartContentRange.getMinX(), - -aChartContentRange.getMinY())); - - aEmbed.scale(1.0 / fWidth, 1.0 / fHeight); - aEmbed = aObjectMatrix * aEmbed; - xContent = new drawinglayer::primitive2d::TransformPrimitive2D( - aEmbed, - aChartSequence); - } - - if(xContent.is()) - { - const_cast< ViewContactOfSdrOle2Obj* >(this)->mxChartContent = xContent; - } + // create embedding transformation + basegfx::B2DHomMatrix aEmbed( + basegfx::utils::createTranslateB2DHomMatrix( + -aChartContentRange.getMinX(), + -aChartContentRange.getMinY())); + + aEmbed.scale(1.0 / fWidth, 1.0 / fHeight); + aEmbed = aObjectMatrix * aEmbed; + xContent = new drawinglayer::primitive2d::TransformPrimitive2D( + aEmbed, + aChartSequence); } } @@ -185,18 +169,6 @@ basegfx::B2DRange ViewContactOfSdrOle2Obj::getRange( const drawinglayer::geometr return drawinglayer::primitive2d::getB2DRangeFromPrimitive2DReference(xReference, rViewInfo2D); } -void ViewContactOfSdrOle2Obj::ActionChanged() -{ - // call parent - ViewContactOfSdrRectObj::ActionChanged(); - - // #i123539# if we have buffered chart data, reset it - if(mxChartContent.is()) - { - mxChartContent.clear(); - } -} - drawinglayer::primitive2d::Primitive2DContainer ViewContactOfSdrOle2Obj::createViewIndependentPrimitive2DSequence() const { return createPrimitive2DSequenceWithParameters(); diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 33549e3c7978..3f933850fdf2 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -1197,15 +1197,7 @@ void SAL_CALL SvxShape::setSize( const awt::Size& rSize ) if(HasSdrObject()) { - // #i123539# optimization for 3D chart object generation: do not use UNO - // API commands to get the range, this is too expensive since for 3D - // scenes it may recalculate the whole scene since in AOO this depends - // on the contained geometry (layouted to show all content) - const bool b3DConstruction(dynamic_cast< E3dObject* >(GetSdrObject()) && GetSdrObject()->getSdrModelFromSdrObject().isLocked()); - tools::Rectangle aRect( - b3DConstruction ? - tools::Rectangle(maPosition.X, maPosition.Y, maSize.Width, maSize.Height) : - svx_getLogicRectHack(GetSdrObject()) ); + tools::Rectangle aRect( svx_getLogicRectHack(GetSdrObject()) ); Size aLocalSize( rSize.Width, rSize.Height ); ForceMetricToItemPoolMetric(aLocalSize); |