diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-08-08 22:04:02 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-08-22 09:30:37 +0200 |
commit | 00e908e2ae1b851ef1b88f351bf0551bdd76c6fe (patch) | |
tree | e32139b32373aaddc68ab13d33d27f6b53acadb6 | |
parent | 9cffc45f0347e5c8b801c151955fa9326b9b2ba7 (diff) | |
download | aerc-00e908e2ae1b851ef1b88f351bf0551bdd76c6fe.tar.gz |
widgets: add dialog interface
Implement an interface for aerc's dialog implementation. Provide dialogs
the ability to set their own height and width of their drawing context.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | widgets/aerc.go | 9 | ||||
-rw-r--r-- | widgets/dialog.go | 24 |
2 files changed, 32 insertions, 1 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go index 2383973a..1e2a4cdd 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -187,7 +187,14 @@ func (aerc *Aerc) Draw(ctx *ui.Context) { aerc.grid.Draw(ctx) if aerc.dialog != nil { if w, h := ctx.Width(), ctx.Height(); w > 8 && h > 4 { - aerc.dialog.Draw(ctx.Subcontext(4, h/2-2, w-8, 4)) + if d, ok := aerc.dialog.(Dialog); ok { + start, height := d.ContextHeight() + aerc.dialog.Draw( + ctx.Subcontext(4, start(h), + w-8, height(h))) + } else { + aerc.dialog.Draw(ctx.Subcontext(4, h/2-2, w-8, 4)) + } } } } diff --git a/widgets/dialog.go b/widgets/dialog.go new file mode 100644 index 00000000..1af4456a --- /dev/null +++ b/widgets/dialog.go @@ -0,0 +1,24 @@ +package widgets + +import ( + "git.sr.ht/~rjarry/aerc/lib/ui" +) + +type Dialog interface { + ui.DrawableInteractive + ContextHeight() (func(int) int, func(int) int) +} + +type dialog struct { + ui.DrawableInteractive + y func(int) int + h func(int) int +} + +func (d *dialog) ContextHeight() (func(int) int, func(int) int) { + return d.y, d.h +} + +func NewDialog(d ui.DrawableInteractive, y func(int) int, h func(int) int) Dialog { + return &dialog{DrawableInteractive: d, y: y, h: h} +} |