summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/kfgwm/include/kfg/window.h1
-rw-r--r--usr.bin/kfgwm/kfgwm.c40
-rw-r--r--usr.bin/kfgwm/window.c29
3 files changed, 47 insertions, 23 deletions
diff --git a/usr.bin/kfgwm/include/kfg/window.h b/usr.bin/kfgwm/include/kfg/window.h
index 781c2a5..a597969 100644
--- a/usr.bin/kfgwm/include/kfg/window.h
+++ b/usr.bin/kfgwm/include/kfg/window.h
@@ -61,6 +61,7 @@ struct kfg_text {
kfgpos_t y;
};
+struct kfg_window *kfg_win_new(struct kfg_window *parent, kfgpos_t x, kfgpos_t y);
int kfg_win_draw(struct kfg_window *parent, struct kfg_window *wp);
int kfg_win_putstr(struct kfg_window *wp, struct kfg_text *tp);
diff --git a/usr.bin/kfgwm/kfgwm.c b/usr.bin/kfgwm/kfgwm.c
index 3240a0b..5a9e7b8 100644
--- a/usr.bin/kfgwm/kfgwm.c
+++ b/usr.bin/kfgwm/kfgwm.c
@@ -33,6 +33,7 @@
#include <kfg/window.h>
#include <fcntl.h>
#include <stddef.h>
+#include <stdlib.h>
#include <unistd.h>
static struct fbattr fbattr;
@@ -42,23 +43,15 @@ static void
test_win(struct kfg_window *root, kfgpos_t x, kfgpos_t y, const char *str)
{
struct kfg_text text;
- struct kfg_window test_win;
-
- test_win.x = x;
- test_win.y = y;
- test_win.width = 250;
- test_win.height = 150;
- test_win.fb_pitch = fbattr.pitch;
- test_win.framebuf = framep;
- test_win.bg = KFG_DARK;
- test_win.border_bg = KFG_RED;
+ struct kfg_window *test_win;
+ test_win = kfg_win_new(root, x, y);
text.text = str;
text.x = 0;
text.y = 0;
- kfg_win_draw(root, &test_win);
- kfg_win_putstr(&test_win, &text);
+ kfg_win_draw(root, test_win);
+ kfg_win_putstr(test_win, &text);
}
int
@@ -66,7 +59,7 @@ main(void)
{
int fb_fd, fbattr_fd, prot;
size_t fb_size;
- struct kfg_window root_win;
+ struct kfg_window *root_win;
fb_fd = open("/dev/fb0", O_RDWR);
if (fb_fd < 0) {
@@ -86,16 +79,17 @@ main(void)
prot = PROT_READ | PROT_WRITE;
framep = mmap(NULL, fb_size, prot, MAP_SHARED, fb_fd, 0);
- root_win.x = 0;
- root_win.y = 0;
- root_win.width = fbattr.width;
- root_win.height = fbattr.height;
- root_win.fb_pitch = fbattr.pitch;
- root_win.framebuf = framep;
- root_win.bg = KFG_RED;
- root_win.border_bg = KFG_RED;
- test_win(&root_win, 40, 85, "Hello, World!");
- test_win(&root_win, 150, 20, "Mrow!");
+ root_win = malloc(sizeof(*root_win));
+ root_win->x = 0;
+ root_win->y = 0;
+ root_win->width = fbattr.width;
+ root_win->height = fbattr.height;
+ root_win->fb_pitch = fbattr.pitch;
+ root_win->framebuf = framep;
+ root_win->bg = KFG_RED;
+ root_win->border_bg = KFG_RED;
+ test_win(root_win, 40, 85, "Hello, World!");
+ test_win(root_win, 150, 20, "Mrow!");
for (;;);
}
diff --git a/usr.bin/kfgwm/window.c b/usr.bin/kfgwm/window.c
index 8954553..3908302 100644
--- a/usr.bin/kfgwm/window.c
+++ b/usr.bin/kfgwm/window.c
@@ -32,6 +32,7 @@
#include <sys/param.h>
#include <kfg/window.h>
#include <kfg/font.h>
+#include <stdlib.h>
#include <stddef.h>
#include <string.h>
@@ -158,6 +159,34 @@ kfg_win_draw(struct kfg_window *parent, struct kfg_window *wp)
return 0;
}
+/*
+ * Create a new default window
+ *
+ * @x: X position for this window
+ * @y: Y position for this window
+ * @w: Window width
+ * @h: Window height
+ */
+struct kfg_window *
+kfg_win_new(struct kfg_window *parent, kfgpos_t x, kfgpos_t y)
+{
+ struct kfg_window *wp;
+
+ if ((wp = malloc(sizeof(*wp))) == NULL) {
+ return NULL;
+ }
+
+ wp->x = x;
+ wp->y = y;
+ wp->width = 250;
+ wp->height = 150;
+ wp->fb_pitch = parent->fb_pitch;
+ wp->framebuf = parent->framebuf;
+ wp->bg = KFG_DARK;
+ wp->border_bg = KFG_RED;
+ return wp;
+}
+
int
kfg_win_putstr(struct kfg_window *wp, struct kfg_text *tp)
{