perf(overview): avoid rebuilding cascade tiles for zoom measurements
- commit
- 50086d18721be4ec3c645c8c8ee547a697b46468
- author
- brice · · 2026-10-06 14:35 UTC
- parent
- da24396
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +8 -5
M internal/core/overview.go +8 -5
| @@ -771,10 +771,8 @@ func (w *Workspace) pile(y int, dim bool, front int) []Placement { | |||
| 771 | 771 | ch := int(math.Round(float64(r.H) * overviewCardZoom)) | |
| 772 | 772 | rowH := int(math.Round(float64(w.Usable.H) * w.overviewZoom())) | |
| 773 | 773 | if w.policy().wraps { | |
| 774 | - | rowH = w.rowHeight() - 4*w.peekStep() | |
| 775 | - | if len(w.stack()) <= 1 { | |
| 776 | - | rowH = w.rowHeight() | |
| 777 | - | } | |
| 774 | + | n, _ := w.cascadeBands() | |
| 775 | + | rowH = min(int(math.Round(float64(n*w.Usable.H)*w.overviewZoom())), u.H*8/10) | |
| 778 | 776 | } | |
| 779 | 777 | // Stack rows reserve two peek steps above the front card. Align the | |
| 780 | 778 | // stash with that front band, not with the top of its envelope. | |
| @@ -794,7 +792,12 @@ func (w *Workspace) pile(y int, dim bool, front int) []Placement { | |||
| 794 | 792 | func (w *Workspace) overviewZoom() float64 { | |
| 795 | 793 | // Only the span is read: the tiles go in the zoom scratch, dead on return. | |
| 796 | 794 | var preview overviewPreview | |
| 797 | - | w.zoomBuf, preview = w.previewTilesInto(w.zoomBuf[:0]) | |
| 795 | + | if w.policy().wraps { | |
| 796 | + | n, _ := w.cascadeBands() | |
| 797 | + | preview.bounds = Rect{W: w.Usable.W, H: n * w.Usable.H} | |
| 798 | + | } else { | |
| 799 | + | w.zoomBuf, preview = w.previewTilesInto(w.zoomBuf[:0]) | |
| 800 | + | } | |
| 798 | 801 | span := preview.bounds.W | |
| 799 | 802 | if span <= 0 { | |
| 800 | 803 | return overviewMaxZoom | |
| @@ -771,10 +771,8 @@ func (w *Workspace) pile(y int, dim bool, front int) []Placement { | |||||
| 771 | ch := int(math.Round(float64(r.H) * overviewCardZoom)) | 771 | ch := int(math.Round(float64(r.H) * overviewCardZoom)) | ||
| 772 | rowH := int(math.Round(float64(w.Usable.H) * w.overviewZoom())) | 772 | rowH := int(math.Round(float64(w.Usable.H) * w.overviewZoom())) | ||
| 773 | if w.policy().wraps { | 773 | if w.policy().wraps { | ||
| 774 | - | rowH = w.rowHeight() - 4*w.peekStep() | 774 | + | n, _ := w.cascadeBands() |
| 775 | - | if len(w.stack()) <= 1 { | 775 | + | rowH = min(int(math.Round(float64(n*w.Usable.H)*w.overviewZoom())), u.H*8/10) |
| 776 | - | rowH = w.rowHeight() | |||
| 777 | - | } | |||
| 778 | } | 776 | } | ||
| 779 | // Stack rows reserve two peek steps above the front card. Align the | 777 | // Stack rows reserve two peek steps above the front card. Align the | ||
| 780 | // stash with that front band, not with the top of its envelope. | 778 | // stash with that front band, not with the top of its envelope. | ||
| @@ -794,7 +792,12 @@ func (w *Workspace) pile(y int, dim bool, front int) []Placement { | |||||
| 794 | func (w *Workspace) overviewZoom() float64 { | 792 | func (w *Workspace) overviewZoom() float64 { | ||
| 795 | // Only the span is read: the tiles go in the zoom scratch, dead on return. | 793 | // Only the span is read: the tiles go in the zoom scratch, dead on return. | ||
| 796 | var preview overviewPreview | 794 | var preview overviewPreview | ||
| 797 | - | w.zoomBuf, preview = w.previewTilesInto(w.zoomBuf[:0]) | 795 | + | if w.policy().wraps { |
| 796 | + | n, _ := w.cascadeBands() | |||
| 797 | + | preview.bounds = Rect{W: w.Usable.W, H: n * w.Usable.H} | |||
| 798 | + | } else { | |||
| 799 | + | w.zoomBuf, preview = w.previewTilesInto(w.zoomBuf[:0]) | |||
| 800 | + | } | |||
| 798 | span := preview.bounds.W | 801 | span := preview.bounds.W | ||
| 799 | if span <= 0 { | 802 | if span <= 0 { | ||
| 800 | return overviewMaxZoom | 803 | return overviewMaxZoom | ||