MCPcopy Create free account
hub / github.com/cogentcore/core / setHandlePos

Method setHandlePos

core/splits.go:552–619  ·  view source on GitHub ↗

setHandlePos sets given splits handle position to given 0-1 normalized value. Handles are indexed 0..Tiles-1 for main tiles handles, then sequentially for any additional child sub-splits depending on tile config. Calls updateSplits after to ensure renormalization and NeedsLayout to ensure layout is

(idx int, val float32)

Source from the content-addressed store, hash-verified

550// Calls updateSplits after to ensure renormalization and
551// NeedsLayout to ensure layout is updated.
552func (sl *Splits) setHandlePos(idx int, val float32) {
553 val = math32.Clamp(val, 0, 1)
554
555 update := func(idx int, nw float32, s []float32) {
556 n := len(s)
557 old := s[idx]
558 sumTo := float32(0)
559 for i := range idx + 1 {
560 sumTo += s[i]
561 }
562 delta := nw - sumTo
563 uval := old + delta
564 if uval < 0 {
565 uval = 0
566 delta = -old
567 nw = sumTo + delta
568 }
569 rmdr := 1 - nw
570 oldrmdr := 1 - sumTo
571 if oldrmdr <= 0 {
572 if rmdr > 0 {
573 dper := rmdr / float32((n-1)-idx)
574 for i := idx + 1; i < n; i++ {
575 s[i] = dper
576 }
577 }
578 } else {
579 for i := idx + 1; i < n; i++ {
580 cur := s[i]
581 s[i] = rmdr * (cur / oldrmdr) // proportional
582 }
583 }
584 s[idx] = uval
585 }
586
587 nt := len(sl.Tiles)
588 if idx < nt-1 {
589 update(idx, val, sl.TileSplits)
590 sl.updateSplits()
591 sl.NeedsLayout()
592 return
593 }
594 ci := nt - 1
595 for i, t := range sl.Tiles {
596 tn := tileNumElements[t] - 1
597 if tn == 0 {
598 continue
599 }
600 if idx < ci || idx >= ci+tn {
601 ci += tn
602 continue
603 }
604 ri := idx - ci
605 switch t {
606 case TileSplit:
607 update(0, val, sl.SubSplits[i])
608 case TileFirstLong, TileSecondLong:
609 if ri == 0 {

Callers 1

InitMethod · 0.95

Calls 3

updateSplitsMethod · 0.95
ClampFunction · 0.92
NeedsLayoutMethod · 0.45

Tested by

no test coverage detected