Changeset 2362 for neercs


Ignore:
Timestamp:
Jun 12, 2008, 2:42:43 PM (12 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Added window management skeleton (ctrl-a-w)
Location:
neercs/trunk/src
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/Makefile.am

    r2361 r2362  
    22bin_PROGRAMS = neercs
    33
    4 neercs_SOURCES = main.c neercs.h term.c effects.c
     4neercs_SOURCES = main.c neercs.h term.c effects.c wm.c
    55neercs_CFLAGS = @CACA_CFLAGS@
    66neercs_LDADD = @CACA_LIBS@ @UTIL_LIBS@
  • neercs/trunk/src/effects.c

    r2361 r2362  
    55 *                All Rights Reserved
    66 *
    7  *  $Id: main.c 2360 2008-06-11 16:23:46Z jylam $
     7 *  $Id: effects.c 2360 2008-06-11 16:23:46Z jylam $
    88 *
    99 *  This program is free software. It comes without any warranty, to
  • neercs/trunk/src/main.c

    r2361 r2362  
    3737
    3838static int create_pty(char *cmd, unsigned int w, unsigned int h);
    39 static int set_tty_size(int fd, unsigned int w, unsigned int h);
    4039
    4140int main(int argc, char **argv)
     
    8079
    8180    /* Create screen list */
    82     screen_list = (struct screen_list*)   malloc(sizeof(struct screen_list));
     81    screen_list = (struct screen_list*)     malloc(sizeof(struct screen_list));
    8382    screen_list->screen = (struct screen**) malloc(sizeof(sizeof(struct screen*)));
    8483    screen_list->count = 0;
     84    screen_list->wm_type = WM_VSPLIT;
     85    screen_list->width  = cucul_get_canvas_width(cv);
     86    screen_list->height = cucul_get_canvas_height(cv) - (mini*6);
     87
    8588
    8689    for(i = 0; i < nt; i++)
     
    103106    }
    104107
    105     cucul_set_color_ansi(cv, CUCUL_LIGHTRED, CUCUL_BLACK);
    106     cucul_draw_cp437_box(cv, (screen_list->count - 1 - pty) * XTAB, pty * YTAB,
    107                          w + (screen_list->count - 1 - pty) * XTAB + 1, h + pty * YTAB + 1);
     108    /* Windows are in a temporary state, resize them to the right dimensions */
     109    update_windows_props(cv, screen_list, pty);
    108110
    109111    caca_refresh_display(dp);
     
    197199        {
    198200            unsigned int c = caca_get_event_key_ch(&ev);
     201
    199202            if(command)
    200203            {
     
    231234                    prevpty = pty;
    232235                    pty = add_screen(screen_list, create_screen(w, h, default_shell));
     236                    refresh = 1;
     237                    break;
     238                case 'w':
     239                case 0x17: //CACA_KEY_CTRL_W:
     240                    screen_list->wm_type = (screen_list->wm_type==(WM_MAX-1)?
     241                                            screen_list->wm_type=0:
     242                                            screen_list->wm_type+1);
    233243                    refresh = 1;
    234244                    break;
     
    247257                case CACA_KEY_RIGHT:
    248258                    write(screen_list->screen[pty]->fd, "\x1b[C", 3); break;
    249                 case CACA_KEY_LEFT:
    250                     write(screen_list->screen[pty]->fd, "\x1b[D", 3); break;
    251259                default:
    252260                    write(screen_list->screen[pty]->fd, &c, 1); break;
     
    256264        else if(ret && (caca_get_event_type(&ev) & CACA_EVENT_RESIZE))
    257265        {
    258             w = cucul_get_canvas_width(cv);
    259             h = cucul_get_canvas_height(cv);
    260             w = w <= XTAB * screen_list->count ? 1 : w - XTAB * (screen_list->count - 1) - 2;
    261             h = h <= YTAB * screen_list->count ? 1 : h - YTAB * (screen_list->count - 1) - 2;
    262             for(i = 0; i < screen_list->count; i++)
    263             {
    264                 cucul_set_canvas_size(screen_list->screen[i]->cv, w, h);
    265                 if(screen_list->screen[i]->fd >= 0)
    266                     set_tty_size(screen_list->screen[i]->fd, w, h);
    267             }
     266            update_windows_props(cv, screen_list, pty);
     267
    268268            cucul_clear_canvas(cv);
    269269            refresh = 1;
     
    278278        {
    279279            refresh = 0;
     280
     281            screen_list->width  = cucul_get_canvas_width(cv);
     282            screen_list->height = cucul_get_canvas_height(cv) - (mini*6);
     283
     284            update_windows_props(cv, screen_list, pty);
     285
    280286
    281287            cucul_set_color_ansi(cv, CUCUL_DEFAULT, CUCUL_DEFAULT);
     
    285291            for(i = 0; i < screen_list->count; i++)
    286292            {
    287                 int n = screen_list->count;
    288                 if(screen_list->screen[i]->fd < 0)
    289                     continue;
    290                 int j = (pty + n - 1 - i) % n;
    291                 cucul_blit(cv, (n - 1 - j) * XTAB + 1,
    292                            j * YTAB + 1, screen_list->screen[j]->cv, NULL);
    293                 cucul_draw_cp437_box(cv, (n - 1 - j) * XTAB, j * YTAB,
    294                                      screen_list->screen[j]->w+1,
    295                                      screen_list->screen[j]->h+1);
    296                 /* Set cursor to the correct position */
    297                 if(i == n - 1)
    298                     cucul_gotoxy(cv, (n - 1 - j) * XTAB + 1
    299                                  + cucul_get_cursor_x(screen_list->screen[j]->cv),
    300                                  j * YTAB + 1
    301                                  + cucul_get_cursor_y(screen_list->screen[j]->cv));
    302             }
     293
     294                if(i!=pty)
     295                {
     296                    cucul_blit(cv,
     297                               screen_list->screen[i]->x,
     298                               screen_list->screen[i]->y,
     299                               screen_list->screen[i]->cv, NULL);
     300                }
     301                cucul_draw_cp437_box(cv,
     302                                     screen_list->screen[i]->x - 1,
     303                                     screen_list->screen[i]->y - 1,
     304                                     screen_list->screen[i]->w + 2,
     305                                     screen_list->screen[i]->h + 2);
     306
     307            }
     308
     309
     310            cucul_blit(cv,
     311                       screen_list->screen[pty]->x,
     312                       screen_list->screen[pty]->y,
     313                   screen_list->screen[pty]->cv, NULL);
     314            cucul_gotoxy(cv,
     315                         screen_list->screen[pty]->x + cucul_get_cursor_x(screen_list->screen[pty]->cv),
     316                         screen_list->screen[pty]->y + cucul_get_cursor_y(screen_list->screen[pty]->cv));
     317
    303318
    304319            if(mini)
     
    365380}
    366381
    367 static int set_tty_size(int fd, unsigned int w, unsigned int h)
     382int set_tty_size(int fd, unsigned int w, unsigned int h)
    368383{
    369384    struct winsize ws;
  • neercs/trunk/src/neercs.h

    r2360 r2362  
    1717#include <cucul.h>
    1818
     19enum wm_types
     20{
     21    WM_FULL,
     22    WM_CARD,
     23    WM_HSPLIT,
     24    WM_VSPLIT,
    1925
     26    WM_MAX,
     27};
    2028
    2129struct screen
     
    4149struct screen_list
    4250{
    43   int count;
    44   struct screen **screen;
     51    int wm_type;
     52    int count;
     53    int width, height;
     54    struct screen **screen;
    4555};
    4656
     
    5060void draw_thumbnails(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
    5161
     62int set_tty_size(int fd, unsigned int w, unsigned int h);
    5263
    5364
     
    5768int add_screen(struct screen_list *list, struct screen *s);
    5869int remove_screen(struct screen_list *list, int n);
     70void resize_screen(struct screen *s, int z, int h);
    5971
     72/* Window managers */
     73void update_windows_props(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
     74void update_windows_props_cards(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
     75void update_windows_props_hsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
     76void update_windows_props_full(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
     77void update_windows_props_vsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty);
    6078
    6179
Note: See TracChangeset for help on using the changeset viewer.