sw/source/core/layout/paintfrm.cxx | 60 ++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 13 deletions(-)
New commits: commit d6e371953d28a9bf5f3d164fa27375e6cf5da975 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Mar 4 16:26:57 2014 -0500 Limit application of offset values to avoid overlapping borders. They show up when exporting to PDF. It's quite ugly. Change-Id: Ib1efb68d9481dca06fafe1aab293dac5aa54e8ea diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 3ea8ad8..b090ae1 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -2260,6 +2260,10 @@ struct SwLineEntry SwTwips mnEndPos; SwTwips mnOffset; + bool mbOffsetPerp; + bool mbOffsetStart; + bool mbOffsetEnd; + svx::frame::Style maAttribute; enum OverlapType { NO_OVERLAP, OVERLAP1, OVERLAP2, OVERLAP3 }; @@ -2281,6 +2285,9 @@ SwLineEntry::SwLineEntry( SwTwips nKey, mnStartPos( nStartPos ), mnEndPos( nEndPos ), mnOffset( 0 ), + mbOffsetPerp(false), + mbOffsetStart(false), + mbOffsetEnd(false), maAttribute( rAttribute ) { } @@ -2489,19 +2496,38 @@ void SwTabFrmPainter::PaintLines(OutputDevice& rDev, const SwRect& rRect) const FindStylesForLine( aStart, aEnd, aStyles, bHori ); // Account for double line thicknesses for the top- and left-most borders. - if (bHori) - { - aStart.Y() -= rEntry.mnOffset; - aEnd.Y() -= rEntry.mnOffset; - aStart.X() -= rEntry.mnOffset; - aEnd.X() += rEntry.mnOffset; - } - else + if (rEntry.mnOffset) { - aStart.X() -= rEntry.mnOffset; - aEnd.X() -= rEntry.mnOffset; - aStart.Y() -= rEntry.mnOffset; - aEnd.Y() += rEntry.mnOffset; + if (bHori) + { + if (rEntry.mbOffsetPerp) + { + // Apply offset in perpendicular direction. + aStart.Y() -= rEntry.mnOffset; + aEnd.Y() -= rEntry.mnOffset; + } + if (rEntry.mbOffsetStart) + // Apply offset at the start of a border. + aStart.X() -= rEntry.mnOffset; + if (rEntry.mbOffsetEnd) + // Apply offset at the end of a border. + aEnd.X() += rEntry.mnOffset; + } + else + { + if (rEntry.mbOffsetPerp) + { + // Apply offset in perpendicular direction. + aStart.X() -= rEntry.mnOffset; + aEnd.X() -= rEntry.mnOffset; + } + if (rEntry.mbOffsetStart) + // Apply offset at the start of a border. + aStart.Y() -= rEntry.mnOffset; + if (rEntry.mbOffsetEnd) + // Apply offset at the end of a border. + aEnd.Y() += rEntry.mnOffset; + } } SwRect aRepaintRect( aStart, aEnd ); @@ -2778,10 +2804,18 @@ void calcOffsetForDoubleLine( SwLineEntryMap& rLines ) SwLineEntrySet aNewSet; const SwLineEntrySet& rSet = it->second; SwLineEntrySet::iterator itSet = rSet.begin(), itSetEnd = rSet.end(); - for (; itSet != itSetEnd; ++itSet) + size_t nEntryCount = rSet.size(); + for (size_t i = 0; itSet != itSetEnd; ++itSet, ++i) { SwLineEntry aLine = *itSet; aLine.mnOffset = static_cast<SwTwips>(aLine.maAttribute.Dist()); + aLine.mbOffsetPerp = true; + + if (i == 0) + aLine.mbOffsetStart = true; + if (i == nEntryCount - 1) + aLine.mbOffsetEnd = true; + aNewSet.insert(aLine); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits