summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2017-09-24 14:57:26 (GMT)
committerfvogel <fvogelnew1@free.fr>2017-09-24 14:57:26 (GMT)
commit463704658db3688e38b70e8ba372e40de589f1fd (patch)
tree975da6bef35548ca049a5689289fc9a74413ccde
parent0736f1be01bbab1e149695436e851c304867cbb4 (diff)
parent77ed324954725331597e86d2f066e38f08b9093c (diff)
downloadtk-463704658db3688e38b70e8ba372e40de589f1fd.zip
tk-463704658db3688e38b70e8ba372e40de589f1fd.tar.gz
tk-463704658db3688e38b70e8ba372e40de589f1fd.tar.bz2
Fix [514ff64dd0]: canvas rotated text overlap detection not working.
-rw-r--r--generic/tkFont.c14
-rw-r--r--tests/font.test10
2 files changed, 16 insertions, 8 deletions
diff --git a/generic/tkFont.c b/generic/tkFont.c
index 3c2b4f9..fbf5445 100644
--- a/generic/tkFont.c
+++ b/generic/tkFont.c
@@ -3146,14 +3146,13 @@ TkIntersectAngledTextLayout(
cy[0] = cy[1] = chunkPtr->y - fontPtr->fm.ascent;
cx[1] = cx[2] = chunkPtr->x + chunkPtr->displayWidth;
cy[2] = cy[3] = chunkPtr->y + fontPtr->fm.descent;
- if ( !PointInQuadrilateral(cx, cy, rx[0], ry[0]) ||
- !PointInQuadrilateral(cx, cy, rx[1], ry[1]) ||
- !PointInQuadrilateral(cx, cy, rx[2], ry[2]) ||
- !PointInQuadrilateral(cx, cy, rx[3], ry[3])) {
- goto notReverseInside;
- }
+ if ( PointInQuadrilateral(cx, cy, rx[0], ry[0]) &&
+ PointInQuadrilateral(cx, cy, rx[1], ry[1]) &&
+ PointInQuadrilateral(cx, cy, rx[2], ry[2]) &&
+ PointInQuadrilateral(cx, cy, rx[3], ry[3])) {
+ return 0;
+ }
}
- return 0;
/*
* If we're overlapping now, we must be partially in and out of at least
@@ -3161,7 +3160,6 @@ TkIntersectAngledTextLayout(
* rectangle that is touching or crossing a line segment of a chunk.
*/
- notReverseInside:
chunkPtr = layoutPtr->chunks;
for (i=0 ; i<layoutPtr->numChunks ; i++,chunkPtr++) {
diff --git a/tests/font.test b/tests/font.test
index b8c0144..6f31df8 100644
--- a/tests/font.test
+++ b/tests/font.test
@@ -1956,6 +1956,16 @@ test font-31.6 {Tk_IntersectTextLayout procedure: ignore spaces at eol} -body {
.t.c itemconfig text -width 0
return $x
} -result {}
+test font-31.7 {TkIntersectAngledTextLayout procedure: bug [514ff64dd0]} -body {
+ csetup "This is line one\nand line two\nand line three here"
+ .t.c itemconfigure text -angle 90
+ # Coordinates of the rectangle to check can be hardcoded:
+ # The goal of this test is to check whether the overlap detection algorithm
+ # works when the rectangle is entirely included in a chunk of the text layout.
+ # The text has been rotated 90 degrees around it's upper left corner,
+ # so it's enough to check with a small rectangle with small negative y coords.
+ .t.c find overlapping 5 -7 7 -5
+} -result {1}
destroy .t.c