1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
/*
* FIG : Facility for Interactive Generation of figures
* Copyright (c) 1985-1988 by Supoj Sutanthavibul
* Parts Copyright (c) 1989-2002 by Brian V. Smith
* Parts Copyright (c) 1991 by Paul King
*
* Any party obtaining a copy of these files is granted, free of charge, a
* full and unrestricted irrevocable, world-wide, paid up, royalty-free,
* nonexclusive right and license to deal in this software and documentation
* files (the "Software"), including without limitation the rights to use,
* copy, modify, merge, publish distribute, sublicense and/or sell copies of
* the Software, and to permit persons who receive copies from any such
* party to do so, with the only requirement being that the above copyright
* and this permission notice remain intact.
*
*/
#include "fig.h"
#include "resources.h"
#include "mode.h"
#include "object.h"
#include "paintop.h"
#include "d_line.h"
#include "u_create.h"
#include "u_elastic.h"
#include "u_list.h"
#include "w_canvas.h"
#include "w_mousefun.h"
#include "w_msgpanel.h"
/*************************** local declarations *********************/
static void init_picobj_drawing();
static void create_picobj();
static void cancel_picobj();
void
picobj_drawing_selected()
{
set_mousefun("corner point", "", "", "", "", "");
canvas_kbd_proc = null_proc;
canvas_locmove_proc = null_proc;
canvas_leftbut_proc = init_picobj_drawing;
canvas_middlebut_proc = null_proc;
canvas_rightbut_proc = null_proc;
set_cursor(arrow_cursor);
reset_action_on();
}
static void
init_picobj_drawing(x, y)
int x, y;
{
init_box_drawing(x, y);
canvas_leftbut_proc = create_picobj;
canvas_rightbut_proc = cancel_picobj;
}
static void
cancel_picobj()
{
elastic_box(fix_x, fix_y, cur_x, cur_y);
picobj_drawing_selected();
draw_mousefun_canvas();
}
static void
create_picobj(x, y)
int x, y;
{
F_line *box;
F_point *point;
/* erase last lengths if appres.showlengths is true */
erase_lengths();
elastic_box(fix_x, fix_y, cur_x, cur_y);
canvas_locmove_proc = null_proc;
if ((point = create_point()) == NULL)
return;
point->x = fix_x;
point->y = fix_y;
point->next = NULL;
if ((box = create_line()) == NULL) {
free((char *) point);
return;
}
box->type = T_PICTURE;
box->style = SOLID_LINE;
box->thickness = 1;
box->pen_color = cur_pencolor;
box->fill_color = DEFAULT;
box->depth = cur_depth;
box->pen_style = -1;
box->join_style = 0; /* not used */
box->cap_style = 0; /* not used */
box->fill_style = UNFILLED;
box->style_val = 0;
if ((box->pic = create_pic()) == NULL) {
free((char *) point);
free((char *) box);
return;
}
box->pic->new = True; /* set new flag to delete if it user cancels edit operation */
box->pic->pic_cache = NULL;
box->pic->flipped = 0;
box->pic->hw_ratio = 0.0;
box->pic->pixmap = 0;
box->pic->pix_width = 0;
box->pic->pix_height = 0;
box->pic->pix_rotation = 0;
box->pic->pix_flipped = 0;
box->points = point;
append_point(fix_x, y, &point);
append_point(x, y, &point);
append_point(x, fix_y, &point);
append_point(fix_x, fix_y, &point);
add_line(box);
/* draw it and anything on top of it */
redisplay_line(box);
put_msg("Please enter name of Picture Object file in EDIT window");
edit_item((char *) box, O_POLYLINE, 0, 0);
picobj_drawing_selected();
draw_mousefun_canvas();
}
|