[Libreoffice-commits] core.git: Branch 'distro/lhm/libreoffice-6-1+backports' - basegfx/source vcl/qa vcl/source
basegfx/source/polygon/b2dpolygontools.cxx | 15 +++--- basegfx/source/polygon/b2dpolypolygoncutter.cxx | 36 +++ vcl/qa/cppunit/pdfexport/pdfexport.cxx | 28 ++-- vcl/source/gdi/pdfwriter_impl.cxx | 56 ++-- 4 files changed, 102 insertions(+), 33 deletions(-) New commits: commit e48467e85a2f5cb06eb1156f1aa539b5a66b5290 Author: Armin.Le.Grand (CIB) AuthorDate: Tue Mar 3 11:34:45 2020 +0100 Commit: Thorsten Behrens CommitDate: Sat Oct 17 10:54:49 2020 +0200 tdf#130150 Improve clipping in PDF export For more info and discusson please have a look at the task. It reverts the change from tdf#99680 which did a wrong paradigm change in how clip in Region(s) is defined and tries to fix the underlying error in a more correct way. This includes problems noted in tdf#44388 and tdf#113449. This is a decent improvement, but - due to dealing with numerical problems - not yet the whole healing. Still thinking about how to solve this for good. Adapted PdfExportTest::testTdf99680() and PdfExportTest::testTdf99680_2() as needed, empty clip regions are allowed again. Added comments, too. Had to change solvePolygonOperationAnd to work on ranges if both inputs *are* ranges. The AND-case is then completely solvable. Also increased geometry for transformations of clip geometries - may help later. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874 Tested-by: Jenkins Reviewed-by: Thorsten Behrens Conflicts: vcl/source/gdi/pdfwriter_impl.cxx Change-Id: I2370447597faa6efb81d58ee31c63654e304262e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104207 Tested-by: Thorsten Behrens Reviewed-by: Thorsten Behrens diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx index 9b2406074a71..4e40ddc74860 100644 --- a/basegfx/source/polygon/b2dpolygontools.cxx +++ b/basegfx/source/polygon/b2dpolygontools.cxx @@ -343,15 +343,15 @@ namespace basegfx const B2DPoint aPreviousPoint(aCurrentPoint); aCurrentPoint = aCandidate.getB2DPoint(a); -// cross-over in Y? -const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY())); -const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY())); +// cross-over in Y? tdf#130150 use full precision, no need for epsilon +const bool bCompYA(aPreviousPoint.getY() > rPoint.getY()); +const bool bCompYB(aCurrentPoint.getY() > rPoint.getY()); if(bCompYA != bCompYB) { -// cross-over in X? -const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX())); -const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX())); +// cross-over in X? tdf#130150 use full precision, no need for epsilon +const bool bCompXA(aPreviousPoint.getX() > rPoint.getX()); +const bool bCompXB(aCurrentPoint.getX() > rPoint.getX()); if(bCompXA == bCompXB) { @@ -367,7 +367,8 @@ namespace basegfx (aPreviousPoint.getX() - aCurrentPoint.getX()) / (aPreviousPoint.getY() - aCurrentPoint.getY())); -if(fTools::more(fCompare, rPoint.getX())) +// tdf#130150 use full precision, no need for epsilon +if(fCompare > rPoint.getX()) { bRetval = !bRetval; } diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index 4fd7bf369d85..1d2b3efb7363 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -986,6 +986,42 @@ namespace basegfx } else { +// tdf#130150 shortcut & precision: If both are simple ranges, +// solve based on ranges +if(basegfx::utils::isRectangle(rCandidateA) && basegfx::utils::isRectangle(rCandidateB)) +{ +// *if* both are ranges, AND always can be solved +const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange()); +const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange()); + +if(aRangeA.isInside(aRangeB)) +{ +// 2nd completely inside 1st ->
[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - basegfx/source vcl/qa vcl/source
basegfx/source/polygon/b2dpolygontools.cxx | 15 +++--- basegfx/source/polygon/b2dpolypolygoncutter.cxx | 36 vcl/qa/cppunit/pdfexport/pdfexport.cxx | 28 +++- vcl/source/gdi/pdfwriter_impl.cxx | 54 +--- 4 files changed, 100 insertions(+), 33 deletions(-) New commits: commit 3bd5de707a361fc23d53dd5ad76c147722dfa2e9 Author: Armin.Le.Grand (CIB) AuthorDate: Tue Mar 3 11:34:45 2020 +0100 Commit: Miklos Vajna CommitDate: Tue Mar 17 11:20:48 2020 +0100 tdf#130150 Improve clipping in PDF export For more info and discusson please have a look at the task. It reverts the change from tdf#99680 which did a wrong paradigm change in how clip in Region(s) is defined and tries to fix the underlying error in a more correct way. This includes problems noted in tdf#44388 and tdf#113449. This is a decent improvement, but - due to dealing with numerical problems - not yet the whole healing. Still thinking about how to solve this for good. Adapted PdfExportTest::testTdf99680() and PdfExportTest::testTdf99680_2() as needed, empty clip regions are allowed again. Added comments, too. Had to change solvePolygonOperationAnd to work on ranges if both inputs *are* ranges. The AND-case is then completely solvable. Also increased geometry for transformations of clip geometries - may help later. Change-Id: I2370447597faa6efb81d58ee31c63654e304262e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874 Tested-by: Jenkins Reviewed-by: Thorsten Behrens (cherry picked from commit 6dff631f8f4b964b48aadde52a1e1b8b04b9ba53) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89923 Reviewed-by: Miklos Vajna diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx index 4ac68958eaa2..cbc18ee74203 100644 --- a/basegfx/source/polygon/b2dpolygontools.cxx +++ b/basegfx/source/polygon/b2dpolygontools.cxx @@ -333,15 +333,15 @@ namespace basegfx const B2DPoint aPreviousPoint(aCurrentPoint); aCurrentPoint = aCandidate.getB2DPoint(a); -// cross-over in Y? -const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY())); -const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY())); +// cross-over in Y? tdf#130150 use full precision, no need for epsilon +const bool bCompYA(aPreviousPoint.getY() > rPoint.getY()); +const bool bCompYB(aCurrentPoint.getY() > rPoint.getY()); if(bCompYA != bCompYB) { -// cross-over in X? -const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX())); -const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX())); +// cross-over in X? tdf#130150 use full precision, no need for epsilon +const bool bCompXA(aPreviousPoint.getX() > rPoint.getX()); +const bool bCompXB(aCurrentPoint.getX() > rPoint.getX()); if(bCompXA == bCompXB) { @@ -357,7 +357,8 @@ namespace basegfx (aPreviousPoint.getX() - aCurrentPoint.getX()) / (aPreviousPoint.getY() - aCurrentPoint.getY())); -if(fTools::more(fCompare, rPoint.getX())) +// tdf#130150 use full precision, no need for epsilon +if(fCompare > rPoint.getX()) { bRetval = !bRetval; } diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index 0ea1e8b9b863..9d2e574c1b2d 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -986,6 +986,42 @@ namespace basegfx } else { +// tdf#130150 shortcut & precision: If both are simple ranges, +// solve based on ranges +if(basegfx::utils::isRectangle(rCandidateA) && basegfx::utils::isRectangle(rCandidateB)) +{ +// *if* both are ranges, AND always can be solved +const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange()); +const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange()); + +if(aRangeA.isInside(aRangeB)) +{ +// 2nd completely inside 1st -> 2nd is result of AND +
[Libreoffice-commits] core.git: Branch 'feature/cib_contract57d' - basegfx/source vcl/qa vcl/source
basegfx/source/polygon/b2dpolygontools.cxx | 15 +++--- basegfx/source/polygon/b2dpolypolygoncutter.cxx | 36 vcl/qa/cppunit/pdfexport/pdfexport.cxx | 28 +++- vcl/source/gdi/pdfwriter_impl.cxx | 54 +--- 4 files changed, 100 insertions(+), 33 deletions(-) New commits: commit 663a800ed3d9e31ccc298cbb16f5b8489af16be5 Author: Armin.Le.Grand (CIB) AuthorDate: Tue Mar 3 11:34:45 2020 +0100 Commit: Thorsten Behrens CommitDate: Thu Mar 5 10:13:53 2020 +0100 tdf#130150 Improve clipping in PDF export For more info and discusson please have a look at the task. It reverts the change from tdf#99680 which did a wrong paradigm change in how clip in Region(s) is defined and tries to fix the underlying error in a more correct way. This includes problems noted in tdf#44388 and tdf#113449. This is a decent improvement, but - due to dealing with numerical problems - not yet the whole healing. Still thinking about how to solve this for good. Adapted PdfExportTest::testTdf99680() and PdfExportTest::testTdf99680_2() as needed, empty clip regions are allowed again. Added comments, too. Had to change solvePolygonOperationAnd to work on ranges if both inputs *are* ranges. The AND-case is then completely solvable. Also increased geometry for transformations of clip geometries - may help later. Change-Id: I2370447597faa6efb81d58ee31c63654e304262e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874 Tested-by: Jenkins Reviewed-by: Thorsten Behrens diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx index 4ac68958eaa2..cbc18ee74203 100644 --- a/basegfx/source/polygon/b2dpolygontools.cxx +++ b/basegfx/source/polygon/b2dpolygontools.cxx @@ -333,15 +333,15 @@ namespace basegfx const B2DPoint aPreviousPoint(aCurrentPoint); aCurrentPoint = aCandidate.getB2DPoint(a); -// cross-over in Y? -const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY())); -const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY())); +// cross-over in Y? tdf#130150 use full precision, no need for epsilon +const bool bCompYA(aPreviousPoint.getY() > rPoint.getY()); +const bool bCompYB(aCurrentPoint.getY() > rPoint.getY()); if(bCompYA != bCompYB) { -// cross-over in X? -const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX())); -const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX())); +// cross-over in X? tdf#130150 use full precision, no need for epsilon +const bool bCompXA(aPreviousPoint.getX() > rPoint.getX()); +const bool bCompXB(aCurrentPoint.getX() > rPoint.getX()); if(bCompXA == bCompXB) { @@ -357,7 +357,8 @@ namespace basegfx (aPreviousPoint.getX() - aCurrentPoint.getX()) / (aPreviousPoint.getY() - aCurrentPoint.getY())); -if(fTools::more(fCompare, rPoint.getX())) +// tdf#130150 use full precision, no need for epsilon +if(fCompare > rPoint.getX()) { bRetval = !bRetval; } diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index beb0136912fd..74d25d18ed25 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -986,6 +986,42 @@ namespace basegfx } else { +// tdf#130150 shortcut & precision: If both are simple ranges, +// solve based on ranges +if(basegfx::utils::isRectangle(rCandidateA) && basegfx::utils::isRectangle(rCandidateB)) +{ +// *if* both are ranges, AND always can be solved +const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange()); +const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange()); + +if(aRangeA.isInside(aRangeB)) +{ +// 2nd completely inside 1st -> 2nd is result of AND +return rCandidateB; +} + +if(aRangeB.isInside(aRangeA)) +{ +// 2nd
[Libreoffice-commits] core.git: Branch 'feature/cib_contract57c' - 2 commits - basegfx/source sw/qa sw/source vcl/qa vcl/source
Rebased ref, commits from common ancestor: commit 6608f1f6a24c02b61fa22e419241a8501f2d4ef6 Author: Armin.Le.Grand (CIB) AuthorDate: Tue Mar 3 11:34:45 2020 +0100 Commit: Thorsten Behrens CommitDate: Wed Mar 4 02:02:19 2020 +0100 tdf#130150 Improve clipping in PDF export For more info and discusson please have a look at the task. It reverts the change from tdf#99680 which did a wrong paradigm change in how clip in Region(s) is defined and tries to fix the underlying error in a more correct way. This includes problems noted in tdf#44388 and tdf#113449. This is a decent improvement, but - due to dealing with numerical problems - not yet the whole healing. Still thinking about how to solve this for good. Adapted PdfExportTest::testTdf99680() and PdfExportTest::testTdf99680_2() as needed, empty clip regions are allowed again. Added comments, too. Had to change solvePolygonOperationAnd to work on ranges if both inputs *are* ranges. The AND-case is then completely solvable. Also increased geometry for transformations of clip geometries - may help later. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874 Tested-by: Jenkins Reviewed-by: Thorsten Behrens Conflicts: vcl/source/gdi/pdfwriter_impl.cxx Change-Id: I2370447597faa6efb81d58ee31c63654e304262e diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx index db3365eee313..766a7cd4d361 100644 --- a/basegfx/source/polygon/b2dpolygontools.cxx +++ b/basegfx/source/polygon/b2dpolygontools.cxx @@ -343,15 +343,15 @@ namespace basegfx const B2DPoint aPreviousPoint(aCurrentPoint); aCurrentPoint = aCandidate.getB2DPoint(a); -// cross-over in Y? -const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY())); -const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY())); +// cross-over in Y? tdf#130150 use full precision, no need for epsilon +const bool bCompYA(aPreviousPoint.getY() > rPoint.getY()); +const bool bCompYB(aCurrentPoint.getY() > rPoint.getY()); if(bCompYA != bCompYB) { -// cross-over in X? -const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX())); -const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX())); +// cross-over in X? tdf#130150 use full precision, no need for epsilon +const bool bCompXA(aPreviousPoint.getX() > rPoint.getX()); +const bool bCompXB(aCurrentPoint.getX() > rPoint.getX()); if(bCompXA == bCompXB) { @@ -367,7 +367,8 @@ namespace basegfx (aPreviousPoint.getX() - aCurrentPoint.getX()) / (aPreviousPoint.getY() - aCurrentPoint.getY())); -if(fTools::more(fCompare, rPoint.getX())) +// tdf#130150 use full precision, no need for epsilon +if(fCompare > rPoint.getX()) { bRetval = !bRetval; } diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index 4fd7bf369d85..1d2b3efb7363 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -986,6 +986,42 @@ namespace basegfx } else { +// tdf#130150 shortcut & precision: If both are simple ranges, +// solve based on ranges +if(basegfx::utils::isRectangle(rCandidateA) && basegfx::utils::isRectangle(rCandidateB)) +{ +// *if* both are ranges, AND always can be solved +const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange()); +const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange()); + +if(aRangeA.isInside(aRangeB)) +{ +// 2nd completely inside 1st -> 2nd is result of AND +return rCandidateB; +} + +if(aRangeB.isInside(aRangeA)) +{ +// 2nd completely inside 1st -> 2nd is result of AND +return rCandidateA; +} + +// solve by intersection +basegfx::B2DRange aIntersect(aRangeA); +
[Libreoffice-commits] core.git: basegfx/source vcl/qa vcl/source
basegfx/source/polygon/b2dpolygontools.cxx | 15 +++--- basegfx/source/polygon/b2dpolypolygoncutter.cxx | 36 vcl/qa/cppunit/pdfexport/pdfexport.cxx | 28 +++- vcl/source/gdi/pdfwriter_impl.cxx | 54 +--- 4 files changed, 100 insertions(+), 33 deletions(-) New commits: commit 6dff631f8f4b964b48aadde52a1e1b8b04b9ba53 Author: Armin.Le.Grand (CIB) AuthorDate: Tue Mar 3 11:34:45 2020 +0100 Commit: Thorsten Behrens CommitDate: Wed Mar 4 01:28:03 2020 +0100 tdf#130150 Improve clipping in PDF export For more info and discusson please have a look at the task. It reverts the change from tdf#99680 which did a wrong paradigm change in how clip in Region(s) is defined and tries to fix the underlying error in a more correct way. This includes problems noted in tdf#44388 and tdf#113449. This is a decent improvement, but - due to dealing with numerical problems - not yet the whole healing. Still thinking about how to solve this for good. Adapted PdfExportTest::testTdf99680() and PdfExportTest::testTdf99680_2() as needed, empty clip regions are allowed again. Added comments, too. Had to change solvePolygonOperationAnd to work on ranges if both inputs *are* ranges. The AND-case is then completely solvable. Also increased geometry for transformations of clip geometries - may help later. Change-Id: I2370447597faa6efb81d58ee31c63654e304262e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89874 Tested-by: Jenkins Reviewed-by: Thorsten Behrens diff --git a/basegfx/source/polygon/b2dpolygontools.cxx b/basegfx/source/polygon/b2dpolygontools.cxx index c194a38dc9d2..1cb61585e2b4 100644 --- a/basegfx/source/polygon/b2dpolygontools.cxx +++ b/basegfx/source/polygon/b2dpolygontools.cxx @@ -331,15 +331,15 @@ namespace basegfx::utils const B2DPoint aPreviousPoint(aCurrentPoint); aCurrentPoint = aCandidate.getB2DPoint(a); -// cross-over in Y? -const bool bCompYA(fTools::more(aPreviousPoint.getY(), rPoint.getY())); -const bool bCompYB(fTools::more(aCurrentPoint.getY(), rPoint.getY())); +// cross-over in Y? tdf#130150 use full precision, no need for epsilon +const bool bCompYA(aPreviousPoint.getY() > rPoint.getY()); +const bool bCompYB(aCurrentPoint.getY() > rPoint.getY()); if(bCompYA != bCompYB) { -// cross-over in X? -const bool bCompXA(fTools::more(aPreviousPoint.getX(), rPoint.getX())); -const bool bCompXB(fTools::more(aCurrentPoint.getX(), rPoint.getX())); +// cross-over in X? tdf#130150 use full precision, no need for epsilon +const bool bCompXA(aPreviousPoint.getX() > rPoint.getX()); +const bool bCompXB(aCurrentPoint.getX() > rPoint.getX()); if(bCompXA == bCompXB) { @@ -355,7 +355,8 @@ namespace basegfx::utils (aPreviousPoint.getX() - aCurrentPoint.getX()) / (aPreviousPoint.getY() - aCurrentPoint.getY())); -if(fTools::more(fCompare, rPoint.getX())) +// tdf#130150 use full precision, no need for epsilon +if(fCompare > rPoint.getX()) { bRetval = !bRetval; } diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx index ad185f47f336..6263c78a1ef5 100644 --- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx +++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx @@ -984,6 +984,42 @@ namespace basegfx::utils } else { +// tdf#130150 shortcut & precision: If both are simple ranges, +// solve based on ranges +if(basegfx::utils::isRectangle(rCandidateA) && basegfx::utils::isRectangle(rCandidateB)) +{ +// *if* both are ranges, AND always can be solved +const basegfx::B2DRange aRangeA(rCandidateA.getB2DRange()); +const basegfx::B2DRange aRangeB(rCandidateB.getB2DRange()); + +if(aRangeA.isInside(aRangeB)) +{ +// 2nd completely inside 1st -> 2nd is result of AND +return rCandidateB; +} + +if(aRangeB.isInside(aRangeA)) +{ +