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

Last change on this file since 3916 was 3916, checked in by Sam Hocevar, 11 years ago

Temporary check for triangle texturing (SVN libcaca). If not available,
cube transitions will not work.

  • Property svn:keywords set to Id
File size: 26.4 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 3916 2009-11-17 16:09:21Z sam $
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
472#if defined HAVE_CACA_TRIANGLE_TEXTURING
473static float get_direction(float p1x, float p1y, float p2x, float p2y, float p3x, float p3y)
474{
475    float d1x, d1y, d2x, d2y;
476   
477        d1x = p3x - p1x;
478        d1y = p3y - p1y;
479        d2x = p3x - p2x;
480        d2y = p3y - p2y;
481    return (d1x * d2y) - (d1y * d2x);
482}
483#endif
484
485/* 3D Cube. Yeah I know, it's a mess. Just look anywhere else. */
486void wm_refresh_cube(struct screen_list *screen_list)
487{
488    int i;
489       
490    if(!screen_list->cube.in_switch) {
491        if(screen_list->screen[screen_list->pty]->changed || screen_list->changed) {
492            caca_blit(screen_list->cv,
493                      screen_list->screen[screen_list->pty]->x,
494                      screen_list->screen[screen_list->pty]->y,
495                      screen_list->screen[screen_list->pty]->cv, NULL);
496           
497        }
498       
499        if(screen_list->screen[screen_list->pty]->bell)
500        {
501            caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
502            screen_list->screen[screen_list->pty]->bell = 0;
503            screen_list->in_bell--;
504        }
505        else
506        {
507            caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
508        }
509       
510        caca_draw_cp437_box(screen_list->cv,
511                            screen_list->screen[screen_list->pty]->x - 1,
512                            screen_list->screen[screen_list->pty]->y - 1,
513                            screen_list->screen[screen_list->pty]->w + 2,
514                            screen_list->screen[screen_list->pty]->h + 2);
515       
516        if(screen_list->screen[screen_list->pty]->title)
517        {
518            caca_printf(screen_list->cv,
519                        screen_list->screen[screen_list->pty]->x,
520                        screen_list->screen[screen_list->pty]->y - 1,
521                        " %.*s ",
522                        screen_list->screen[screen_list->pty]->w - 3,
523                        screen_list->screen[screen_list->pty]->title);
524        }
525        screen_list->force_refresh = 0;
526    } else {
527       
528#define CUBE_TIME 1000000
529
530       
531       
532        long long unsigned int cur_time = get_us() - screen_list->last_switch;
533       
534        if(cur_time >= CUBE_TIME || screen_list->count==1) {
535            screen_list->changed = 1 ;     
536            screen_list->force_refresh = 1;
537            screen_list->cube.in_switch = 0;
538        } else {
539           
540            float cube[12][3] = {
541                {-1, -1,  1}, 
542                {1,  -1,  1}, 
543                {1,   1,  1},
544                {-1,  1,  1},
545               
546                {1,  -1,  1},
547                {1,  -1,  -1},
548                {1,   1,  -1},
549                {1,   1,  1},
550               
551                {-1,  -1,  1},
552                {-1,  -1,  -1},
553                {-1,   1,  -1},
554                {-1,   1,  1},
555            };
556            float cube_transformed[12][3];
557            float cube_projected[12][2];
558            float fov = 0.5f;
559            float angle = 90.0f * ((float)cur_time / (float)CUBE_TIME);
560            angle*= (M_PI/180.0f);
561           
562            if(screen_list->cube.side==1)
563                angle = -angle;
564           
565           
566            for(i = 0; i < 12; i++) {
567           
568                cube_transformed[i][2] = cube[i][2]*cos(angle) - cube[i][0]*sin(angle);
569                cube_transformed[i][0] = cube[i][2]*sin(angle) + cube[i][0]*cos(angle);
570                cube_transformed[i][1] = cube[i][1];
571               
572                cube_transformed[i][2] -= 3;
573               
574                cube_projected[i][0] = cube_transformed[i][0] / (cube_transformed[i][2] * fov);   
575                cube_projected[i][1] = cube_transformed[i][1] / (cube_transformed[i][2] * fov); 
576               
577                cube_projected[i][0] /=2.0f; cube_projected[i][1] /=2.0f;
578                cube_projected[i][0] +=0.5f; cube_projected[i][1] +=0.5f;
579               
580                cube_projected[i][0] *= screen_list->width;
581                cube_projected[i][1] *= screen_list->height;
582               
583
584            }
585            caca_clear_canvas(screen_list->cv);
586           
587#if defined HAVE_CACA_TRIANGLE_TEXTURING
588            caca_canvas_t *first =  screen_list->screen[screen_list->prevpty]->cv;
589            caca_canvas_t *second = screen_list->screen[screen_list->pty]->cv;
590
591            if(get_direction(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]) >=0) {
594                caca_fill_triangle_textured(screen_list->cv,
595                                            cube_projected[0][0], cube_projected[0][1],
596                                            cube_projected[1][0], cube_projected[1][1],
597                                            cube_projected[2][0], cube_projected[2][1],
598                                            1, 1,
599                                            0, 1,
600                                            0, 0,
601                                            first);
602                caca_fill_triangle_textured(screen_list->cv,
603                                            cube_projected[0][0], cube_projected[0][1],
604                                            cube_projected[2][0], cube_projected[2][1],
605                                            cube_projected[3][0], cube_projected[3][1],
606                                            1, 1,
607                                            0, 0,
608                                            1, 0,
609                                            first);
610               
611               
612                caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK);
613                caca_draw_thin_line(screen_list->cv,
614                                    cube_projected[0][0], cube_projected[0][1],
615                                    cube_projected[1][0], cube_projected[1][1]);
616                caca_draw_thin_line(screen_list->cv,
617                                    cube_projected[1][0], cube_projected[1][1],
618                                    cube_projected[2][0], cube_projected[2][1]);
619                caca_draw_thin_line(screen_list->cv,
620                                    cube_projected[2][0], cube_projected[2][1],
621                                    cube_projected[3][0], cube_projected[3][1]);
622                caca_draw_thin_line(screen_list->cv,
623                                    cube_projected[3][0], cube_projected[3][1],
624                                    cube_projected[0][0], cube_projected[0][1]);
625            }
626           
627           
628           
629            if(screen_list->cube.side)
630            {
631                if(get_direction(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]) >=0) {
634                caca_fill_triangle_textured(screen_list->cv,
635                                            cube_projected[4][0], cube_projected[4][1],
636                                            cube_projected[5][0], cube_projected[5][1],
637                                            cube_projected[6][0], cube_projected[6][1],
638                                            1, 1,
639                                            0, 1,
640                                            0, 0,
641                                            second);
642                caca_fill_triangle_textured(screen_list->cv,
643                                            cube_projected[4][0], cube_projected[4][1],
644                                            cube_projected[6][0], cube_projected[6][1],
645                                            cube_projected[7][0], cube_projected[7][1],
646                                            1, 1,
647                                            0, 0,
648                                            1, 0,
649                                            second);
650                caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
651
652                caca_draw_thin_line(screen_list->cv,
653                                    cube_projected[4][0], cube_projected[4][1],
654                                    cube_projected[5][0], cube_projected[5][1]);
655                caca_draw_thin_line(screen_list->cv,
656                                    cube_projected[5][0], cube_projected[5][1],
657                                    cube_projected[6][0], cube_projected[6][1]);
658                caca_draw_thin_line(screen_list->cv,
659                                    cube_projected[6][0], cube_projected[6][1],
660                                    cube_projected[7][0], cube_projected[7][1]);
661                caca_draw_thin_line(screen_list->cv,
662                                    cube_projected[7][0], cube_projected[7][1],
663                                    cube_projected[4][0], cube_projected[4][1]);
664                }
665               
666               
667            } else
668            {
669                if(get_direction(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                caca_fill_triangle_textured(screen_list->cv,
673                                            cube_projected[9][0], cube_projected[9][1],
674                                            cube_projected[8][0], cube_projected[8][1],
675                                            cube_projected[10][0], cube_projected[10][1],
676                                            1, 1,
677                                            0, 1,
678                                            1, 0,
679                                            second);
680                caca_fill_triangle_textured(screen_list->cv,
681                                            cube_projected[8][0], cube_projected[8][1],
682                                            cube_projected[10][0], cube_projected[10][1],
683                                            cube_projected[11][0], cube_projected[11][1],
684                                            0, 1,
685                                            1, 0,
686                                            0, 0,
687                                            second);
688                caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK);
689                caca_draw_thin_line(screen_list->cv,
690                                    cube_projected[8][0], cube_projected[8][1],
691                                    cube_projected[9][0], cube_projected[9][1]);
692                caca_draw_thin_line(screen_list->cv,
693                                    cube_projected[9][0], cube_projected[9][1],
694                                    cube_projected[10][0], cube_projected[10][1]);
695                caca_draw_thin_line(screen_list->cv,
696                                    cube_projected[10][0], cube_projected[10][1],
697                                    cube_projected[11][0], cube_projected[11][1]);
698                caca_draw_thin_line(screen_list->cv,
699                                    cube_projected[11][0], cube_projected[11][1],
700                                    cube_projected[8][0], cube_projected[8][1]);
701                }
702            }
703#endif
704           
705            screen_list->changed =1 ;     
706            screen_list->force_refresh = 1;
707            screen_list->cube.in_switch = 1;
708        }
709       
710    }
711}
712
Note: See TracBrowser for help on using the repository browser.