mirror of
https://github.com/atom/atom.git
synced 2026-02-08 05:35:04 -05:00
Prevent block decoration margins from collapsing during measurement
We now render a 1px high sentinel element between off-screen block decorations before measuring them to prevent margins from collapsing.
This commit is contained in:
@@ -120,6 +120,8 @@ class TextEditorComponent {
|
||||
this.horizontalPixelPositionsByScreenLineId = new Map() // Values are maps from column to horiontal pixel positions
|
||||
this.blockDecorationsToMeasure = new Set()
|
||||
this.blockDecorationsByElement = new WeakMap()
|
||||
this.blockDecorationSentinel = document.createElement('div')
|
||||
this.blockDecorationSentinel.style.height = '1px'
|
||||
this.heightsByBlockDecoration = new WeakMap()
|
||||
this.blockDecorationResizeObserver = new ResizeObserver(this.didResizeBlockDecorations.bind(this))
|
||||
this.lineNodesByScreenLineId = new Map()
|
||||
@@ -309,21 +311,22 @@ class TextEditorComponent {
|
||||
const parentElement = decorationElement.parentElement
|
||||
|
||||
if (!decorationElement.previousSibling) {
|
||||
const sentinelElement = document.createElement('div')
|
||||
const sentinelElement = this.blockDecorationSentinel.cloneNode()
|
||||
parentElement.insertBefore(sentinelElement, decorationElement)
|
||||
sentinelElements.add(sentinelElement)
|
||||
}
|
||||
|
||||
if (!decorationElement.nextSibling) {
|
||||
const sentinelElement = document.createElement('div')
|
||||
const sentinelElement = this.blockDecorationSentinel.cloneNode()
|
||||
parentElement.appendChild(sentinelElement)
|
||||
sentinelElements.add(sentinelElement)
|
||||
}
|
||||
|
||||
this.didMeasureVisibleBlockDecoration = true
|
||||
} else {
|
||||
blockDecorationMeasurementArea.appendChild(this.blockDecorationSentinel.cloneNode())
|
||||
blockDecorationMeasurementArea.appendChild(decorationElement)
|
||||
blockDecorationMeasurementArea.appendChild(document.createElement('div'))
|
||||
blockDecorationMeasurementArea.appendChild(this.blockDecorationSentinel.cloneNode())
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user