]> git.mdlowis.com Git - archive/afm.git/commitdiff
First crack at window management. it's shitty.
authorMichael D. Lowis <mike@mdlowis.com>
Mon, 21 Jul 2014 01:56:29 +0000 (21:56 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Mon, 21 Jul 2014 01:56:29 +0000 (21:56 -0400)
source/screen.c

index e2096cdd842ed4888f3f009c965d7c9627d9254b..9061c3ea1e6475ba4b74e20636c711f6f67a633d 100644 (file)
@@ -14,12 +14,12 @@ static void screen_place_windows(void);
 static frame_t* screen_frame_new(void);
 static void screen_frame_free(void* p_frame);
 
-static int Master_Idx;
+static frame_t* Master;
 static vec_t* Screen_List;
 
 void screen_init(void) {
-    Screen_List = vec_new(1, screen_frame_new());
-    Master_Idx = 0;
+    Master = screen_frame_new();
+    Screen_List = vec_new(0);
 }
 
 void screen_update(void) {
@@ -41,34 +41,39 @@ void screen_open(void) {
 }
 
 void screen_close(void) {
-    vec_erase(Screen_List, 0, 1);
+    vec_erase(Screen_List, 0, 0);
 }
 
 static void screen_place_windows(void) {
     frame_t* p_frame;
     int i, lines, cols;
     getmaxyx(stdscr, lines, cols);
-    move(0,0);
+
+    /* Print the master frame */
+    p_frame = Master;
+    mvwin(p_frame->p_win, 0, 0);
+    wresize(p_frame->p_win, lines, (vec_size(Screen_List) > 0) ? cols/2 : cols);
+    wclear(p_frame->p_win);
+    box(p_frame->p_win, 0 , 0);
+    wrefresh(p_frame->p_win);
+
+    /* Print any other frames we might have */
     for(i = 0; i < vec_size(Screen_List); i++) {
+        int height = (lines / vec_size(Screen_List));
         p_frame = (frame_t*)vec_at(Screen_List, i);
-        printw("%d", vec_size(Screen_List));
-        if(i == Master_Idx) {
-            wmove(p_frame->p_win, 0, 0);
-            wresize(p_frame->p_win, lines, (vec_size(Screen_List) == 1) ? cols : cols/2);
-            box(p_frame->p_win, 0 , 0);
-            wrefresh(p_frame->p_win);
-        } else {
-            wmove(p_frame->p_win, 0, cols/2);
-            wresize(p_frame->p_win, lines, cols/2);
-            box(p_frame->p_win, 0 , 0);
-            wrefresh(p_frame->p_win);
-        }
+        mvwin(p_frame->p_win, i*height, cols/2);
+        wresize(p_frame->p_win, height, cols/2);
+        wclear(p_frame->p_win);
+        wmove(p_frame->p_win, 1, 1);
+        wprintw(p_frame->p_win, "(%d, %d)", i*height, cols/2);
+        box(p_frame->p_win, 0 , 0);
+        wrefresh(p_frame->p_win);
     }
 }
 
 static frame_t* screen_frame_new(void) {
     frame_t* p_frame = (frame_t*)mem_allocate(sizeof(frame_t),&screen_frame_free);
-    p_frame->p_win = newwin(LINES, COLS, 0, 0);
+    p_frame->p_win = newwin(1, 1, 0, 0);
     return p_frame;
 }