source: neercs/trunk/src/wm.c @ 3914

Last change on this file since 3914 was 3914, checked in by Jean-Yves Lamoureux, 11 years ago
  • Added 'cube' window manager (needs latest svn libcaca for caca_fill_triangle_textured), at last.
  • Property svn:keywords set to Id
File size: 26.3 KB
Line 
1/*
2 *  neercs        console-based window manager
3 *  Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
4 *                2008 Jean-Yves Lamoureux <jylam@lnxscene.org>
5 *                All Rights Reserved
6 *
7 *  $Id: wm.c 3914 2009-11-17 15:36:37Z jylam $
8 *
9 *  This program is free software. It comes without any warranty, to
10 *  the extent permitted by applicable law. You can redistribute it
11 *  and/or modify it under the terms of the Do What The Fuck You Want
12 *  To Public License, Version 2, as published by Sam Hocevar. See
13 *  http://sam.zoy.org/wtfpl/COPYING for more details.
14 */
15
16#include <stdio.h>
17#include <caca.h>
18#include <caca.h>
19#include <stdlib.h>
20#include <math.h>
21
22#include "neercs.h"
23
24
25void resize_screen(struct screen *s, int w, int h)
26{
27    caca_canvas_t *old, *new;
28
29    if(w==s->w && h==s->h) return;
30    if(w <= 0 || h <= 0) return;
31
32    s->changed = 1;
33
34    s->w = w;
35    s->h = h;
36
37    /* caca_set_canvas_boundaries() is bugged as hell,
38     * so let's resize it by hands */
39    old = s->cv;
40    new = caca_create_canvas(w, h);
41    caca_blit(new, 0, 0, old, NULL);
42    s->cv = new;
43    caca_gotoxy(new, caca_get_cursor_x(old), caca_get_cursor_y(old));
44    caca_free_canvas(old);
45    set_tty_size(s->fd, w, h);
46
47    s->orig_w = s->w;
48    s->orig_h = s->h;
49    s->orig_x = s->x;
50    s->orig_y = s->y;
51}
52
53void update_windows_props(struct screen_list *screen_list)
54{
55    debug("%s, %d screens, type %d\n", __FUNCTION__, screen_list->count, screen_list->wm_type);
56   
57    if(!screen_list->count) return;
58
59    switch(screen_list->wm_type)
60    {
61    case WM_CARD:
62        update_windows_props_cards(screen_list);
63        break;
64    case WM_HSPLIT:
65        update_windows_props_hsplit(screen_list);
66        break;
67    case WM_VSPLIT:
68        update_windows_props_vsplit(screen_list);
69        break;
70    case WM_CUBE:
71        update_windows_props_cube(screen_list);
72        break;
73    case WM_FULL:
74    default:
75        update_windows_props_full(screen_list);
76        break;
77    }
78}
79
80void update_windows_props_hsplit(struct screen_list *screen_list)
81{
82    int i;
83    int w = (screen_list->width / screen_list->count) - 1;
84    int h = screen_list->height - 2;
85
86    for(i = 0; i < screen_list->count; i++)
87    {
88        screen_list->screen[i]->x = (i*w)+1;
89        screen_list->screen[i]->y = 1;
90        screen_list->screen[i]->visible = 1;
91        if(i != screen_list->count -1)
92        {
93            resize_screen(screen_list->screen[i],
94                          w - 1, h);
95        } else {
96            resize_screen(screen_list->screen[i],
97                          screen_list->width - i*w - 2,
98                          h);
99        }
100    }
101}
102
103void update_windows_props_vsplit(struct screen_list *screen_list)
104{
105    int i;
106    int w = screen_list->width - 2;
107    int h = (screen_list->height) / screen_list->count;
108
109    for(i = 0; i < screen_list->count; i++)
110    {
111        screen_list->screen[i]->x = 1;
112        screen_list->screen[i]->y = (i*h) + 1;
113        screen_list->screen[i]->visible = 1;
114        if(i != screen_list->count -1)
115        {
116            resize_screen(screen_list->screen[i],
117                          w, h - 2);
118        } else {
119            resize_screen(screen_list->screen[i],
120                          w,
121                          screen_list->height - i*h - 2);
122        }
123    }
124}
125
126
127void update_windows_props_full(struct screen_list *screen_list)
128{
129    int i;
130    int w = screen_list->width - 2;
131    int h = screen_list->height - 2;
132
133    for(i = 0; i < screen_list->count; i++)
134    {
135        screen_list->screen[i]->visible = 0;
136        screen_list->screen[i]->x = 1;
137        screen_list->screen[i]->y = 1;
138
139        resize_screen(screen_list->screen[i],
140                      w, h);
141    }
142    screen_list->screen[screen_list->pty]->visible = 1;
143}
144
145
146void update_windows_props_cards(struct screen_list *screen_list)
147{
148    int i;
149    int w = (screen_list->width  - screen_list->count*3) + 1;
150    int h = (screen_list->height - screen_list->count) - 1;
151    int x = 1;
152    int y = screen_list->count;
153
154    for(i = 0; i < screen_list->count; i++)
155    {
156        screen_list->screen[i]->visible = 1;
157        screen_list->screen[i]->x = x;
158        screen_list->screen[i]->y = y;
159
160        resize_screen(screen_list->screen[i],
161                      w, h);
162        x += 3;
163        y--;
164    }
165}
166
167void update_windows_props_cube(struct screen_list *screen_list)
168{
169    int i;
170    int w = screen_list->width - 2;
171    int h = screen_list->height - 2;
172   
173    for(i = 0; i < screen_list->count; i++)
174    {
175        screen_list->screen[i]->visible = 0;
176        screen_list->screen[i]->x = 1;
177        screen_list->screen[i]->y = 1;
178       
179        resize_screen(screen_list->screen[i],
180                      w, h);
181    }
182    screen_list->screen[screen_list->pty]->visible = 1;
183}
184
185/* Window managers refresh */
186
187void wm_refresh(struct screen_list *screen_list)
188{
189    switch (screen_list->wm_type) {
190        case WM_CARD:
191            wm_refresh_card(screen_list);
192            break;
193        case WM_FULL:
194            wm_refresh_full(screen_list);
195            break;
196        case WM_HSPLIT:
197            wm_refresh_hsplit(screen_list);
198            break;
199        case WM_VSPLIT:
200            wm_refresh_hsplit(screen_list);
201            break;
202        case WM_CUBE:
203            wm_refresh_cube(screen_list);
204            break;
205        default:
206            wm_refresh_full(screen_list);
207            break;
208    }
209}
210
211void wm_refresh_card(struct screen_list *screen_list)
212{
213    int i;
214   
215    for(i = screen_list->count - 1; i >=0; i--)
216    {
217        if(i!=screen_list->pty && screen_list->screen[i]->visible &&
218           (screen_list->screen[i]->changed || screen_list->changed))
219        {
220            caca_blit(screen_list->cv,
221                      screen_list->screen[i]->x,
222                      screen_list->screen[i]->y,
223                      screen_list->screen[i]->cv, NULL);
224           
225            caca_draw_cp437_box(screen_list->cv,
226                                screen_list->screen[i]->x - 1,
227                                screen_list->screen[i]->y - 1,
228                                screen_list->screen[i]->w + 2,
229                                screen_list->screen[i]->h + 2);
230            if(screen_list->screen[i]->title)
231                caca_printf(screen_list->cv,
232                            screen_list->screen[i]->x,
233                            screen_list->screen[i]->y - 1,
234                            " %.*s ",
235                            screen_list->screen[i]->w - 3,
236                            screen_list->screen[i]->title);
237        }
238    }
239   
240    if(screen_list->screen[screen_list->pty]->changed || screen_list->changed)
241        caca_blit(screen_list->cv,
242                  screen_list->screen[screen_list->pty]->x,
243                  screen_list->screen[screen_list->pty]->y,
244                  screen_list->screen[screen_list->pty]->cv, NULL);
245   
246    if(screen_list->screen[screen_list->pty]->bell)
247    {
248        caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
249        screen_list->screen[screen_list->pty]->bell = 0;
250        screen_list->in_bell--;
251    }
252    else
253    {
254        caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
255    }
256   
257    caca_draw_cp437_box(screen_list->cv,
258                        screen_list->screen[screen_list->pty]->x - 1,
259                        screen_list->screen[screen_list->pty]->y - 1,
260                        screen_list->screen[screen_list->pty]->w + 2,
261                        screen_list->screen[screen_list->pty]->h + 2);
262   
263    if(screen_list->screen[screen_list->pty]->title)
264    {
265        caca_printf(screen_list->cv,
266                    screen_list->screen[screen_list->pty]->x,
267                    screen_list->screen[screen_list->pty]->y - 1,
268                    " %.*s ",
269                    screen_list->screen[screen_list->pty]->w - 3,
270                    screen_list->screen[screen_list->pty]->title);
271    }
272   
273   
274}
275
276
277void wm_refresh_full(struct screen_list *screen_list)
278{
279    int i;
280   
281    for(i = screen_list->count - 1; i >=0; i--)
282    {
283        if(i!=screen_list->pty && screen_list->screen[i]->visible &&
284           (screen_list->screen[i]->changed || screen_list->changed))
285        {
286            caca_blit(screen_list->cv,
287                      screen_list->screen[i]->x,
288                      screen_list->screen[i]->y,
289                      screen_list->screen[i]->cv, NULL);
290           
291            caca_draw_cp437_box(screen_list->cv,
292                                screen_list->screen[i]->x - 1,
293                                screen_list->screen[i]->y - 1,
294                                screen_list->screen[i]->w + 2,
295                                screen_list->screen[i]->h + 2);
296            if(screen_list->screen[i]->title)
297                caca_printf(screen_list->cv,
298                            screen_list->screen[i]->x,
299                            screen_list->screen[i]->y - 1,
300                            " %.*s ",
301                            screen_list->screen[i]->w - 3,
302                            screen_list->screen[i]->title);
303        }
304    }
305   
306    if(screen_list->screen[screen_list->pty]->changed || screen_list->changed)
307        caca_blit(screen_list->cv,
308                  screen_list->screen[screen_list->pty]->x,
309                  screen_list->screen[screen_list->pty]->y,
310                  screen_list->screen[screen_list->pty]->cv, NULL);
311   
312    if(screen_list->screen[screen_list->pty]->bell)
313    {
314        caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
315        screen_list->screen[screen_list->pty]->bell = 0;
316        screen_list->in_bell--;
317    }
318    else
319    {
320        caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
321    }
322   
323    caca_draw_cp437_box(screen_list->cv,
324                        screen_list->screen[screen_list->pty]->x - 1,
325                        screen_list->screen[screen_list->pty]->y - 1,
326                        screen_list->screen[screen_list->pty]->w + 2,
327                        screen_list->screen[screen_list->pty]->h + 2);
328   
329    if(screen_list->screen[screen_list->pty]->title)
330    {
331        caca_printf(screen_list->cv,
332                    screen_list->screen[screen_list->pty]->x,
333                    screen_list->screen[screen_list->pty]->y - 1,
334                    " %.*s ",
335                    screen_list->screen[screen_list->pty]->w - 3,
336                    screen_list->screen[screen_list->pty]->title);
337    }
338   
339   
340}
341
342void wm_refresh_vsplit(struct screen_list *screen_list)
343{
344    int i;
345   
346    for(i = screen_list->count - 1; i >=0; i--)
347    {
348        if(i!=screen_list->pty && screen_list->screen[i]->visible &&
349           (screen_list->screen[i]->changed || screen_list->changed))
350        {
351            caca_blit(screen_list->cv,
352                      screen_list->screen[i]->x,
353                      screen_list->screen[i]->y,
354                      screen_list->screen[i]->cv, NULL);
355           
356            caca_draw_cp437_box(screen_list->cv,
357                                screen_list->screen[i]->x - 1,
358                                screen_list->screen[i]->y - 1,
359                                screen_list->screen[i]->w + 2,
360                                screen_list->screen[i]->h + 2);
361            if(screen_list->screen[i]->title)
362                caca_printf(screen_list->cv,
363                            screen_list->screen[i]->x,
364                            screen_list->screen[i]->y - 1,
365                            " %.*s ",
366                            screen_list->screen[i]->w - 3,
367                            screen_list->screen[i]->title);
368        }
369    }
370   
371    if(screen_list->screen[screen_list->pty]->changed || screen_list->changed)
372        caca_blit(screen_list->cv,
373                  screen_list->screen[screen_list->pty]->x,
374                  screen_list->screen[screen_list->pty]->y,
375                  screen_list->screen[screen_list->pty]->cv, NULL);
376   
377    if(screen_list->screen[screen_list->pty]->bell)
378    {
379        caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
380        screen_list->screen[screen_list->pty]->bell = 0;
381        screen_list->in_bell--;
382    }
383    else
384    {
385        caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
386    }
387   
388    caca_draw_cp437_box(screen_list->cv,
389                        screen_list->screen[screen_list->pty]->x - 1,
390                        screen_list->screen[screen_list->pty]->y - 1,
391                        screen_list->screen[screen_list->pty]->w + 2,
392                        screen_list->screen[screen_list->pty]->h + 2);
393   
394    if(screen_list->screen[screen_list->pty]->title)
395    {
396        caca_printf(screen_list->cv,
397                    screen_list->screen[screen_list->pty]->x,
398                    screen_list->screen[screen_list->pty]->y - 1,
399                    " %.*s ",
400                    screen_list->screen[screen_list->pty]->w - 3,
401                    screen_list->screen[screen_list->pty]->title);
402    }
403   
404   
405}
406
407void wm_refresh_hsplit(struct screen_list *screen_list)
408{
409    int i;
410   
411    for(i = screen_list->count - 1; i >=0; i--)
412    {
413        if(i!=screen_list->pty && screen_list->screen[i]->visible &&
414           (screen_list->screen[i]->changed || screen_list->changed))
415        {
416            caca_blit(screen_list->cv,
417                      screen_list->screen[i]->x,
418                      screen_list->screen[i]->y,
419                      screen_list->screen[i]->cv, NULL);
420           
421            caca_draw_cp437_box(screen_list->cv,
422                                screen_list->screen[i]->x - 1,
423                                screen_list->screen[i]->y - 1,
424                                screen_list->screen[i]->w + 2,
425                                screen_list->screen[i]->h + 2);
426            if(screen_list->screen[i]->title)
427                caca_printf(screen_list->cv,
428                            screen_list->screen[i]->x,
429                            screen_list->screen[i]->y - 1,
430                            " %.*s ",
431                            screen_list->screen[i]->w - 3,
432                            screen_list->screen[i]->title);
433        }
434    }
435   
436    if(screen_list->screen[screen_list->pty]->changed || screen_list->changed)
437        caca_blit(screen_list->cv,
438                  screen_list->screen[screen_list->pty]->x,
439                  screen_list->screen[screen_list->pty]->y,
440                  screen_list->screen[screen_list->pty]->cv, NULL);
441   
442    if(screen_list->screen[screen_list->pty]->bell)
443    {
444        caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
445        screen_list->screen[screen_list->pty]->bell = 0;
446        screen_list->in_bell--;
447    }
448    else
449    {
450        caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
451    }
452   
453    caca_draw_cp437_box(screen_list->cv,
454                        screen_list->screen[screen_list->pty]->x - 1,
455                        screen_list->screen[screen_list->pty]->y - 1,
456                        screen_list->screen[screen_list->pty]->w + 2,
457                        screen_list->screen[screen_list->pty]->h + 2);
458   
459    if(screen_list->screen[screen_list->pty]->title)
460    {
461        caca_printf(screen_list->cv,
462                    screen_list->screen[screen_list->pty]->x,
463                    screen_list->screen[screen_list->pty]->y - 1,
464                    " %.*s ",
465                    screen_list->screen[screen_list->pty]->w - 3,
466                    screen_list->screen[screen_list->pty]->title);
467    }
468   
469   
470}
471
472float get_direction(float p1x, float p1y, float p2x, float p2y, float p3x, float p3y) {
473    float d1x, d1y, d2x, d2y;
474   
475        d1x = p3x - p1x;
476        d1y = p3y - p1y;
477        d2x = p3x - p2x;
478        d2y = p3y - p2y;
479    return (d1x * d2y) - (d1y * d2x);
480}
481
482/* 3D Cube. Yeah I know, it's a mess. Just look anywhere else. */
483void wm_refresh_cube(struct screen_list *screen_list)
484{
485    int i;
486       
487    if(!screen_list->cube.in_switch) {
488        if(screen_list->screen[screen_list->pty]->changed || screen_list->changed) {
489            caca_blit(screen_list->cv,
490                      screen_list->screen[screen_list->pty]->x,
491                      screen_list->screen[screen_list->pty]->y,
492                      screen_list->screen[screen_list->pty]->cv, NULL);
493           
494        }
495       
496        if(screen_list->screen[screen_list->pty]->bell)
497        {
498            caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
499            screen_list->screen[screen_list->pty]->bell = 0;
500            screen_list->in_bell--;
501        }
502        else
503        {
504            caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
505        }
506       
507        caca_draw_cp437_box(screen_list->cv,
508                            screen_list->screen[screen_list->pty]->x - 1,
509                            screen_list->screen[screen_list->pty]->y - 1,
510                            screen_list->screen[screen_list->pty]->w + 2,
511                            screen_list->screen[screen_list->pty]->h + 2);
512       
513        if(screen_list->screen[screen_list->pty]->title)
514        {
515            caca_printf(screen_list->cv,
516                        screen_list->screen[screen_list->pty]->x,
517                        screen_list->screen[screen_list->pty]->y - 1,
518                        " %.*s ",
519                        screen_list->screen[screen_list->pty]->w - 3,
520                        screen_list->screen[screen_list->pty]->title);
521        }
522        screen_list->force_refresh = 0;
523    } else {
524       
525#define CUBE_TIME 1000000
526
527       
528       
529        long long unsigned int cur_time = get_us() - screen_list->last_switch;
530       
531        if(cur_time >= CUBE_TIME || screen_list->count==1) {
532            screen_list->changed = 1 ;     
533            screen_list->force_refresh = 1;
534            screen_list->cube.in_switch = 0;
535        } else {
536           
537            float cube[12][3] = {
538                {-1, -1,  1}, 
539                {1,  -1,  1}, 
540                {1,   1,  1},
541                {-1,  1,  1},
542               
543                {1,  -1,  1},
544                {1,  -1,  -1},
545                {1,   1,  -1},
546                {1,   1,  1},
547               
548                {-1,  -1,  1},
549                {-1,  -1,  -1},
550                {-1,   1,  -1},
551                {-1,   1,  1},
552            };
553            float cube_transformed[12][3];
554            float cube_projected[12][2];
555            float fov = 0.5f;
556            float angle = 90.0f * ((float)cur_time / (float)CUBE_TIME);
557            angle*= (M_PI/180.0f);
558           
559            if(screen_list->cube.side==1)
560                angle = -angle;
561           
562           
563            for(i = 0; i < 12; i++) {
564           
565                cube_transformed[i][2] = cube[i][2]*cos(angle) - cube[i][0]*sin(angle);
566                cube_transformed[i][0] = cube[i][2]*sin(angle) + cube[i][0]*cos(angle);
567                cube_transformed[i][1] = cube[i][1];
568               
569                cube_transformed[i][2] -= 3;
570               
571                cube_projected[i][0] = cube_transformed[i][0] / (cube_transformed[i][2] * fov);   
572                cube_projected[i][1] = cube_transformed[i][1] / (cube_transformed[i][2] * fov); 
573               
574                cube_projected[i][0] /=2.0f; cube_projected[i][1] /=2.0f;
575                cube_projected[i][0] +=0.5f; cube_projected[i][1] +=0.5f;
576               
577                cube_projected[i][0] *= screen_list->width;
578                cube_projected[i][1] *= screen_list->height;
579               
580
581            }
582            caca_clear_canvas(screen_list->cv);
583           
584            caca_canvas_t *first =  screen_list->screen[screen_list->prevpty]->cv;
585            caca_canvas_t *second = screen_list->screen[screen_list->pty]->cv;
586           
587            if(get_direction(cube_projected[0][0], cube_projected[0][1],
588                             cube_projected[1][0], cube_projected[1][1],
589                             cube_projected[2][0], cube_projected[2][1]) >=0) {
590                caca_fill_triangle_textured(screen_list->cv,
591                                            cube_projected[0][0], cube_projected[0][1],
592                                            cube_projected[1][0], cube_projected[1][1],
593                                            cube_projected[2][0], cube_projected[2][1],
594                                            1, 1,
595                                            0, 1,
596                                            0, 0,
597                                            first);
598                caca_fill_triangle_textured(screen_list->cv,
599                                            cube_projected[0][0], cube_projected[0][1],
600                                            cube_projected[2][0], cube_projected[2][1],
601                                            cube_projected[3][0], cube_projected[3][1],
602                                            1, 1,
603                                            0, 0,
604                                            1, 0,
605                                            first);
606               
607               
608                caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
609                caca_draw_thin_line(screen_list->cv,
610                                    cube_projected[0][0], cube_projected[0][1],
611                                    cube_projected[1][0], cube_projected[1][1]);
612                caca_draw_thin_line(screen_list->cv,
613                                    cube_projected[1][0], cube_projected[1][1],
614                                    cube_projected[2][0], cube_projected[2][1]);
615                caca_draw_thin_line(screen_list->cv,
616                                    cube_projected[2][0], cube_projected[2][1],
617                                    cube_projected[3][0], cube_projected[3][1]);
618                caca_draw_thin_line(screen_list->cv,
619                                    cube_projected[3][0], cube_projected[3][1],
620                                    cube_projected[0][0], cube_projected[0][1]);
621            }
622           
623           
624           
625            if(screen_list->cube.side)
626            {
627                if(get_direction(cube_projected[4][0], cube_projected[4][1],
628                                 cube_projected[5][0], cube_projected[5][1],
629                                 cube_projected[6][0], cube_projected[6][1]) >=0) {
630                caca_fill_triangle_textured(screen_list->cv,
631                                            cube_projected[4][0], cube_projected[4][1],
632                                            cube_projected[5][0], cube_projected[5][1],
633                                            cube_projected[6][0], cube_projected[6][1],
634                                            1, 1,
635                                            0, 1,
636                                            0, 0,
637                                            second);
638                caca_fill_triangle_textured(screen_list->cv,
639                                            cube_projected[4][0], cube_projected[4][1],
640                                            cube_projected[6][0], cube_projected[6][1],
641                                            cube_projected[7][0], cube_projected[7][1],
642                                            1, 1,
643                                            0, 0,
644                                            1, 0,
645                                            second);
646                caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
647
648                caca_draw_thin_line(screen_list->cv,
649                                    cube_projected[4][0], cube_projected[4][1],
650                                    cube_projected[5][0], cube_projected[5][1]);
651                caca_draw_thin_line(screen_list->cv,
652                                    cube_projected[5][0], cube_projected[5][1],
653                                    cube_projected[6][0], cube_projected[6][1]);
654                caca_draw_thin_line(screen_list->cv,
655                                    cube_projected[6][0], cube_projected[6][1],
656                                    cube_projected[7][0], cube_projected[7][1]);
657                caca_draw_thin_line(screen_list->cv,
658                                    cube_projected[7][0], cube_projected[7][1],
659                                    cube_projected[4][0], cube_projected[4][1]);
660                }
661               
662               
663            } else
664            {
665                if(get_direction(cube_projected[9][0], cube_projected[9][1],
666                                 cube_projected[8][0], cube_projected[8][1],
667                                 cube_projected[10][0], cube_projected[10][1])) {
668                caca_fill_triangle_textured(screen_list->cv,
669                                            cube_projected[9][0], cube_projected[9][1],
670                                            cube_projected[8][0], cube_projected[8][1],
671                                            cube_projected[10][0], cube_projected[10][1],
672                                            1, 1,
673                                            0, 1,
674                                            1, 0,
675                                            second);
676                caca_fill_triangle_textured(screen_list->cv,
677                                            cube_projected[8][0], cube_projected[8][1],
678                                            cube_projected[10][0], cube_projected[10][1],
679                                            cube_projected[11][0], cube_projected[11][1],
680                                            0, 1,
681                                            1, 0,
682                                            0, 0,
683                                            second);
684                caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
685                caca_draw_thin_line(screen_list->cv,
686                                    cube_projected[8][0], cube_projected[8][1],
687                                    cube_projected[9][0], cube_projected[9][1]);
688                caca_draw_thin_line(screen_list->cv,
689                                    cube_projected[9][0], cube_projected[9][1],
690                                    cube_projected[10][0], cube_projected[10][1]);
691                caca_draw_thin_line(screen_list->cv,
692                                    cube_projected[10][0], cube_projected[10][1],
693                                    cube_projected[11][0], cube_projected[11][1]);
694                caca_draw_thin_line(screen_list->cv,
695                                    cube_projected[11][0], cube_projected[11][1],
696                                    cube_projected[8][0], cube_projected[8][1]);
697                }
698            }
699           
700            screen_list->changed =1 ;     
701            screen_list->force_refresh = 1;
702            screen_list->cube.in_switch = 1;
703        }
704       
705    }
706}
707
Note: See TracBrowser for help on using the repository browser.