1 | /*--------------------------------*-C-*---------------------------------* |
1 | /*--------------------------------*-C-*---------------------------------* |
2 | * File: graphics.c |
2 | * File: graphics.c |
3 | *----------------------------------------------------------------------* |
3 | *----------------------------------------------------------------------* |
4 | * $Id: graphics.C,v 1.2 2003/11/24 17:31:27 pcg Exp $ |
4 | * $Id: graphics.C,v 1.3 2003/11/25 11:52:42 pcg Exp $ |
5 | * |
5 | * |
6 | * All portions of code are copyright by their respective author/s. |
6 | * All portions of code are copyright by their respective author/s. |
7 | * Copyright (c) 1994 Rob Nation <nation@rocket.sanders.lockheed.com> |
7 | * Copyright (c) 1994 Rob Nation <nation@rocket.sanders.lockheed.com> |
8 | * - original version |
8 | * - original version |
9 | * Copyright (c) 1997 Raul Garcia Garcia <rgg@tid.es> |
9 | * Copyright (c) 1997 Raul Garcia Garcia <rgg@tid.es> |
… | |
… | |
104 | grwin->y = y; |
104 | grwin->y = y; |
105 | grwin->w = w; |
105 | grwin->w = w; |
106 | grwin->h = h; |
106 | grwin->h = h; |
107 | grwin->screen = 0; |
107 | grwin->screen = 0; |
108 | grwin->prev = NULL; |
108 | grwin->prev = NULL; |
109 | grwin->next = R->h->gr_root; |
109 | grwin->next = R->gr_root; |
110 | if (grwin->next) |
110 | if (grwin->next) |
111 | grwin->next->prev = grwin; |
111 | grwin->next->prev = grwin; |
112 | R->h->gr_root = grwin; |
112 | R->gr_root = grwin; |
113 | grwin->graphics = NULL; |
113 | grwin->graphics = NULL; |
114 | R->h->graphics_up++; |
114 | R->graphics_up++; |
115 | |
115 | |
116 | rxvt_tt_printf(aR_ "\033W%ld\n", (long)grwin->win); |
116 | rxvt_tt_printf(aR_ "\033W%ld\n", (long)grwin->win); |
117 | } |
117 | } |
118 | |
118 | |
119 | /* ARGSUSED */ |
119 | /* ARGSUSED */ |
… | |
… | |
221 | if (grwin->next != NULL) |
221 | if (grwin->next != NULL) |
222 | grwin->next->prev = grwin->prev; |
222 | grwin->next->prev = grwin->prev; |
223 | if (grwin->prev != NULL) |
223 | if (grwin->prev != NULL) |
224 | grwin->prev->next = grwin->next; |
224 | grwin->prev->next = grwin->next; |
225 | else |
225 | else |
226 | R->h->gr_root = grwin->next; |
226 | R->gr_root = grwin->next; |
227 | free(grwin); |
227 | free(grwin); |
228 | |
228 | |
229 | R->h->graphics_up--; |
229 | R->graphics_up--; |
230 | } |
230 | } |
231 | |
231 | |
232 | /* ARGSUSED */ |
232 | /* ARGSUSED */ |
233 | /* INTPROTO */ |
233 | /* INTPROTO */ |
234 | void |
234 | void |
… | |
… | |
325 | void |
325 | void |
326 | rxvt_Gr_ButtonReport(pR_ int but, int x, int y) |
326 | rxvt_Gr_ButtonReport(pR_ int but, int x, int y) |
327 | { |
327 | { |
328 | grwin_t *grwin; |
328 | grwin_t *grwin; |
329 | |
329 | |
330 | for (grwin = R->h->gr_root; grwin != NULL; grwin = grwin->next) |
330 | for (grwin = R->gr_root; grwin != NULL; grwin = grwin->next) |
331 | if ((x > grwin->x) |
331 | if ((x > grwin->x) |
332 | && (y > grwin->y) |
332 | && (y > grwin->y) |
333 | && ((unsigned int)x < grwin->x + grwin->w) |
333 | && ((unsigned int)x < grwin->x + grwin->w) |
334 | && ((unsigned int)y < grwin->y + grwin->h)) |
334 | && ((unsigned int)y < grwin->y + grwin->h)) |
335 | break; |
335 | break; |
… | |
… | |
360 | |
360 | |
361 | if ((cmd == 'G') && (win_id == None)) { |
361 | if ((cmd == 'G') && (win_id == None)) { |
362 | rxvt_Gr_Geometry(aR_ NULL, NULL); |
362 | rxvt_Gr_Geometry(aR_ NULL, NULL); |
363 | return; |
363 | return; |
364 | } |
364 | } |
365 | if ((win_id == None) && (R->h->gr_last_id != None)) |
365 | if ((win_id == None) && (R->gr_last_id != None)) |
366 | win_id = R->h->gr_last_id; |
366 | win_id = R->gr_last_id; |
367 | |
367 | |
368 | if (win_id == None) |
368 | if (win_id == None) |
369 | return; |
369 | return; |
370 | |
370 | |
371 | grwin = R->h->gr_root; |
371 | grwin = R->gr_root; |
372 | while ((grwin != NULL) && (grwin->win != win_id)) |
372 | while ((grwin != NULL) && (grwin->win != win_id)) |
373 | grwin = grwin->next; |
373 | grwin = grwin->next; |
374 | |
374 | |
375 | if (grwin == NULL) |
375 | if (grwin == NULL) |
376 | return; |
376 | return; |
… | |
… | |
434 | void |
434 | void |
435 | rxvt_Gr_scroll(pR_ int count) |
435 | rxvt_Gr_scroll(pR_ int count) |
436 | { |
436 | { |
437 | grwin_t *grwin, *next; |
437 | grwin_t *grwin, *next; |
438 | |
438 | |
439 | if ((count == 0) && (R->h->gr_prev_start == R->TermWin.view_start)) |
439 | if ((count == 0) && (R->gr_prev_start == R->TermWin.view_start)) |
440 | return; |
440 | return; |
441 | |
441 | |
442 | R->h->gr_prev_start = R->TermWin.view_start; |
442 | R->gr_prev_start = R->TermWin.view_start; |
443 | |
443 | |
444 | for (grwin = R->h->gr_root; grwin != NULL; grwin = next) { |
444 | for (grwin = R->gr_root; grwin != NULL; grwin = next) { |
445 | next = grwin->next; |
445 | next = grwin->next; |
446 | grwin->y -= (count * R->TermWin.fheight); |
446 | grwin->y -= (count * R->TermWin.fheight); |
447 | if ((long)(grwin->y + grwin->h) |
447 | if ((long)(grwin->y + grwin->h) |
448 | < -(long)(R->TermWin.saveLines * R->TermWin.fheight)) |
448 | < -(long)(R->TermWin.saveLines * R->TermWin.fheight)) |
449 | rxvt_Gr_DestroyWindow(aR_ grwin); |
449 | rxvt_Gr_DestroyWindow(aR_ grwin); |
… | |
… | |
458 | void |
458 | void |
459 | rxvt_Gr_ClearScreen(pR) |
459 | rxvt_Gr_ClearScreen(pR) |
460 | { |
460 | { |
461 | grwin_t *grwin, *next; |
461 | grwin_t *grwin, *next; |
462 | |
462 | |
463 | for (grwin = R->h->gr_root; grwin != NULL; grwin = next) { |
463 | for (grwin = R->gr_root; grwin != NULL; grwin = next) { |
464 | next = grwin->next; |
464 | next = grwin->next; |
465 | if ((grwin->screen == 0) && (grwin->y + grwin->h > 0)) { |
465 | if ((grwin->screen == 0) && (grwin->y + grwin->h > 0)) { |
466 | if (grwin->y >= 0) |
466 | if (grwin->y >= 0) |
467 | rxvt_Gr_DestroyWindow(aR_ grwin); |
467 | rxvt_Gr_DestroyWindow(aR_ grwin); |
468 | else |
468 | else |
… | |
… | |
476 | void |
476 | void |
477 | rxvt_Gr_ChangeScreen(pR) |
477 | rxvt_Gr_ChangeScreen(pR) |
478 | { |
478 | { |
479 | grwin_t *grwin, *next; |
479 | grwin_t *grwin, *next; |
480 | |
480 | |
481 | for (grwin = R->h->gr_root; grwin != NULL; grwin = next) { |
481 | for (grwin = R->gr_root; grwin != NULL; grwin = next) { |
482 | next = grwin->next; |
482 | next = grwin->next; |
483 | if (grwin->y + grwin->h > 0) { |
483 | if (grwin->y + grwin->h > 0) { |
484 | if (grwin->screen == 1) { |
484 | if (grwin->screen == 1) { |
485 | XMapWindow(R->Xdisplay, grwin->win); |
485 | XMapWindow(R->Xdisplay, grwin->win); |
486 | grwin->screen = 0; |
486 | grwin->screen = 0; |
… | |
… | |
497 | void |
497 | void |
498 | rxvt_Gr_expose(pR_ Window win) |
498 | rxvt_Gr_expose(pR_ Window win) |
499 | { |
499 | { |
500 | grwin_t *grwin; |
500 | grwin_t *grwin; |
501 | |
501 | |
502 | for (grwin = R->h->gr_root; grwin != NULL; grwin = grwin->next) { |
502 | for (grwin = R->gr_root; grwin != NULL; grwin = grwin->next) { |
503 | if (grwin->win == win) { |
503 | if (grwin->win == win) { |
504 | rxvt_Gr_Redraw(aR_ grwin); |
504 | rxvt_Gr_Redraw(aR_ grwin); |
505 | break; |
505 | break; |
506 | } |
506 | } |
507 | } |
507 | } |
… | |
… | |
512 | void |
512 | void |
513 | rxvt_Gr_Resize(pR_ int w __attribute__((unused)), int h) |
513 | rxvt_Gr_Resize(pR_ int w __attribute__((unused)), int h) |
514 | { |
514 | { |
515 | grwin_t *grwin; |
515 | grwin_t *grwin; |
516 | |
516 | |
517 | for (grwin = R->h->gr_root; grwin != NULL; grwin = grwin->next) { |
517 | for (grwin = R->gr_root; grwin != NULL; grwin = grwin->next) { |
518 | if (R->TermWin.height != h) { |
518 | if (R->TermWin.height != h) { |
519 | grwin->y += (R->TermWin.height - h); |
519 | grwin->y += (R->TermWin.height - h); |
520 | XMoveWindow(R->Xdisplay, grwin->win, |
520 | XMoveWindow(R->Xdisplay, grwin->win, |
521 | grwin->x, |
521 | grwin->x, |
522 | grwin->y + (R->TermWin.view_start * R->TermWin.fheight)); |
522 | grwin->y + (R->TermWin.view_start * R->TermWin.fheight)); |
… | |
… | |
529 | void |
529 | void |
530 | rxvt_Gr_reset(pR) |
530 | rxvt_Gr_reset(pR) |
531 | { |
531 | { |
532 | grwin_t *grwin, *next; |
532 | grwin_t *grwin, *next; |
533 | |
533 | |
534 | for (grwin = R->h->gr_root; grwin != NULL; grwin = next) { |
534 | for (grwin = R->gr_root; grwin != NULL; grwin = next) { |
535 | next = grwin->next; |
535 | next = grwin->next; |
536 | rxvt_Gr_DestroyWindow(aR_ grwin); |
536 | rxvt_Gr_DestroyWindow(aR_ grwin); |
537 | } |
537 | } |
538 | |
538 | |
539 | R->h->graphics_up = 0; |
539 | R->graphics_up = 0; |
540 | } |
540 | } |
541 | |
541 | |
542 | /* EXTPROTO */ |
542 | /* EXTPROTO */ |
543 | int |
543 | int |
544 | rxvt_Gr_Displayed(pR) |
544 | rxvt_Gr_Displayed(pR) |
545 | { |
545 | { |
546 | return R->h->graphics_up; |
546 | return R->graphics_up; |
547 | } |
547 | } |
548 | #endif |
548 | #endif |
549 | /*----------------------- end-of-file (C source) -----------------------*/ |
549 | /*----------------------- end-of-file (C source) -----------------------*/ |