Add TextEditorElement.pixelRectRangeForScreenRange for compatibility

This commit is contained in:
Nathan Sobo
2017-04-21 13:44:12 -06:00
committed by Antonio Scandurra
parent a5a80448cb
commit 305fd14cd9
2 changed files with 42 additions and 1 deletions

View File

@@ -329,6 +329,22 @@ describe('TextEditorElement', () => {
})
})
describe('::pixelRectForScreenRange(range)', () => {
it('returns a {top/left/width/height} object describing the rectangle between two screen positions, even if they are not on screen', async () => {
const element = buildTextEditorElement()
const editor = element.getModel()
editor.update({autoHeight: false})
element.getModel().setText('xxxxxxxxxxxxxxxxxxxxxx\n'.repeat(20))
element.style.height = '120px'
await element.getNextUpdatePromise()
element.setScrollTop(80)
await element.getNextUpdatePromise()
expect(element.getVisibleRowRange()).toEqual([4, 11])
expect(element.pixelRectForScreenRange([[2, 3], [13, 11]])).toEqual({top: 34, left: 22, height: 204, width: 57})
})
})
describe('events', () => {
let element = null

View File

@@ -1,4 +1,4 @@
const {Emitter} = require('atom')
const {Emitter, Range} = require('atom')
const Grim = require('grim')
const TextEditorComponent = require('./text-editor-component')
const dedent = require('dedent')
@@ -248,6 +248,31 @@ class TextEditorElement extends HTMLElement {
return this.getComponent().screenPositionForPixelPositionSync(pixelPosition)
}
pixelRectForScreenRange (range) {
range = Range.fromObject(range)
const start = this.pixelPositionForScreenPosition(range.start)
const end = this.pixelPositionForScreenPosition(range.end)
const lineHeight = this.getComponent().getLineHeight()
console.log(start, end);
return {
top: start.top,
left: start.left,
height: end.top + lineHeight - start.top,
width: end.left - start.left
}
}
pixelRangeForScreenRange (range) {
range = Range.fromObject(range)
return {
start: this.pixelPositionForScreenPosition(range.start),
end: this.pixelPositionForScreenPosition(range.end)
}
}
getComponent () {
if (!this.component) {
this.component = new TextEditorComponent({