Working on buffer stuff...
Trying to figure out how/if it fits...
This commit is contained in:
@@ -50,7 +50,7 @@ type AbsoluteLayout struct {
|
||||
cursor int
|
||||
disableTab bool
|
||||
|
||||
logger func(string)
|
||||
logger func(string, ...any)
|
||||
}
|
||||
|
||||
var _ Widget = (*AbsoluteLayout)(nil)
|
||||
@@ -209,10 +209,10 @@ func (w *AbsoluteLayout) Clear() {
|
||||
|
||||
func (w *AbsoluteLayout) SetDefaultAnchor(d LayoutFlag) { w.defAnchor = d }
|
||||
|
||||
func (w *AbsoluteLayout) SetLogger(l func(string)) { w.logger = l }
|
||||
func (w *AbsoluteLayout) Log(txt string) {
|
||||
func (w *AbsoluteLayout) SetLogger(l func(string, ...any)) { w.logger = l }
|
||||
func (w *AbsoluteLayout) Log(txt string, args ...any) {
|
||||
if w.logger != nil {
|
||||
w.logger(txt)
|
||||
w.logger(txt, args...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,21 +229,39 @@ func (w *AbsoluteLayout) updateWidgetLayouts() {
|
||||
for _, wd := range w.widgets {
|
||||
w.updateWidgetPos(wd)
|
||||
}
|
||||
var updated []Widget
|
||||
for wd := range w.wManualSizes {
|
||||
w.updateWidgetSize(wd)
|
||||
updated = append(updated, wd)
|
||||
}
|
||||
for wd := range w.wDynamicSizes {
|
||||
w.updateWidgetSize(wd)
|
||||
updated = append(updated, wd)
|
||||
}
|
||||
for i := range w.widgets {
|
||||
var next bool
|
||||
for j := range updated {
|
||||
if updated[j] == w.widgets[i] {
|
||||
next = true
|
||||
}
|
||||
}
|
||||
if next {
|
||||
continue
|
||||
}
|
||||
w.updateWidgetSize(w.widgets[i])
|
||||
}
|
||||
}
|
||||
|
||||
// Set a widgets position relative to the layout
|
||||
func (w *AbsoluteLayout) updateWidgetPos(wd Widget) {
|
||||
wd.SetPos(w.getRelPos(wd))
|
||||
p := w.getRelPos(wd)
|
||||
w.Log("%s: Setting Pos: %s (%d,%d)", w.Id(), wd.Id(), p.X, p.Y)
|
||||
wd.SetPos(p)
|
||||
}
|
||||
|
||||
func (w *AbsoluteLayout) updateWidgetSize(wd Widget) {
|
||||
if sz, ok := w.wManualSizes[wd]; ok {
|
||||
w.Log("%s: Updating Size: %s (%d,%d)", w.Id(), wd.Id(), sz.X, sz.Y)
|
||||
wd.SetW(sz.X)
|
||||
wd.SetH(sz.Y)
|
||||
return
|
||||
@@ -252,19 +270,17 @@ func (w *AbsoluteLayout) updateWidgetSize(wd Widget) {
|
||||
// X: Layout Width - Widget X
|
||||
// Y: Layout Height - Widget Y
|
||||
available := Coord{X: w.GetW() - wd.GetX(), Y: w.GetH() - wd.GetY()}
|
||||
ww := wd.WantW()
|
||||
if ww < available.X {
|
||||
wd.SetW(ww)
|
||||
} else if wd.MinW() < available.X {
|
||||
if wd.WantW() < available.X {
|
||||
wd.SetW(wd.WantW())
|
||||
} else if wd.MinW() > available.X {
|
||||
wd.SetW(available.X)
|
||||
} else {
|
||||
wd.SetW(wd.MinW())
|
||||
}
|
||||
|
||||
wh := wd.WantH()
|
||||
if wh < available.Y {
|
||||
wd.SetH(wh)
|
||||
} else if wd.MinH() < available.Y {
|
||||
if wd.WantH() < available.Y {
|
||||
wd.SetH(wd.WantH())
|
||||
} else if wd.MinH() > available.Y {
|
||||
wd.SetH(available.Y)
|
||||
} else {
|
||||
wd.SetH(wd.MinH())
|
||||
@@ -272,8 +288,13 @@ func (w *AbsoluteLayout) updateWidgetSize(wd Widget) {
|
||||
}
|
||||
|
||||
// Manually set the size of a widget, the Layout won't override it
|
||||
func (w *AbsoluteLayout) SetWidgetSize(wd Widget, sz Coord) { w.wManualSizes[wd] = sz }
|
||||
func (w *AbsoluteLayout) SetDynamicWidgetSize(wd Widget, flg LayoutFlag) { w.wDynamicSizes[wd] = flg }
|
||||
func (w *AbsoluteLayout) SetWidgetSize(wd Widget, sz Coord) {
|
||||
w.wManualSizes[wd] = sz
|
||||
}
|
||||
|
||||
func (w *AbsoluteLayout) SetDynamicWidgetSize(wd Widget, flg LayoutFlag) {
|
||||
w.wDynamicSizes[wd] = flg
|
||||
}
|
||||
|
||||
func (w *AbsoluteLayout) getRelPos(wd Widget) Coord {
|
||||
var p Coord
|
||||
@@ -339,6 +360,7 @@ func (w *AbsoluteLayout) DeleteIndex(idx int) {
|
||||
delete(w.wAnchor, p)
|
||||
}
|
||||
}
|
||||
|
||||
func (w *AbsoluteLayout) Delete(n Widget) {
|
||||
for i := 0; i < len(w.widgets); i++ {
|
||||
if w.widgets[i] == n {
|
||||
@@ -347,6 +369,7 @@ func (w *AbsoluteLayout) Delete(n Widget) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *AbsoluteLayout) IndexOf(n Widget) int {
|
||||
for i := range w.widgets {
|
||||
if w.widgets[i] == n {
|
||||
|
||||
Reference in New Issue
Block a user