(cm, changes, viewPort, forced)
| 422 | // DISPLAY DRAWING |
| 423 | |
| 424 | function updateDisplay(cm, changes, viewPort, forced) { |
| 425 | var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated; |
| 426 | var visible = visibleLines(cm.display, cm.doc, viewPort); |
| 427 | for (var first = true;; first = false) { |
| 428 | var oldWidth = cm.display.scroller.clientWidth; |
| 429 | if (!updateDisplayInner(cm, changes, visible, forced)) break; |
| 430 | updated = true; |
| 431 | changes = []; |
| 432 | updateSelection(cm); |
| 433 | updateScrollbars(cm); |
| 434 | if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) { |
| 435 | forced = true; |
| 436 | continue; |
| 437 | } |
| 438 | forced = false; |
| 439 | |
| 440 | // Clip forced viewport to actual scrollable area |
| 441 | if (viewPort) |
| 442 | viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, |
| 443 | typeof viewPort == "number" ? viewPort : viewPort.top); |
| 444 | visible = visibleLines(cm.display, cm.doc, viewPort); |
| 445 | if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo) |
| 446 | break; |
| 447 | } |
| 448 | |
| 449 | if (updated) { |
| 450 | signalLater(cm, "update", cm); |
| 451 | if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo) |
| 452 | signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo); |
| 453 | } |
| 454 | return updated; |
| 455 | } |
| 456 | |
| 457 | // Uses a set of changes plus the current scroll position to |
| 458 | // determine which DOM updates have to be made, and makes the |
no test coverage detected