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