summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-08-08 22:04:02 +0200
committerRobin Jarry <robin@jarry.cc>2022-08-22 09:30:37 +0200
commit00e908e2ae1b851ef1b88f351bf0551bdd76c6fe (patch)
treee32139b32373aaddc68ab13d33d27f6b53acadb6
parent9cffc45f0347e5c8b801c151955fa9326b9b2ba7 (diff)
downloadaerc-00e908e2ae1b851ef1b88f351bf0551bdd76c6fe.tar.gz
aerc-00e908e2ae1b851ef1b88f351bf0551bdd76c6fe.zip
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.go9
-rw-r--r--widgets/dialog.go24
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}
+}