mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Add TextEditorElement.pixelRectRangeForScreenRange for compatibility
This commit is contained in:
committed by
Antonio Scandurra
parent
a5a80448cb
commit
305fd14cd9
@@ -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
|
||||
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user