summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2014-12-07 18:50:46 (GMT)
committerfvogel <fvogelnew1@free.fr>2014-12-07 18:50:46 (GMT)
commitdd3d363f3b94a050a48b1d41f67a6e9aaba68fe9 (patch)
treeedea3d7e64db0f7b74403f011e18f42b7717596c
parent3911096b07e236df99e42d0a2002a439163e0a20 (diff)
downloadtk-dd3d363f3b94a050a48b1d41f67a6e9aaba68fe9.zip
tk-dd3d363f3b94a050a48b1d41f67a6e9aaba68fe9.tar.gz
tk-dd3d363f3b94a050a48b1d41f67a6e9aaba68fe9.tar.bz2
Fixed text yview scroll pixels|lines with elided lines
-rw-r--r--generic/tkTextDisp.c24
-rw-r--r--tests/textDisp.test47
2 files changed, 71 insertions, 0 deletions
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index 8281411..6b6d305 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -5285,6 +5285,18 @@ MeasureUp(
distance -= dlPtr->height;
if (distance <= 0) {
*dstPtr = dlPtr->index;
+
+ /*
+ * Adjust index to the start of the display line. This is
+ * needed because the start of a logical line is not always
+ * the start of a display line (this is however true if the
+ * eol is not elided).
+ */
+
+ if (TkTextIsElided(textPtr, dstPtr, NULL)) {
+ TkTextFindDisplayLineEnd(textPtr, dstPtr, 0,
+ NULL);
+ }
if (overlap != NULL) {
*overlap = -distance;
}
@@ -5677,6 +5689,18 @@ YScrollByLines(
offset++;
if (offset == 0) {
textPtr->topIndex = dlPtr->index;
+
+ /*
+ * Adjust index to the start of the display line. This is
+ * needed because the start of a logical line is not
+ * always the start of a display line (this is however
+ * true if the eol is not elided).
+ */
+
+ if (TkTextIsElided(textPtr, &textPtr->topIndex, NULL)) {
+ TkTextFindDisplayLineEnd(textPtr, &textPtr->topIndex, 0,
+ NULL);
+ }
break;
}
}
diff --git a/tests/textDisp.test b/tests/textDisp.test
index 71de1ac..471a096 100644
--- a/tests/textDisp.test
+++ b/tests/textDisp.test
@@ -2086,6 +2086,36 @@ test textDisp-16.41 {text count -xpixels with indices in elided lines} {
[.t count -xpixels 20.15 20.16] \
[.t count -xpixels 20.16 20.15]
} [list 0 0 0 0 0 0 0 0 $fixedWidth -$fixedWidth]
+test textDisp-16.42 {TkTextYviewCmd procedure with indices in elided lines} {
+ .t configure -wrap none
+ .t delete 1.0 end
+ for {set i 1} {$i < 100} {incr i} {
+ .t insert end [string repeat "Line $i" 20]
+ .t insert end "\n"
+ }
+ .t tag add hidden 5.15 20.15
+ .t tag configure hidden -elide true
+ .t yview 35.0
+ set res {}
+ .t yview scroll [expr {- 15 * $fixedHeight}] pixels
+ update
+ .t index @0,0
+} {5.0}
+test textDisp-16.43 {TkTextYviewCmd procedure with indices in elided lines} {
+ .t configure -wrap none
+ .t delete 1.0 end
+ for {set i 1} {$i < 100} {incr i} {
+ .t insert end [string repeat "Line $i" 20]
+ .t insert end "\n"
+ }
+ .t tag add hidden 5.15 20.15
+ .t tag configure hidden -elide true
+ .t yview 35.0
+ set res {}
+ .t yview scroll -15 units
+ update
+ .t index @0,0
+} {5.0}
.t delete 1.0 end
foreach i {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
@@ -2648,6 +2678,23 @@ test textDisp-19.17 {count -ypixels with indices in elided lines} {
update
lappend res [.t count -ypixels 5.0 25.0]
} [list [expr {4 * $fixedHeight}] [expr {3 * $fixedHeight}] 0 0 0 0 0 0 [expr {5 * $fixedHeight}] [expr {- 5 * $fixedHeight}] [expr {2 * $fixedHeight}] [expr {3 * $fixedHeight}] [expr {5 * $fixedHeight}]]
+test textDisp-19.18 {count -ypixels with indices in elided lines} {
+ .t configure -wrap none
+ .t delete 1.0 end
+ for {set i 1} {$i < 100} {incr i} {
+ .t insert end [string repeat "Line $i" 20]
+ .t insert end "\n"
+ }
+ .t tag add hidden 5.15 20.15
+ .t tag configure hidden -elide true
+ .t yview 35.0
+ set res {}
+ update
+ lappend res [.t count -ypixels 5.0 25.0]
+ .t yview scroll [expr {- 15 * $fixedHeight}] pixels
+ update
+ lappend res [.t count -ypixels 5.0 25.0]
+} [list [expr {5 * $fixedHeight}] [expr {5 * $fixedHeight}]]
.t delete 1.0 end
.t insert end "Line 1"
for {set i 2} {$i <= 200} {incr i} {