[Libreoffice-commits] core.git: include/svx svx/source sw/source
Armin Le Grand
Armin.Le.Grand at cib.de
Mon Sep 18 13:43:07 UTC 2017
include/svx/framelink.hxx | 82 ++++++-
svx/source/dialog/framelink.cxx | 315 +++++++++++++----------------
svx/source/dialog/framelinkarray.cxx | 78 ++++---
svx/source/table/viewcontactoftableobj.cxx | 20 +
sw/source/core/layout/paintfrm.cxx | 46 ++--
5 files changed, 301 insertions(+), 240 deletions(-)
New commits:
commit b86a3aa00dbaf94398cccfe3af312f123edc6093
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date: Mon Sep 18 12:31:45 2017 +0200
borderline: restuctured used classes
Restructuring for more efficcient usage of helper
values, some obstacles removed with that
Change-Id: Ia8c4b2d4c423db9500cda507107d87913b79e23c
Reviewed-on: https://gerrit.libreoffice.org/42409
Reviewed-by: Armin Le Grand <Armin.Le.Grand at cib.de>
Tested-by: Armin Le Grand <Armin.Le.Grand at cib.de>
diff --git a/include/svx/framelink.hxx b/include/svx/framelink.hxx
index 414f23aaaca7..771bc1e6dc7f 100644
--- a/include/svx/framelink.hxx
+++ b/include/svx/framelink.hxx
@@ -214,29 +214,87 @@ public:
inline bool operator>( const Style& rL, const Style& rR ) { return rR.operator<(rL); }
// Drawing functions
-
class SAL_WARN_UNUSED SVX_DLLPUBLIC StyleVectorCombination
{
private:
- const Style& mrStyle;
- const basegfx::B2DVector maB2DVector;
- const bool mbMirrored;
+ struct OffsetAndHalfWidthAndColor
+ {
+ double mfOffset;
+ double mfHalfWidth;
+ Color maColor;
+
+ OffsetAndHalfWidthAndColor(double offset, double halfWidth, Color color) :
+ mfOffset(offset),
+ mfHalfWidth(halfWidth),
+ maColor(color)
+ {}
+ };
+ double mfRefModeOffset;
+ basegfx::B2DVector maB2DVector;
+ std::vector< OffsetAndHalfWidthAndColor > maOffsets;
public:
- StyleVectorCombination(const Style& rStyle, const basegfx::B2DVector& rB2DVector, bool bMirrored) :
- mrStyle(rStyle),
- maB2DVector(rB2DVector),
- mbMirrored(bMirrored)
+ StyleVectorCombination(
+ const Style& rStyle,
+ const basegfx::B2DVector& rB2DVector,
+ bool bMirrored,
+ const Color* pForceColor = nullptr);
+
+ double getRefModeOffset() const { return mfRefModeOffset; }
+ const basegfx::B2DVector& getB2DVector() const { return maB2DVector; }
+
+ bool empty() const { return maOffsets.empty(); }
+ size_t size() const { return maOffsets.size(); }
+
+ void getColorAndOffsetAndHalfWidth(size_t nIndex, Color& rColor, double& rfOffset, double& rfHalfWidth) const
{
+ if(nIndex >= maOffsets.size())
+ return;
+ const OffsetAndHalfWidthAndColor& rCandidate(maOffsets[nIndex]);
+ rfOffset = rCandidate.mfOffset;
+ rfHalfWidth = rCandidate.mfHalfWidth;
+ rColor = rCandidate.maColor;
}
- const Style& getStyle() const { return mrStyle; }
- const basegfx::B2DVector& getB2DVector() const { return maB2DVector; }
- bool isMirrored() const { return mbMirrored; }
+ bool operator<(const StyleVectorCombination& rOther) const
+ {
+ return getB2DVector().cross(rOther.getB2DVector()) < 0.0;
+ }
};
-typedef std::vector< StyleVectorCombination > StyleVectorTable;
+class SAL_WARN_UNUSED SVX_DLLPUBLIC StyleVectorTable
+{
+private:
+ std::vector< StyleVectorCombination > maEntries;
+
+public:
+ StyleVectorTable()
+ : maEntries()
+ {
+ }
+
+ void add(
+ const Style& rStyle,
+ const basegfx::B2DVector& rMyVector,
+ const basegfx::B2DVector& rOtherVector,
+ bool bMirrored)
+ {
+ if(rStyle.IsUsed() && !basegfx::areParallel(rMyVector, rOtherVector))
+ {
+ maEntries.emplace_back(rStyle, rOtherVector, bMirrored);
+ }
+ }
+
+ void sort()
+ {
+ std::sort(maEntries.begin(), maEntries.end());
+ }
+
+ bool empty() const { return maEntries.empty(); }
+ size_t size() const { return maEntries.size(); }
+ const std::vector< StyleVectorCombination >& getEntries() const{ return maEntries; }
+};
SVX_DLLPUBLIC void CreateBorderPrimitives(
drawinglayer::primitive2d::Primitive2DContainer& rTarget, /// target for created primitives
diff --git a/svx/source/dialog/framelink.cxx b/svx/source/dialog/framelink.cxx
index e205560df33c..2c58e3c28528 100644
--- a/svx/source/dialog/framelink.cxx
+++ b/svx/source/dialog/framelink.cxx
@@ -338,19 +338,6 @@ bool Style::operator<( const Style& rOther) const
}
// Drawing functions
-struct OffsetAndHalfWidthAndColor
-{
- double mfOffset;
- double mfHalfWidth;
- Color maColor;
-
- OffsetAndHalfWidthAndColor(double offset, double halfWidth, Color color) :
- mfOffset(offset),
- mfHalfWidth(halfWidth),
- maColor(color)
- {}
-};
-
struct CutSet
{
double mfOLML;
@@ -367,108 +354,6 @@ struct ExtendSet
ExtendSet() : mfExtLeft(0.0), mfExtRight(0.0) {}
};
-double getOffsetAndHalfWidthAndColorFromStyle(
- const Style& rStyle,
- const Color* pForceColor,
- bool bMirrored,
- std::vector< OffsetAndHalfWidthAndColor >& offsets)
-{
- // do not forget RefMode offset, primitive is free of it
- double fRefModeOffset(0.0);
-
- if (rStyle.IsUsed())
- {
- RefMode aRefMode(rStyle.GetRefMode());
- Color aPrim(rStyle.GetColorPrim());
- Color aSecn(rStyle.GetColorSecn());
- double fPrim(rStyle.Prim());
- double fSecn(rStyle.Secn());
- const bool bSecnUsed(0.0 != fSecn);
-
- if(bMirrored)
- {
- switch(aRefMode)
- {
- case RefMode::Begin: aRefMode = RefMode::End; break;
- case RefMode::End: aRefMode = RefMode::Begin; break;
- default: break;
- }
-
- if(bSecnUsed)
- {
- std::swap(aPrim, aSecn);
- std::swap(fPrim, fSecn);
- }
- }
-
- if (RefMode::Centered != aRefMode)
- {
- const double fHalfWidth(rStyle.GetWidth() * 0.5);
-
- if (RefMode::Begin == aRefMode)
- {
- // move aligned below vector
- fRefModeOffset = fHalfWidth;
- }
- else if (RefMode::End == aRefMode)
- {
- // move aligned above vector
- fRefModeOffset = -fHalfWidth;
- }
- }
-
- if (bSecnUsed)
- {
- // both or all three lines used
- const bool bPrimTransparent(0xff == rStyle.GetColorPrim().GetTransparency());
- const bool bDistTransparent(!rStyle.UseGapColor() || 0xff == rStyle.GetColorGap().GetTransparency());
- const bool bSecnTransparent(0xff == aSecn.GetTransparency());
-
- if(!bPrimTransparent || !bDistTransparent || !bSecnTransparent)
- {
- const double a(fRefModeOffset - (rStyle.GetWidth() * 0.5));
- const double b(a + fPrim);
- const double c(b + rStyle.Dist());
- const double d(c + fSecn);
-
- offsets.push_back(
- OffsetAndHalfWidthAndColor(
- (a + b) * 0.5,
- fPrim * 0.5,
- nullptr != pForceColor ? *pForceColor : aPrim));
-
- offsets.push_back(
- OffsetAndHalfWidthAndColor(
- (b + c) * 0.5,
- rStyle.Dist() * 0.5,
- rStyle.UseGapColor()
- ? (nullptr != pForceColor ? *pForceColor : rStyle.GetColorGap())
- : Color(COL_TRANSPARENT)));
-
- offsets.push_back(
- OffsetAndHalfWidthAndColor(
- (c + d) * 0.5,
- fSecn * 0.5,
- nullptr != pForceColor ? *pForceColor : aSecn));
- }
- }
- else
- {
- // one line used, push two values, from outer to inner
- if(0xff != rStyle.GetColorPrim().GetTransparency())
- {
- offsets.push_back(
- OffsetAndHalfWidthAndColor(
- fRefModeOffset,
- fPrim * 0.5,
- nullptr != pForceColor ? *pForceColor : aPrim));
- }
- }
- }
-
- return fRefModeOffset;
-}
-
void getCutSet(
CutSet& rCutSet,
const basegfx::B2DPoint& rLeft,
@@ -521,12 +406,12 @@ void getAllCutSets(
bool bUpper,
bool bLower)
{
- for(const auto& rStyleVectorCombination : rStyleVectorTable)
+ for(const auto& rCombination : rStyleVectorTable.getEntries())
{
if(bUpper || bLower)
{
// use only upper or lower vectors compared to rX
- const double fCross(rX.cross(rStyleVectorCombination.getB2DVector()));
+ const double fCross(rX.cross(rCombination.getB2DVector()));
if(bUpper && fCross > 0.0)
{
@@ -541,22 +426,25 @@ void getAllCutSets(
}
}
- std::vector< OffsetAndHalfWidthAndColor > otherOffsets;
- getOffsetAndHalfWidthAndColorFromStyle(rStyleVectorCombination.getStyle(), nullptr, rStyleVectorCombination.isMirrored(), otherOffsets);
-
- if(!otherOffsets.empty())
+ if(!rCombination.empty())
{
- const basegfx::B2DVector aOtherPerpend(basegfx::getNormalizedPerpendicular(rStyleVectorCombination.getB2DVector()));
+ const basegfx::B2DVector aOtherPerpend(basegfx::getNormalizedPerpendicular(rCombination.getB2DVector()));
+ const size_t nOffsets(rCombination.size());
- for(const auto& rOtherOffset : otherOffsets)
+ for(size_t a(0); a < nOffsets; a++)
{
- if(0xff != rOtherOffset.maColor.GetTransparency())
+ Color aOtherColor;
+ double fOtherOffset(0.0);
+ double fOtherHalfWidth(0.0);
+ rCombination.getColorAndOffsetAndHalfWidth(a, aOtherColor, fOtherOffset, fOtherHalfWidth);
+
+ if(0xff != aOtherColor.GetTransparency())
{
- const basegfx::B2DPoint aOtherLeft(rOrigin + (aOtherPerpend * (rOtherOffset.mfOffset - rOtherOffset.mfHalfWidth)));
- const basegfx::B2DPoint aOtherRight(rOrigin + (aOtherPerpend * (rOtherOffset.mfOffset + rOtherOffset.mfHalfWidth)));
+ const basegfx::B2DPoint aOtherLeft(rOrigin + (aOtherPerpend * (fOtherOffset - fOtherHalfWidth)));
+ const basegfx::B2DPoint aOtherRight(rOrigin + (aOtherPerpend * (fOtherOffset + fOtherHalfWidth)));
CutSet aCutSet;
- getCutSet(aCutSet, rLeft, rRight, rX, aOtherLeft, aOtherRight, rStyleVectorCombination.getB2DVector());
+ getCutSet(aCutSet, rLeft, rRight, rX, aOtherLeft, aOtherRight, rCombination.getB2DVector());
rCutSets.push_back(aCutSet);
}
}
@@ -634,23 +522,25 @@ CutSet getMinMaxCutSet(
void getExtends(
std::vector<ExtendSet>& rExtendSet, // target Left/Right values to fill
const basegfx::B2DPoint& rOrigin, // own vector start
- const basegfx::B2DVector& rX, // own vector direction and length
- const basegfx::B2DVector& rPerpendX, // normalized perpendicular to rX
- const std::vector< OffsetAndHalfWidthAndColor >& rOffsets, // own vector derivations
+ const StyleVectorCombination& rCombination, // own vector and offstets for lines
+ const basegfx::B2DVector& rPerpendX, // normalized perpendicular to own vector
const StyleVectorTable& rStyleVectorTable) // other vectors emerging in this point
{
- if(!rOffsets.empty() && rOffsets.size() == rExtendSet.size())
+ if(!rCombination.empty() && rCombination.size() == rExtendSet.size())
{
- const size_t nOffsets(rOffsets.size());
+ const size_t nOffsets(rCombination.size());
for(size_t a(0); a < nOffsets; a++)
{
- const OffsetAndHalfWidthAndColor& rOffset(rOffsets[a]);
+ Color aMyColor;
+ double fMyOffset(0.0);
+ double fMyHalfWidth(0.0);
+ rCombination.getColorAndOffsetAndHalfWidth(a, aMyColor, fMyOffset, fMyHalfWidth);
- if(0xff != rOffset.maColor.GetTransparency())
+ if(0xff != aMyColor.GetTransparency())
{
- const basegfx::B2DPoint aLeft(rOrigin + (rPerpendX * (rOffset.mfOffset - rOffset.mfHalfWidth)));
- const basegfx::B2DPoint aRight(rOrigin + (rPerpendX * (rOffset.mfOffset + rOffset.mfHalfWidth)));
+ const basegfx::B2DPoint aLeft(rOrigin + (rPerpendX * (fMyOffset - fMyHalfWidth)));
+ const basegfx::B2DPoint aRight(rOrigin + (rPerpendX * (fMyOffset + fMyHalfWidth)));
std::vector< CutSet > aCutSets;
CutSet aResult;
bool bResultSet(false);
@@ -660,7 +550,7 @@ void getExtends(
// single line:
// - get all CutSets
// - get minimum values as extension (biggest possible overlap)
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, false, false);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, false, false);
if(!aCutSets.empty())
{
@@ -676,7 +566,7 @@ void getExtends(
if(bUpper)
{
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, true, false);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, true, false);
if(!aCutSets.empty())
{
@@ -685,7 +575,7 @@ void getExtends(
}
else
{
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, false, true);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, false, true);
if(!aCutSets.empty())
{
@@ -696,7 +586,7 @@ void getExtends(
}
else if(bLower)
{
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, false, true);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, false, true);
if(!aCutSets.empty())
{
@@ -705,7 +595,7 @@ void getExtends(
}
else
{
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, true, false);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, true, false);
if(!aCutSets.empty())
{
@@ -716,7 +606,7 @@ void getExtends(
}
else // middle line
{
- getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rX, rStyleVectorTable, false, false);
+ getAllCutSets(aCutSets, rOrigin, aLeft, aRight, rCombination.getB2DVector(), rStyleVectorTable, false, false);
if(!aCutSets.empty())
{
@@ -744,6 +634,106 @@ void getExtends(
}
}
+StyleVectorCombination::StyleVectorCombination(
+ const Style& rStyle,
+ const basegfx::B2DVector& rB2DVector,
+ bool bMirrored,
+ const Color* pForceColor)
+: mfRefModeOffset(0.0),
+ maB2DVector(rB2DVector),
+ maOffsets()
+{
+ if (rStyle.IsUsed())
+ {
+ RefMode aRefMode(rStyle.GetRefMode());
+ Color aPrim(rStyle.GetColorPrim());
+ Color aSecn(rStyle.GetColorSecn());
+ double fPrim(rStyle.Prim());
+ double fSecn(rStyle.Secn());
+ const bool bSecnUsed(0.0 != fSecn);
+
+ if(bMirrored)
+ {
+ switch(aRefMode)
+ {
+ case RefMode::Begin: aRefMode = RefMode::End; break;
+ case RefMode::End: aRefMode = RefMode::Begin; break;
+ default: break;
+ }
+
+ if(bSecnUsed)
+ {
+ std::swap(aPrim, aSecn);
+ std::swap(fPrim, fSecn);
+ }
+ }
+
+ if (RefMode::Centered != aRefMode)
+ {
+ const double fHalfWidth(rStyle.GetWidth() * 0.5);
+
+ if (RefMode::Begin == aRefMode)
+ {
+ // move aligned below vector
+ mfRefModeOffset = fHalfWidth;
+ }
+ else if (RefMode::End == aRefMode)
+ {
+ // move aligned above vector
+ mfRefModeOffset = -fHalfWidth;
+ }
+ }
+
+ if (bSecnUsed)
+ {
+ // both or all three lines used
+ const bool bPrimTransparent(0xff == rStyle.GetColorPrim().GetTransparency());
+ const bool bDistTransparent(!rStyle.UseGapColor() || 0xff == rStyle.GetColorGap().GetTransparency());
+ const bool bSecnTransparent(0xff == aSecn.GetTransparency());
+
+ if(!bPrimTransparent || !bDistTransparent || !bSecnTransparent)
+ {
+ const double a(mfRefModeOffset - (rStyle.GetWidth() * 0.5));
+ const double b(a + fPrim);
+ const double c(b + rStyle.Dist());
+ const double d(c + fSecn);
+
+ maOffsets.push_back(
+ OffsetAndHalfWidthAndColor(
+ (a + b) * 0.5,
+ fPrim * 0.5,
+ nullptr != pForceColor ? *pForceColor : aPrim));
+
+ maOffsets.push_back(
+ OffsetAndHalfWidthAndColor(
+ (b + c) * 0.5,
+ rStyle.Dist() * 0.5,
+ rStyle.UseGapColor()
+ ? (nullptr != pForceColor ? *pForceColor : rStyle.GetColorGap())
+ : Color(COL_TRANSPARENT)));
+
+ maOffsets.push_back(
+ OffsetAndHalfWidthAndColor(
+ (c + d) * 0.5,
+ fSecn * 0.5,
+ nullptr != pForceColor ? *pForceColor : aSecn));
+ }
+ }
+ else
+ {
+ // one line used, push two values, from outer to inner
+ if(0xff != rStyle.GetColorPrim().GetTransparency())
+ {
+ maOffsets.push_back(
+ OffsetAndHalfWidthAndColor(
+ mfRefModeOffset,
+ fPrim * 0.5,
+ nullptr != pForceColor ? *pForceColor : aPrim));
+ }
+ }
+ }
+}
+
void CreateBorderPrimitives(
drawinglayer::primitive2d::Primitive2DContainer& rTarget,
const basegfx::B2DPoint& rOrigin,
@@ -754,41 +744,31 @@ void CreateBorderPrimitives(
const Color* pForceColor)
{
// get offset color pairs for style, one per visible line
- std::vector< OffsetAndHalfWidthAndColor > myOffsets;
- const double fRefModeOffset(getOffsetAndHalfWidthAndColorFromStyle(rBorder, pForceColor, false, myOffsets));
- const size_t nOffsets(myOffsets.size());
+ const StyleVectorCombination aCombination(rBorder, rX, false, pForceColor);
- if(nOffsets)
+ if(!aCombination.empty())
{
const basegfx::B2DVector aPerpendX(basegfx::getNormalizedPerpendicular(rX));
const bool bHasStartStyles(!rStartStyleVectorTable.empty());
const bool bHasEndStyles(!rEndStyleVectorTable.empty());
+ const size_t nOffsets(aCombination.size());
std::vector<ExtendSet> aExtendSetStart(nOffsets);
std::vector<ExtendSet> aExtendSetEnd(nOffsets);
if(bHasStartStyles)
{
// create extends for line starts, use given point/vector and offsets
- getExtends(aExtendSetStart, rOrigin, rX, aPerpendX, myOffsets, rStartStyleVectorTable);
+ getExtends(aExtendSetStart, rOrigin, aCombination, aPerpendX, rStartStyleVectorTable);
}
if(bHasEndStyles)
{
- // Create extends for line ends, use inverse point/vector and inverse offsets.
- // Offsets need to be inverted for different width of lines. To invert, change
- // order, but also sign of offset. Do this on a copy since myOffsets will be
- // used below to create the primitives
- std::vector< OffsetAndHalfWidthAndColor > myInverseOffsets(myOffsets);
- std::reverse(myInverseOffsets.begin(), myInverseOffsets.end());
-
- for(auto& offset : myInverseOffsets)
- {
- offset.mfOffset *= -1;
- }
+ // Create extends for line ends, create inverse point/vector and inverse offsets.
+ const StyleVectorCombination aMirroredCombination(rBorder, -rX, true, pForceColor);
- getExtends(aExtendSetEnd, rOrigin + rX, -rX, -aPerpendX, myInverseOffsets, rEndStyleVectorTable);
+ getExtends(aExtendSetEnd, rOrigin + rX, aMirroredCombination, -aPerpendX, rEndStyleVectorTable);
- // also need to reverse the result to apply to the correct lines
+ // also need to inverse the result to apply to the correct lines
std::reverse(aExtendSetEnd.begin(), aExtendSetEnd.end());
}
@@ -797,23 +777,26 @@ void CreateBorderPrimitives(
for(size_t a(0); a < nOffsets; a++)
{
- const OffsetAndHalfWidthAndColor& rOffset(myOffsets[a]);
+ Color aMyColor;
+ double fMyOffset(0.0);
+ double fMyHalfWidth(0.0);
+ aCombination.getColorAndOffsetAndHalfWidth(a, aMyColor, fMyOffset, fMyHalfWidth);
const ExtendSet& rExtStart(aExtendSetStart[a]);
const ExtendSet& rExtEnd(aExtendSetEnd[a]);
- if(0xff == rOffset.maColor.GetTransparency())
+ if(0xff == aMyColor.GetTransparency())
{
aBorderlines.push_back(
drawinglayer::primitive2d::BorderLine(
- rOffset.mfHalfWidth * 2.0));
+ fMyHalfWidth * 2.0));
}
else
{
aBorderlines.push_back(
drawinglayer::primitive2d::BorderLine(
drawinglayer::attribute::LineAttribute(
- rOffset.maColor.getBColor(),
- rOffset.mfHalfWidth * 2.0),
+ aMyColor.getBColor(),
+ fMyHalfWidth * 2.0),
fNegLength * rExtStart.mfExtLeft,
fNegLength * rExtStart.mfExtRight,
fNegLength * rExtEnd.mfExtRight,
@@ -824,7 +807,7 @@ void CreateBorderPrimitives(
static double fPatScFact(10.0); // 10.0 multiply, see old code
const std::vector<double> aDashing(svtools::GetLineDashing(rBorder.Type(), rBorder.PatternScale() * fPatScFact));
const drawinglayer::attribute::StrokeAttribute aStrokeAttribute(aDashing);
- const basegfx::B2DPoint aStart(rOrigin + (aPerpendX * fRefModeOffset));
+ const basegfx::B2DPoint aStart(rOrigin + (aPerpendX * aCombination.getRefModeOffset()));
rTarget.append(
drawinglayer::primitive2d::Primitive2DReference(
diff --git a/svx/source/dialog/framelinkarray.cxx b/svx/source/dialog/framelinkarray.cxx
index 5a526145cd54..529b155fcf54 100644
--- a/svx/source/dialog/framelinkarray.cxx
+++ b/svx/source/dialog/framelinkarray.cxx
@@ -941,11 +941,12 @@ void HelperCreateHorizontalEntry(
const Style& rStartFromBR(rArray.GetCellStyleTL( col, row ));
StyleVectorTable aStart;
- if(rStartFromTR.IsUsed()) aStart.push_back(StyleVectorCombination(rStartFromTR, rX - rY, false));
- if(rStartLFromT.IsUsed()) aStart.push_back(StyleVectorCombination(rStartLFromT, -rY, true));
- if(rStartLFromL.IsUsed()) aStart.push_back(StyleVectorCombination(rStartLFromL, -rX, true));
- if(rStartLFromB.IsUsed()) aStart.push_back(StyleVectorCombination(rStartLFromB, rY, false));
- if(rStartFromBR.IsUsed()) aStart.push_back(StyleVectorCombination(rStartFromBR, rX + rY, false));
+ aStart.add(rStartFromTR, rX, rX - rY, false);
+ aStart.add(rStartLFromT, rX, -rY, true);
+ aStart.add(rStartLFromL, rX, -rX, true);
+ aStart.add(rStartLFromB, rX, rY, false);
+ aStart.add(rStartFromBR, rX, rX + rY, false);
+ aStart.sort();
// get involved styles at end
const Style& rEndFromTL(rArray.GetCellStyleBR( col, row - 1 ));
@@ -955,11 +956,12 @@ void HelperCreateHorizontalEntry(
const Style& rEndFromBL(rArray.GetCellStyleTR( col, row ));
StyleVectorTable aEnd;
- if(rEndFromTL.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndFromTL, -rX -rY, true));
- if(rEndRFromT.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndRFromT, -rY, true));
- if(rEndRFromR.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndRFromR, rX, false));
- if(rEndRFromB.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndRFromB, rY, false));
- if(rEndFromBL.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndFromBL, rY - rX, true));
+ aEnd.add(rEndFromTL, -rX, -rX -rY, true);
+ aEnd.add(rEndRFromT, -rX, -rY, true);
+ aEnd.add(rEndRFromR, -rX, rX, false);
+ aEnd.add(rEndRFromB, -rX, rY, false);
+ aEnd.add(rEndFromBL, -rX, rY - rX, true);
+ aEnd.sort();
CreateBorderPrimitives(
rSequence,
@@ -986,11 +988,12 @@ void HelperCreateVerticalEntry(
const Style& rStartFromBR(rArray.GetCellStyleTL( col, row ));
StyleVectorTable aStart;
- if(rStartFromBR.IsUsed()) aStart.push_back(StyleVectorCombination(rStartFromBR, rX + rY, false));
- if(rStartTFromR.IsUsed()) aStart.push_back(StyleVectorCombination(rStartTFromR, rX, false));
- if(rStartTFromT.IsUsed()) aStart.push_back(StyleVectorCombination(rStartTFromT, -rY, true));
- if(rStartTFromL.IsUsed()) aStart.push_back(StyleVectorCombination(rStartTFromL, -rX, true));
- if(rStartFromBL.IsUsed()) aStart.push_back(StyleVectorCombination(rStartFromBL, rY - rX, true));
+ aStart.add(rStartFromBR, rY, rX + rY, false);
+ aStart.add(rStartTFromR, rY, rX, false);
+ aStart.add(rStartTFromT, rY, -rY, true);
+ aStart.add(rStartTFromL, rY, -rX, true);
+ aStart.add(rStartFromBL, rY, rY - rX, true);
+ aStart.sort();
// get involved styles at end
const Style& rEndFromTL(rArray.GetCellStyleBR( col - 1, row ));
@@ -1000,11 +1003,12 @@ void HelperCreateVerticalEntry(
const Style& rEndFromTR(rArray.GetCellStyleBL( col, row ));
StyleVectorTable aEnd;
- if(rEndFromTR.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndFromTR, rX - rY, false));
- if(rEndBFromR.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndBFromR, rX, false));
- if(rEndBFromB.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndBFromB, rY, false));
- if(rEndBFromL.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndBFromL, -rX, true));
- if(rEndFromTL.IsUsed()) aEnd.push_back(StyleVectorCombination(rEndFromTL, -rX - rY, true));
+ aEnd.add(rEndFromTR, -rY, rX - rY, false);
+ aEnd.add(rEndBFromR, -rY, rX, false);
+ aEnd.add(rEndBFromB, -rY, rY, false);
+ aEnd.add(rEndBFromL, -rY, -rX, true);
+ aEnd.add(rEndFromTL, -rY, -rX - rY, true);
+ aEnd.sort();
CreateBorderPrimitives(
rSequence,
@@ -1180,20 +1184,23 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange(
if(rTLBR.IsUsed())
{
/// top-left and bottom-right Style Tables
- StyleVectorTable aStart;
- StyleVectorTable aEnd;
-
/// Fill top-left Style Table
const Style& rTLFromRight(GetCellStyleTop(_nFirstCol, _nFirstRow));
- if(rTLFromRight.IsUsed()) aStart.push_back(StyleVectorCombination(rTLFromRight, aX, false));
const Style& rTLFromBottom(GetCellStyleLeft(_nFirstCol, _nFirstRow));
- if(rTLFromBottom.IsUsed()) aStart.push_back(StyleVectorCombination(rTLFromBottom, aY, false));
+ StyleVectorTable aStart;
+
+ aStart.add(rTLFromRight, aX + aY, aX, false);
+ aStart.add(rTLFromBottom, aX + aY, aY, false);
+ aStart.sort();
/// Fill bottom-right Style Table
const Style& rBRFromBottom(GetCellStyleRight(_nLastCol, _nLastRow));
- if(rBRFromBottom.IsUsed()) aEnd.push_back(StyleVectorCombination(rBRFromBottom, -aY, true));
const Style& rBRFromLeft(GetCellStyleBottom(_nLastCol, _nLastRow));
- if(rBRFromLeft.IsUsed()) aEnd.push_back(StyleVectorCombination(rBRFromLeft, -aX, true));
+ StyleVectorTable aEnd;
+
+ aEnd.add(rBRFromBottom, -aX -aY, -aY, true);
+ aEnd.add(rBRFromLeft, -aX -aY, -aX, true);
+ aEnd.sort();
CreateBorderPrimitives(
aCrossSequence,
@@ -1210,20 +1217,23 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange(
if(rBLTR.IsUsed())
{
/// bottom-left and top-right Style Tables
- StyleVectorTable aStart;
- StyleVectorTable aEnd;
-
/// Fill bottom-left Style Table
const Style& rBLFromTop(GetCellStyleLeft(_nFirstCol, _nLastRow));
- if(rBLFromTop.IsUsed()) aStart.push_back(StyleVectorCombination(rBLFromTop, -aY, true));
const Style& rBLFromBottom(GetCellStyleBottom(_nFirstCol, _nLastRow));
- if(rBLFromBottom.IsUsed()) aStart.push_back(StyleVectorCombination(rBLFromBottom, aX, false));
+ StyleVectorTable aStart;
+
+ aStart.add(rBLFromTop, aX - aY, -aY, true);
+ aStart.add(rBLFromBottom, aX - aY, aX, false);
+ aStart.sort();
/// Fill top-right Style Table
const Style& rTRFromBottom(GetCellStyleRight(_nLastCol, _nFirstRow));
- if(rTRFromBottom.IsUsed()) aEnd.push_back(StyleVectorCombination(rTRFromBottom, -aY, true));
const Style& rTRFromLeft(GetCellStyleTop(_nLastCol, _nFirstRow));
- if(rTRFromLeft.IsUsed()) aEnd.push_back(StyleVectorCombination(rTRFromLeft, -aX, false));
+ StyleVectorTable aEnd;
+
+ aEnd.add(rTRFromBottom, aY - aX, -aY, true);
+ aEnd.add(rTRFromLeft, aY - aX, -aX, false);
+ aEnd.sort();
CreateBorderPrimitives(
aCrossSequence,
diff --git a/svx/source/table/viewcontactoftableobj.cxx b/svx/source/table/viewcontactoftableobj.cxx
index 90d143665140..0f6a0f8065ab 100644
--- a/svx/source/table/viewcontactoftableobj.cxx
+++ b/svx/source/table/viewcontactoftableobj.cxx
@@ -203,19 +203,23 @@ namespace sdr
const svx::frame::Style& rRightA, const svx::frame::Style& rRightB, const svx::frame::Style& rRightC)
{
/// top-left and bottom-right Style Tables
- svx::frame::StyleVectorTable aStart;
- svx::frame::StyleVectorTable aEnd;
const basegfx::B2DVector aY(basegfx::getNormalizedPerpendicular(rX));
/// Fill top-left Style Table
- if(rLeftA.IsUsed()) aStart.push_back(svx::frame::StyleVectorCombination(rLeftA, -aY, bHor)); // bHor ? true : false));
- if(rLeftB.IsUsed()) aStart.push_back(svx::frame::StyleVectorCombination(rLeftB, -rX, true)); // bHor ? true : true));
- if(rLeftC.IsUsed()) aStart.push_back(svx::frame::StyleVectorCombination(rLeftC, aY, !bHor)); // bHor ? false : true));
+ svx::frame::StyleVectorTable aStart;
+
+ aStart.add(rLeftA, rX, -aY, bHor); // bHor ? true : false));
+ aStart.add(rLeftB, rX, -rX, true); // bHor ? true : true));
+ aStart.add(rLeftC, rX, aY, !bHor); // bHor ? false : true));
+ aStart.sort();
/// Fill bottom-right Style Table
- if(rRightA.IsUsed()) aEnd.push_back(svx::frame::StyleVectorCombination(rRightA, -aY, bHor)); // bHor ? true : false));
- if(rRightB.IsUsed()) aEnd.push_back(svx::frame::StyleVectorCombination(rRightB, rX, false)); // bHor ? false : false));
- if(rRightC.IsUsed()) aEnd.push_back(svx::frame::StyleVectorCombination(rRightC, aY, !bHor)); // bHor ? false : true));
+ svx::frame::StyleVectorTable aEnd;
+
+ aEnd.add(rRightA, -rX, -aY, bHor); // bHor ? true : false));
+ aEnd.add(rRightB, -rX, rX, false); // bHor ? false : false));
+ aEnd.add(rRightC, -rX, aY, !bHor); // bHor ? false : true));
+ aEnd.sort();
CreateBorderPrimitives(
rContainer,
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 4098b2add8f4..351ac1a8ba35 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -2549,24 +2549,27 @@ void SwTabFramePainter::PaintLines(OutputDevice& rDev, const SwRect& rRect) cons
if(!aX.equalZero())
{
const basegfx::B2DVector aY(basegfx::getNormalizedPerpendicular(aX));
- svx::frame::StyleVectorTable aStartTable;
- svx::frame::StyleVectorTable aEndTable;
+ svx::frame::StyleVectorTable aStartVector;
- if(aStyles[ 1 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 1 ], -aY, true)); // aLFromT
- if(aStyles[ 2 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 2 ], -aX, true)); // aLFromL
- if(aStyles[ 3 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 3 ], aY, false)); // aLFromB
+ aStartVector.add(aStyles[ 1 ], aX, -aY, true); // aLFromT
+ aStartVector.add(aStyles[ 2 ], aX, -aX, true); // aLFromL
+ aStartVector.add(aStyles[ 3 ], aX, aY, false); // aLFromB
+ aStartVector.sort();
- if(aStyles[ 4 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 4 ], -aY, true)); // aRFromT
- if(aStyles[ 5 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 5 ], aX, false)); // aRFromR
- if(aStyles[ 6 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 6 ], aY, false)); // aRFromB
+ svx::frame::StyleVectorTable aEndVector;
+
+ aEndVector.add(aStyles[ 4 ], -aX, -aY, true); // aRFromT
+ aEndVector.add(aStyles[ 5 ], -aX, aX, false); // aRFromR
+ aEndVector.add(aStyles[ 6 ], -aX, aY, false); // aRFromB
+ aEndVector.sort();
CreateBorderPrimitives(
aHorizontalSequence,
aOrigin,
aX,
aStyles[ 0 ],
- aStartTable,
- aEndTable,
+ aStartVector,
+ aEndVector,
pTmpColor
);
}
@@ -2579,24 +2582,27 @@ void SwTabFramePainter::PaintLines(OutputDevice& rDev, const SwRect& rRect) cons
if(!aX.equalZero())
{
const basegfx::B2DVector aY(basegfx::getNormalizedPerpendicular(aX));
- svx::frame::StyleVectorTable aStartTable;
- svx::frame::StyleVectorTable aEndTable;
+ svx::frame::StyleVectorTable aStartVector;
+
+ aStartVector.add(aStyles[ 3 ], aX, -aY, false); // aTFromR
+ aStartVector.add(aStyles[ 2 ], aX, -aX, true); // aTFromT
+ aStartVector.add(aStyles[ 1 ], aX, aY, true); // aTFromL
+ aStartVector.sort();
- if(aStyles[ 3 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 3 ], -aY, false)); // aTFromR
- if(aStyles[ 2 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 2 ], -aX, true)); // aTFromT
- if(aStyles[ 1 ].IsUsed()) aStartTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 1 ], aY, true)); // aTFromL
+ svx::frame::StyleVectorTable aEndVector;
- if(aStyles[ 6 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 6 ], -aY, false)); // aBFromR
- if(aStyles[ 5 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 5 ], aX, false)); // aBFromB
- if(aStyles[ 4 ].IsUsed()) aEndTable.push_back(svx::frame::StyleVectorCombination(aStyles[ 4 ], aY, true)); // aBFromL
+ aEndVector.add(aStyles[ 6 ], -aX, -aY, false); // aBFromR
+ aEndVector.add(aStyles[ 5 ], -aX, aX, false); // aBFromB
+ aEndVector.add(aStyles[ 4 ], -aX, aY, true); // aBFromL
+ aEndVector.sort();
CreateBorderPrimitives(
aVerticalSequence,
aOrigin,
aX,
aStyles[ 0 ],
- aStartTable,
- aEndTable,
+ aStartVector,
+ aEndVector,
pTmpColor
);
}
More information about the Libreoffice-commits
mailing list