tdf#120216 improve svx table performance.
By defining operator== for SdrConnectStyleData and SdrFrameBorderData, and make a deeper comparison instead of the pointer stored shared_ptr in SdrFrameBorderPrimitive2D. The SdrFrameBorderPrimitive2D::operator== always return false before. The response time of clicking a cell and then entering editing mode improved from 4s to 0.5s in my environment. Change-Id: I625d9f69a07f42cac4a6cba45ec9e1c4195b6d58 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90120 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -54,6 +54,7 @@ namespace drawinglayer
|
||||
const svx::frame::Style& getStyle() const { return maStyle; }
|
||||
const basegfx::B2DVector& getNormalizedPerpendicular() const { return maNormalizedPerpendicular; }
|
||||
bool getStyleMirrored() const { return mbStyleMirrored; }
|
||||
bool operator==(const SdrConnectStyleData& rCompare) const;
|
||||
};
|
||||
|
||||
std::vector<SdrConnectStyleData> maStart;
|
||||
@@ -77,6 +78,7 @@ namespace drawinglayer
|
||||
double fMinDiscreteUnit) const;
|
||||
|
||||
double getMinimalNonZeroBorderWidth() const;
|
||||
bool operator==(const SdrFrameBorderData& rCompare) const;
|
||||
};
|
||||
|
||||
typedef std::vector<SdrFrameBorderData> SdrFrameBorderDataVector;
|
||||
|
||||
@@ -654,6 +654,13 @@ namespace drawinglayer::primitive2d
|
||||
{
|
||||
}
|
||||
|
||||
bool SdrFrameBorderData::SdrConnectStyleData::operator==(const SdrFrameBorderData::SdrConnectStyleData& rCompare) const
|
||||
{
|
||||
return mbStyleMirrored == rCompare.mbStyleMirrored
|
||||
&& maStyle == rCompare.maStyle
|
||||
&& maNormalizedPerpendicular == rCompare.maNormalizedPerpendicular;
|
||||
}
|
||||
|
||||
SdrFrameBorderData::SdrFrameBorderData(
|
||||
const basegfx::B2DPoint& rOrigin,
|
||||
const basegfx::B2DVector& rX,
|
||||
@@ -748,6 +755,16 @@ namespace drawinglayer::primitive2d
|
||||
}
|
||||
|
||||
|
||||
bool SdrFrameBorderData::operator==(const SdrFrameBorderData& rCompare) const
|
||||
{
|
||||
return maOrigin == rCompare.maOrigin
|
||||
&& maX == rCompare.maX
|
||||
&& maStyle == rCompare.maStyle
|
||||
&& maColor == rCompare.maColor
|
||||
&& mbForceColor == rCompare.mbForceColor
|
||||
&& maStart == rCompare.maStart
|
||||
&& maEnd == rCompare.maEnd;
|
||||
}
|
||||
|
||||
|
||||
void SdrFrameBorderPrimitive2D::create2DDecomposition(
|
||||
@@ -860,7 +877,9 @@ namespace drawinglayer::primitive2d
|
||||
{
|
||||
const SdrFrameBorderPrimitive2D& rCompare = static_cast<const SdrFrameBorderPrimitive2D&>(rPrimitive);
|
||||
|
||||
return getFrameBorders() == rCompare.getFrameBorders()
|
||||
return (getFrameBorders() == rCompare.getFrameBorders()
|
||||
|| (getFrameBorders() && rCompare.getFrameBorders()
|
||||
&& *getFrameBorders() == *rCompare.getFrameBorders()))
|
||||
&& doForceToSingleDiscreteUnit() == rCompare.doForceToSingleDiscreteUnit();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user