aboutsummaryrefslogtreecommitdiffstats
path: root/src/term.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c70
1 files changed, 30 insertions, 40 deletions
diff --git a/src/term.c b/src/term.c
index fe79cc5..49d214f 100644
--- a/src/term.c
+++ b/src/term.c
@@ -9,26 +9,18 @@
#include "pty-unix.h"
#include "window-xlib.h"
-static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop);
-
-void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[])
+RunesTerm *runes_term_new(int argc, char *argv[], RunesWindowBackendGlobal *wg)
{
+ RunesTerm *t;
int width, height;
- t->config = calloc(1, sizeof(RunesConfig));
- runes_config_init(t->config, argc, argv);
-
- t->display = calloc(1, sizeof(RunesDisplay));
- runes_display_init(t->display, t->config->font_name);
-
- t->w = calloc(1, sizeof(RunesWindowBackend));
- runes_window_backend_init(t->w);
-
- t->pty = calloc(1, sizeof(RunesPtyBackend));
- runes_pty_backend_init(t->pty);
+ t = calloc(1, sizeof(RunesTerm));
- t->scr = calloc(1, sizeof(VT100Screen));
- vt100_screen_init(t->scr);
+ t->config = runes_config_new(argc, argv);
+ t->display = runes_display_new(t->config->font_name);
+ t->w = runes_window_backend_new(wg);
+ t->pty = runes_pty_backend_new();
+ t->scr = vt100_screen_new(t->config->default_cols, t->config->default_rows);
vt100_screen_set_scrollback_length(t->scr, t->config->scrollback_length);
runes_window_backend_create_window(t, argc, argv);
@@ -38,22 +30,14 @@ void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[])
runes_window_backend_get_size(t, &width, &height);
runes_term_set_window_size(t, width, height);
- t->loop = loop;
- runes_term_init_loop(t, loop);
+ return t;
}
-void runes_term_refcnt_inc(RunesTerm *t)
+void runes_term_register_with_loop(RunesTerm *t, RunesLoop *loop)
{
- t->refcnt++;
-}
-
-void runes_term_refcnt_dec(RunesTerm *t)
-{
- t->refcnt--;
- if (t->refcnt <= 0) {
- runes_term_cleanup(t);
- free(t);
- }
+ t->loop = loop;
+ runes_window_backend_init_loop(t, loop);
+ runes_pty_backend_init_loop(t, loop);
}
void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel)
@@ -64,20 +48,26 @@ void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel)
vt100_screen_set_window_size(t->scr, row, col);
}
-void runes_term_cleanup(RunesTerm *t)
+void runes_term_refcnt_inc(RunesTerm *t)
{
- vt100_screen_cleanup(t->scr);
- free(t->scr);
-
- runes_display_cleanup(t->display);
- free(t->display);
+ t->refcnt++;
+}
- runes_config_cleanup(t->config);
- free(t->config);
+void runes_term_refcnt_dec(RunesTerm *t)
+{
+ t->refcnt--;
+ if (t->refcnt <= 0) {
+ runes_term_delete(t);
+ }
}
-static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop)
+void runes_term_delete(RunesTerm *t)
{
- runes_window_backend_init_loop(t, loop);
- runes_pty_backend_init_loop(t, loop);
+ vt100_screen_delete(t->scr);
+ runes_pty_backend_delete(t->pty);
+ runes_window_backend_delete(t->w);
+ runes_display_delete(t->display);
+ runes_config_delete(t->config);
+
+ free(t);
}