[80] | 1 | /********************************************************************** <BR>
|
---|
| 2 | This file is part of Crack dot Com's free source code release of
|
---|
| 3 | Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
|
---|
| 4 | information about compiling & licensing issues visit this URL</a>
|
---|
| 5 | <PRE> If that doesn't help, contact Jonathan Clark at
|
---|
| 6 | golgotha_source@usa.net (Subject should have "GOLG" in it)
|
---|
| 7 | ***********************************************************************/
|
---|
| 8 |
|
---|
| 9 | #include "gui/image_win.hh"
|
---|
| 10 |
|
---|
| 11 | #include "window/window.hh"
|
---|
| 12 | #include "window/win_evt.hh"
|
---|
| 13 |
|
---|
| 14 | #include "image/image.hh"
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | void i4_image_window_class::reparent(i4_image_class *draw_area, i4_parent_window_class *parent)
|
---|
| 18 | {
|
---|
| 19 | if (draw_area)
|
---|
| 20 | {
|
---|
| 21 | if (darken_im)
|
---|
| 22 | delete darken_im;
|
---|
| 23 |
|
---|
| 24 | if (darken && im)
|
---|
| 25 | {
|
---|
| 26 | int x,y, w=im->width(), h=im->height();
|
---|
| 27 |
|
---|
| 28 | i4_image_class *d=i4_create_image(w, h, draw_area->get_pal());
|
---|
| 29 |
|
---|
| 30 | for (y=0; y<h; y++)
|
---|
| 31 | for (x=0; x<w; x++)
|
---|
| 32 | {
|
---|
| 33 | i4_color c=im->get_pixel(x,y);
|
---|
| 34 | int r= (((c>>16)&0xff)*3/4)<<16;
|
---|
| 35 | int g= (((c>>8)&0xff)*3/4)<<8;
|
---|
| 36 | int b= (((c>>0)&0xff)*3/4)<<0;
|
---|
| 37 |
|
---|
| 38 | d->put_pixel(x,y, r|g|b);
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | darken_im=d;
|
---|
| 42 |
|
---|
| 43 |
|
---|
| 44 | }
|
---|
| 45 | else darken_im=0;
|
---|
| 46 | }
|
---|
| 47 | i4_parent_window_class::reparent(draw_area, parent);
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 |
|
---|
| 51 | void i4_image_window_class::change_image(i4_image_class *new_im)
|
---|
| 52 | {
|
---|
| 53 | if (del && im)
|
---|
| 54 | delete im;
|
---|
| 55 |
|
---|
| 56 | im = new_im;
|
---|
| 57 | reparent(local_image, parent);
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 |
|
---|
| 61 | i4_image_window_class::i4_image_window_class(i4_image_class *im,
|
---|
| 62 | i4_bool delete_on_destructor,
|
---|
| 63 | i4_bool dark_when_not_active)
|
---|
| 64 | : i4_parent_window_class(im->width(),im->height()),
|
---|
| 65 | im(im),
|
---|
| 66 | del(delete_on_destructor),
|
---|
| 67 | darken(dark_when_not_active)
|
---|
| 68 | {
|
---|
| 69 | active=i4_F;
|
---|
| 70 | darken_im=0;
|
---|
| 71 | }
|
---|
| 72 |
|
---|
| 73 | void i4_image_window_class::parent_draw(i4_draw_context_class &context)
|
---|
| 74 | {
|
---|
| 75 | if (darken && !active && darken_im)
|
---|
| 76 | darken_im->put_image(local_image, 0,0, context);
|
---|
| 77 | else
|
---|
| 78 | {
|
---|
| 79 | i4_rect_list_class child_clip(&context.clip,0,0);
|
---|
| 80 | child_clip.intersect_list(&undrawn_area);
|
---|
| 81 |
|
---|
| 82 | child_clip.swap(&context.clip);
|
---|
| 83 |
|
---|
| 84 |
|
---|
| 85 | for (i4_rect_list_class::area_iter c=context.clip.list.begin();c!=context.clip.list.end();++c)
|
---|
| 86 | im->put_part(local_image, c->x1, c->y1, c->x1, c->y1, c->x2, c->y2, context);
|
---|
| 87 |
|
---|
| 88 |
|
---|
| 89 | child_clip.swap(&context.clip);
|
---|
| 90 | i4_parent_window_class::parent_draw(context);
|
---|
| 91 |
|
---|
| 92 | }
|
---|
| 93 |
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 | void i4_image_window_class::receive_event(i4_event *ev)
|
---|
| 97 | {
|
---|
| 98 | CAST_PTR(wev, i4_window_message_class, ev);
|
---|
| 99 | if (ev->type()==i4_event::WINDOW_MESSAGE &&
|
---|
| 100 | wev->sub_type==i4_window_message_class::GOT_MOUSE_FOCUS)
|
---|
| 101 | {
|
---|
| 102 | active=i4_T;
|
---|
| 103 | if (darken && darken_im)
|
---|
| 104 | request_redraw(i4_F);
|
---|
| 105 | }
|
---|
| 106 | else if (ev->type()==i4_event::WINDOW_MESSAGE &&
|
---|
| 107 | wev->sub_type==i4_window_message_class::LOST_MOUSE_FOCUS)
|
---|
| 108 | {
|
---|
| 109 | active=i4_F;
|
---|
| 110 | if (darken && darken_im)
|
---|
| 111 | request_redraw(i4_F);
|
---|
| 112 |
|
---|
| 113 | }
|
---|
| 114 |
|
---|
| 115 | i4_parent_window_class::receive_event(ev);
|
---|
| 116 | }
|
---|
| 117 |
|
---|
| 118 | i4_image_window_class::~i4_image_window_class()
|
---|
| 119 | {
|
---|
| 120 | if (del && im)
|
---|
| 121 | delete im;
|
---|
| 122 | if (darken_im)
|
---|
| 123 | delete darken_im;
|
---|
| 124 | }
|
---|
| 125 |
|
---|