WINDOW display_image(IMAGE *image, const char *title, INT32 x, INT32 y, BOOL8 wait) { WINDOW im_window; INT16 i; GRAPHICS_EVENT event; //output event // xmin xmax ymin ymax im_window = create_window (title, SCROLLINGWIN, x, y, 10 * image->get_xsize (), 10 * image->get_ysize (), 0, image->get_xsize (), 0, image->get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(im_window); show_sub_image (image, 0, 0, image->get_xsize (), image->get_ysize (), im_window, 0, 0); line_color_index(im_window, RED); for (i = 1; i < image->get_xsize (); i++) { move2d (im_window, i, 0); draw2d (im_window, i, image->get_ysize ()); } for (i = 1; i < image->get_ysize (); i++) { move2d (im_window, 0, i); draw2d (im_window, image->get_xsize (), i); } overlap_picture_ops(TRUE); if (wait) await_event(im_window, TRUE, ANY_EVENT, &event); return im_window; }
char window_wait( /*move pen */ void *win) { WINDOW window = (WINDOW) win; GRAPHICS_EVENT event; await_event(window, TRUE, ANY_EVENT, &event); if (event.type == KEYPRESS_EVENT) return event.key; else return '\0'; }
void display_images(IMAGE &clip_image, IMAGE &scaled_image) { WINDOW clip_im_window; //window for debug WINDOW scale_im_window; //window for debug INT16 i; GRAPHICS_EVENT event; // c; // xmin xmax ymin ymax clip_im_window = create_window ("Clipped Blob", SCROLLINGWIN, editor_word_xpos - 20, editor_word_ypos - 100, 5 * clip_image.get_xsize (), 5 * clip_image.get_ysize (), 0, clip_image.get_xsize (), 0, clip_image.get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(clip_im_window); show_sub_image (&clip_image, 0, 0, clip_image.get_xsize (), clip_image.get_ysize (), clip_im_window, 0, 0); line_color_index(clip_im_window, RED); for (i = 1; i < clip_image.get_xsize (); i++) { move2d (clip_im_window, i, 0); draw2d (clip_im_window, i, clip_image.get_xsize ()); } for (i = 1; i < clip_image.get_ysize (); i++) { move2d (clip_im_window, 0, i); draw2d (clip_im_window, clip_image.get_xsize (), i); } // xmin xmax ymin ymax scale_im_window = create_window ("Scaled Blob", SCROLLINGWIN, editor_word_xpos + 300, editor_word_ypos - 100, 5 * scaled_image.get_xsize (), 5 * scaled_image.get_ysize (), 0, scaled_image.get_xsize (), 0, scaled_image.get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(scale_im_window); show_sub_image (&scaled_image, 0, 0, scaled_image.get_xsize (), scaled_image.get_ysize (), scale_im_window, 0, 0); line_color_index(scale_im_window, RED); for (i = 1; i < scaled_image.get_xsize (); i++) { move2d (scale_im_window, i, 0); draw2d (scale_im_window, i, scaled_image.get_xsize ()); } for (i = 1; i < scaled_image.get_ysize (); i++) { move2d (scale_im_window, 0, i); draw2d (scale_im_window, scaled_image.get_xsize (), i); } overlap_picture_ops(TRUE); await_event(scale_im_window, TRUE, ANY_EVENT, &event); destroy_window(clip_im_window); destroy_window(scale_im_window); }
DLLSYM WINDOW await_key( /*wait for key */ WINDOW win, /*window to wait on */ BOOL8 wait, /*waiting flag */ char &c /*return character */ ) { GRAPHICS_EVENT event; /*return event */ win = await_event (win, wait, KEYPRESS_EVENT, &event); if (event.type == DESTROY_EVENT) return NULL; //was destroyed if (win != NULL) c = event.key; /*get keypress */ return win; }
DLLSYM WINDOW await_click( /*wait for click */ WINDOW win, /*window to wait on */ BOOL8 wait, /*waiting flag */ float &x, /*coords of click */ float &y /*coords of click */ ) { GRAPHICS_EVENT event; /*return event */ win = await_event (win, wait, DOWN_EVENT, &event); if (event.type == DESTROY_EVENT) return NULL; //was destroyed if (win != NULL) { x = event.x; /*get coords */ y = event.y; } return win; }
DLLSYM WINDOW await_selection( /*wait for selection */ WINDOW win, /*window to wait on */ BOOL8 wait, /*waiting flag */ float &xmin, /*coords of selection */ float &ymin, /*coords of selection */ float &xmax, /*coords of selection */ float &ymax /*coords of selection */ ) { GRAPHICS_EVENT event; /*return event */ win = await_event (win, wait, SELECT_EVENT, &event); if (event.type == DESTROY_EVENT) return NULL; //was destroyed if (win != NULL) { xmin = event.x; /*get coords */ ymin = event.y; xmax = event.xmax; /*get coords */ ymax = event.ymax; } return win; }
void display_images(IMAGE *image_w, IMAGE *image_n, IMAGE *match_image) { WINDOW w_im_window; WINDOW n_im_window; WINDOW match_window; GRAPHICS_EVENT event; //output event INT16 i; // xmin xmax ymin ymax w_im_window = create_window ("Image 1", SCROLLINGWIN, 20, 100, 10 * image_w->get_xsize (), 10 * image_w->get_ysize (), 0, image_w->get_xsize (), 0, image_w->get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(w_im_window); show_sub_image (image_w, 0, 0, image_w->get_xsize (), image_w->get_ysize (), w_im_window, 0, 0); line_color_index(w_im_window, RED); for (i = 1; i < image_w->get_xsize (); i++) { move2d (w_im_window, i, 0); draw2d (w_im_window, i, image_w->get_ysize ()); } for (i = 1; i < image_w->get_ysize (); i++) { move2d (w_im_window, 0, i); draw2d (w_im_window, image_w->get_xsize (), i); } // xmin xmax ymin ymax n_im_window = create_window ("Image 2", SCROLLINGWIN, 240, 100, 10 * image_n->get_xsize (), 10 * image_n->get_ysize (), 0, image_n->get_xsize (), 0, image_n->get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(n_im_window); show_sub_image (image_n, 0, 0, image_n->get_xsize (), image_n->get_ysize (), n_im_window, 0, 0); line_color_index(n_im_window, RED); for (i = 1; i < image_n->get_xsize (); i++) { move2d (n_im_window, i, 0); draw2d (n_im_window, i, image_n->get_ysize ()); } for (i = 1; i < image_n->get_ysize (); i++) { move2d (n_im_window, 0, i); draw2d (n_im_window, image_n->get_xsize (), i); } overlap_picture_ops(TRUE); // xmin xmax ymin ymax match_window = create_window ("Match Result", SCROLLINGWIN, 460, 100, 10 * match_image->get_xsize (), 10 * match_image->get_ysize (), 0, match_image->get_xsize (), 0, match_image->get_ysize (), TRUE, FALSE, FALSE, TRUE); // down event & key only clear_view_surface(match_window); show_sub_image (match_image, 0, 0, match_image->get_xsize (), match_image->get_ysize (), match_window, 0, 0); line_color_index(match_window, RED); for (i = 1; i < match_image->get_xsize (); i++) { move2d (match_window, i, 0); draw2d (match_window, i, match_image->get_ysize ()); } for (i = 1; i < match_image->get_ysize (); i++) { move2d (match_window, 0, i); draw2d (match_window, match_image->get_xsize (), i); } overlap_picture_ops(TRUE); await_event(match_window, TRUE, ANY_EVENT, &event); destroy_window(w_im_window); destroy_window(n_im_window); destroy_window(match_window); }
int main(void) { buffer_t buf = buf_new(1); screen_t fake, real; int rows, cols; read_dimensions(&rows, &cols); fake_screen_init(&fake, rows, cols); real_screen_init(&buf, &real, rows, cols); prepare_events(); int x = 0, y = 0; char text[cols*rows]; bool marks[cols*rows]; memset(text, ' ', sizeof text); memset(marks, 0, sizeof marks); await: { event_t e = await_event(); switch (e.type) { case E_SIG: goto quit; break; case E_KEY: switch (e.key) { case '\b': if (x > 0) x -= 1; break; case '\n': x = 0; y += 1; break; case '~': marks[x + y*cols] = !marks[x + y*cols]; x++; break; default: text[x + y*cols] = e.key; x++; break; } break; case E_UP: y -= 1; break; case E_DOWN: y += 1; break; case E_LEFT: x -= 1; break; case E_RIGHT: x += 1; break; default: break; } int cx, cy; for (cx = 0; cx < cols; cx++) { for (cy = 0; cy < rows; cy++) { fake.cells[cx + cy*cols].codes[0] = text[cx + cy*cols]; } } int j; for (j = 0; j < cols*rows; j++) { if (marks[j]) { fake.cells[j].style.back.rgb = 0xff0000; } } fake.cursor.x = x; fake.cursor.y = y; fake.cursor.visible = true; screen_flush(&buf, &fake, &real); write(STDOUT_FILENO, buf.data, buf.used); buf.used = 0; fake_screen_reset(&fake, 25, 80); goto await; } quit: cleanup_events(); real_screen_cleanup(&buf, &real); write(STDOUT_FILENO, buf.data, buf.used); screen_free(&fake); screen_free(&real); buf_free(&buf); return 0; }