mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
🐛 Correctly measure RTL characters
This will fix also the "hidden cursor" issue we were experiencing. /cc: @izuzak
This commit is contained in:
parent
2ffa7da59e
commit
b7e373fdca
@ -103,6 +103,23 @@ describe "LinesYardstick", ->
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([2, 6])).toEqual({left: 72, top: 28})
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([5, 10])).toEqual({left: 120, top: 70})
|
||||
|
||||
it "correctly handles RTL characters", ->
|
||||
atom.styles.addStyleSheet """
|
||||
* {
|
||||
font-size: 14px;
|
||||
font-family: monospace;
|
||||
}
|
||||
"""
|
||||
|
||||
editor.setText("السلام عليكم")
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 0]).left).toBe 0
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 1]).left).toBe 8
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 2]).left).toBe 17
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 5]).left).toBe 34
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 7]).left).toBe 50
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 9]).left).toBe 67
|
||||
expect(linesYardstick.pixelPositionForScreenPosition([0, 11]).left).toBe 84
|
||||
|
||||
describe "::screenPositionForPixelPosition(pixelPosition)", ->
|
||||
it "converts pixel positions to screen positions", ->
|
||||
atom.styles.addStyleSheet """
|
||||
|
@ -161,20 +161,17 @@ class LinesYardstick
|
||||
0
|
||||
|
||||
leftPixelPositionForCharInTextNode: (lineNode, textNode, charIndex) ->
|
||||
@rangeForMeasurement.setStart(textNode, 0)
|
||||
@rangeForMeasurement.setEnd(textNode, charIndex)
|
||||
width = @rangeForMeasurement.getBoundingClientRect().width
|
||||
|
||||
@rangeForMeasurement.setStart(textNode, 0)
|
||||
@rangeForMeasurement.setEnd(textNode, textNode.textContent.length)
|
||||
left = @rangeForMeasurement.getBoundingClientRect().left
|
||||
|
||||
position =
|
||||
if charIndex is 0
|
||||
@rangeForMeasurement.setStart(textNode, 0)
|
||||
@rangeForMeasurement.getBoundingClientRect().left
|
||||
else if charIndex is textNode.textContent.length
|
||||
@rangeForMeasurement.setStart(textNode, 0)
|
||||
@rangeForMeasurement.getBoundingClientRect().right
|
||||
else
|
||||
@rangeForMeasurement.setStart(textNode, charIndex)
|
||||
@rangeForMeasurement.getBoundingClientRect().left
|
||||
offset = lineNode.getBoundingClientRect().left
|
||||
|
||||
position - lineNode.getBoundingClientRect().left
|
||||
left + width - offset
|
||||
|
||||
pixelRectForScreenRange: (screenRange) ->
|
||||
lineHeight = @model.getLineHeightInPixels()
|
||||
|
Loading…
Reference in New Issue
Block a user