|
2688 | 2688 | return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; |
2689 | 2689 | } |
2690 | 2690 |
|
| 2691 | + function getUsefulRect(rects, bias) { |
| 2692 | + var rect = nullRect |
| 2693 | + if (bias == "left") for (var i = 0; i < rects.length; i++) { |
| 2694 | + if ((rect = rects[i]).left != rect.right) break |
| 2695 | + } else for (var i = rects.length - 1; i >= 0; i--) { |
| 2696 | + if ((rect = rects[i]).left != rect.right) break |
| 2697 | + } |
| 2698 | + return rect |
| 2699 | + } |
| 2700 | + |
2691 | 2701 | function measureCharInner(cm, prepared, ch, bias) { |
2692 | 2702 | var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); |
2693 | 2703 | var node = place.node, start = place.start, end = place.end, collapse = place.collapse; |
|
2697 | 2707 | for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned |
2698 | 2708 | while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; |
2699 | 2709 | while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; |
2700 | | - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { |
| 2710 | + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) |
2701 | 2711 | rect = node.parentNode.getBoundingClientRect(); |
2702 | | - } else if (ie && cm.options.lineWrapping) { |
2703 | | - var rects = range(node, start, end).getClientRects(); |
2704 | | - if (rects.length) |
2705 | | - rect = rects[bias == "right" ? rects.length - 1 : 0]; |
2706 | | - else |
2707 | | - rect = nullRect; |
2708 | | - } else { |
2709 | | - rect = range(node, start, end).getBoundingClientRect() || nullRect; |
2710 | | - } |
| 2712 | + else |
| 2713 | + rect = getUsefulRect(range(node, start, end).getClientRects(), bias) |
2711 | 2714 | if (rect.left || rect.right || start == 0) break; |
2712 | 2715 | end = start; |
2713 | 2716 | start = start - 1; |
|
0 commit comments