enhancement
major
minor
major
minor
major
#29991
View layer: split-panel ignores unit="px" of a pane and treats its size as a weight
In a <split-panel> a pane configured with size="450" unit="px" is not 450 px wide. TLSplitPanel.tsx renders every pane with flex: <size> 1 0%, using the size as a flex-grow weight independent of its unit (PaneSizeConfig.getUnit()). A pixel pane next to a pane with the default size="50" unit="%" therefore gets 450/(450+50) = 90 % of the width (observed: 1202 px / 134 px at 1336 px) instead of 450 px plus the rest.
Reproduction: {{{#!xml <split-panel orientation="horizontal"> <panes> <pane size="450" unit="px"> ... </pane> <pane> ... </pane> </panes> </split-panel> }}}
Expected: a pixel pane keeps its pixel size (flex: 0 0 450px, still bounded by min-size and resizable via the handle); the percent panes share the remaining space by their weights, as documented on PaneSizeConfig.getSize().
Found while building the tab overflow demo of #29983 (that demo uses percent sizes).
Lösung
- Ein Bereich mit unit="px" wird mit seiner Pixelgröße als Basis dargestellt (flex: 0 1 <size>px): er behält seine Breite, solange Platz ist, und schrumpft in einem zu kleinen Fenster höchstens bis zu seiner min-size, statt den Split überlaufen zu lassen. Prozent-Bereiche teilen sich den übrigen Platz im Verhältnis ihrer Gewichte.
- Beim Verschieben eines Trenners (Maus oder Tastatur) behält jeder Bereich seine Einheit: ein Pixel-Bereich bekommt seine neue Pixelgröße, die Prozent-Bereiche neue Gewichte (ihr Anteil am Platz der offenen Prozent-Bereiche). Bisher wurden nach dem ersten Ziehen alle Bereiche auf Pixel umgestellt.
- Die personalisierten Größen werden in der konfigurierten Einheit des Bereichs gespeichert und wiederhergestellt. Bereits gespeicherte Pixelwerte bleiben als Gewichte im selben Verhältnis gültig.