MCPcopy
hub / github.com/lxn/walk / boxLayoutItems

Function boxLayoutItems

boxlayout.go:269–559  ·  view source on GitHub ↗

boxLayoutItems lays out items. bounds parameter is in native pixels.

(container ContainerLayoutItem, items []LayoutItem, orientation Orientation, alignment Alignment2D, bounds Rectangle, margins96dpi Margins, spacing96dpi int, hwnd2StretchFactor map[win.HWND]int)

Source from the content-addressed store, hash-verified

267
268// boxLayoutItems lays out items. bounds parameter is in native pixels.
269func boxLayoutItems(container ContainerLayoutItem, items []LayoutItem, orientation Orientation, alignment Alignment2D, bounds Rectangle, margins96dpi Margins, spacing96dpi int, hwnd2StretchFactor map[win.HWND]int) []LayoutResultItem {
270 if len(items) == 0 {
271 return nil
272 }
273
274 dpi := container.Context().dpi
275 margins := MarginsFrom96DPI(margins96dpi, dpi)
276 spacing := IntFrom96DPI(spacing96dpi, dpi)
277
278 var greedyNonSpacerCount int
279 var greedySpacerCount int
280 var stretchFactorsTotal [3]int
281 stretchFactors := make([]int, len(items))
282 var minSizesRemaining int
283 minSizes := make([]int, len(items))
284 maxSizes := make([]int, len(items))
285 sizes := make([]int, len(items))
286 prefSizes2 := make([]int, len(items))
287 var shrinkableAmount1Total int
288 shrinkableAmount1 := make([]int, len(items))
289 shrinkable2 := make([]bool, len(items))
290 growable2 := make([]bool, len(items))
291 sortedItemInfo := boxLayoutItemInfoList(make([]boxLayoutItemInfo, len(items)))
292
293 for i, item := range items {
294 sf := hwnd2StretchFactor[item.Handle()]
295 if sf == 0 {
296 sf = 1
297 }
298 stretchFactors[i] = sf
299
300 geometry := item.Geometry()
301
302 flags := item.LayoutFlags()
303
304 max := geometry.MaxSize
305 var pref Size
306 if hfw, ok := item.(HeightForWidther); !ok || !hfw.HasHeightForWidth() {
307 if is, ok := item.(IdealSizer); ok {
308 pref = is.IdealSize()
309 }
310 }
311
312 if orientation == Horizontal {
313 growable2[i] = flags&GrowableVert > 0
314
315 minSizes[i] = container.MinSizeEffectiveForChild(item).Width
316
317 if max.Width > 0 {
318 maxSizes[i] = max.Width
319 } else if pref.Width > 0 && flags&GrowableHorz == 0 {
320 maxSizes[i] = pref.Width
321 } else {
322 maxSizes[i] = 32768
323 }
324
325 prefSizes2[i] = pref.Height
326

Callers 4

MinSizeForSizeMethod · 0.85
PerformLayoutMethod · 0.85
MinSizeForSizeMethod · 0.85
PerformLayoutMethod · 0.85

Calls 12

MarginsFrom96DPIFunction · 0.85
IntFrom96DPIFunction · 0.85
boxLayoutItemInfoListTypeAlias · 0.85
miniFunction · 0.85
ContextMethod · 0.65
HandleMethod · 0.65
GeometryMethod · 0.65
LayoutFlagsMethod · 0.65
HasHeightForWidthMethod · 0.65
IdealSizeMethod · 0.65
HeightForWidthMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…