MCPcopy Create free account
hub / github.com/breck7/scroll / drawForLine

Function drawForLine

external/.scrollLibs.js:4515–4582  ·  view source on GitHub ↗
(line, fromArg, toArg)

Source from the content-addressed store, hash-verified

4513 }
4514
4515 function drawForLine(line, fromArg, toArg) {
4516 var lineObj = getLine(doc, line)
4517 var lineLen = lineObj.text.length
4518 var start, end
4519 function coords(ch, bias) {
4520 return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
4521 }
4522
4523 function wrapX(pos, dir, side) {
4524 var extent = wrappedLineExtentChar(cm, lineObj, null, pos)
4525 var prop = (dir == "ltr") == (side == "after") ? "left" : "right"
4526 var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1)
4527 return coords(ch, prop)[prop]
4528 }
4529
4530 var order = getOrder(lineObj, doc.direction)
4531 iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
4532 var ltr = dir == "ltr"
4533 var fromPos = coords(from, ltr ? "left" : "right")
4534 var toPos = coords(to - 1, ltr ? "right" : "left")
4535
4536 var openStart = fromArg == null && from == 0,
4537 openEnd = toArg == null && to == lineLen
4538 var first = i == 0,
4539 last = !order || i == order.length - 1
4540 if (toPos.top - fromPos.top <= 3) {
4541 // Single line
4542 var openLeft = (docLTR ? openStart : openEnd) && first
4543 var openRight = (docLTR ? openEnd : openStart) && last
4544 var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left
4545 var right = openRight ? rightSide : (ltr ? toPos : fromPos).right
4546 add(left, fromPos.top, right - left, fromPos.bottom)
4547 } else {
4548 // Multiple lines
4549 var topLeft, topRight, botLeft, botRight
4550 if (ltr) {
4551 topLeft = docLTR && openStart && first ? leftSide : fromPos.left
4552 topRight = docLTR ? rightSide : wrapX(from, dir, "before")
4553 botLeft = docLTR ? leftSide : wrapX(to, dir, "after")
4554 botRight = docLTR && openEnd && last ? rightSide : toPos.right
4555 } else {
4556 topLeft = !docLTR ? leftSide : wrapX(from, dir, "before")
4557 topRight = !docLTR && openStart && first ? rightSide : fromPos.right
4558 botLeft = !docLTR && openEnd && last ? leftSide : toPos.left
4559 botRight = !docLTR ? rightSide : wrapX(to, dir, "after")
4560 }
4561 add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom)
4562 if (fromPos.bottom < toPos.top) {
4563 add(leftSide, fromPos.bottom, null, toPos.top)
4564 }
4565 add(botLeft, toPos.top, botRight - botLeft, toPos.bottom)
4566 }
4567
4568 if (!start || cmpCoords(fromPos, start) < 0) {
4569 start = fromPos
4570 }
4571 if (cmpCoords(toPos, start) < 0) {
4572 start = toPos

Callers 1

drawSelectionRangeFunction · 0.85

Calls 7

getLineFunction · 0.85
iterateBidiSectionsFunction · 0.85
coordsFunction · 0.85
wrapXFunction · 0.85
cmpCoordsFunction · 0.85
getOrderFunction · 0.70
addFunction · 0.70

Tested by

no test coverage detected