From 3911096b07e236df99e42d0a2002a439163e0a20 Mon Sep 17 00:00:00 2001
From: fvogel <fvogelnew1@free.fr>
Date: Fri, 5 Dec 2014 23:39:32 +0000
Subject: Fixed text count -ypixels with indices in elided lines

---
 generic/tkTextDisp.c |  9 ++++++---
 tests/textDisp.test  | 28 ++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index 851ee3e..8281411 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -3601,15 +3601,18 @@ TkTextIndexYPixels(
     int pixelHeight;
     TkTextIndex index;
 
-    pixelHeight = TkBTreePixelsTo(textPtr, indexPtr->linePtr);
+    index = *indexPtr;
+    TkTextFindDisplayLineEnd(textPtr, &index, 0, NULL);
+
+    pixelHeight = TkBTreePixelsTo(textPtr, index.linePtr);
 
     /*
      * Iterate through all display-lines corresponding to the single logical
-     * line belonging to indexPtr, adding up the pixel height of each such
+     * line belonging to index, adding up the pixel height of each such
      * display line as we go along, until we go past 'indexPtr'.
      */
 
-    if (indexPtr->byteIndex == 0) {
+    if (index.byteIndex == 0) {
 	return pixelHeight;
     }
 
diff --git a/tests/textDisp.test b/tests/textDisp.test
index c3ed43f..71de1ac 100644
--- a/tests/textDisp.test
+++ b/tests/textDisp.test
@@ -2620,6 +2620,34 @@ test textDisp-19.16 {count -ypixels} {
       [.t count -ypixels 16.0 "16.0 displaylineend +1c"] \
       [.t count -ypixels "16.0 +1 displaylines" "16.0 +4 displaylines +3c"]
 } [list [expr {260 + 20 * $fixedDiff}] [expr {260 + 20 * $fixedDiff}] $fixedHeight [expr {2*$fixedHeight}] $fixedHeight [expr {3*$fixedHeight}]]
+test textDisp-19.17 {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
+    set res {}
+    update
+    lappend res \
+      [.t count -ypixels 1.0 6.0] \
+      [.t count -ypixels 2.0 7.5] \
+      [.t count -ypixels 5.0 8.5] \
+      [.t count -ypixels 6.1 6.2] \
+      [.t count -ypixels 6.1 18.8] \
+      [.t count -ypixels 18.0 20.50] \
+      [.t count -ypixels 5.2 20.60] \
+      [.t count -ypixels 20.60 20.70] \
+      [.t count -ypixels 5.0 25.0] \
+      [.t count -ypixels 25.0 5.0] \
+      [.t count -ypixels 25.4 27.50] \
+      [.t count -ypixels 35.0 38.0]
+    .t yview 35.0
+    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}]]
 .t delete 1.0 end
 .t insert end "Line 1"
 for {set i 2} {$i <= 200} {incr i} {
-- 
cgit v0.12