📄 _sunview.c
字号:
edges = (struct pr_pos*) malloc(n*sizeof(struct pr_pos));
for(i=0;i<n;i++)
{ edges[i].x = XPIX(xcoord[i]);
edges[i].y = YPIX(ycoord[i]);
}
pw_polygon_2(pw,0,0,1,&n,edges,pix_mode(col),0,0,0);
/*
free((char*)edges);
*/
}
x_draw_polygon(n,xcoord,ycoord,col)
int col, n;
double *xcoord, *ycoord;
{ int i;
for(i=0;i<n-1;i++)
x_draw_line(xcoord[i],ycoord[i], xcoord[i+1],ycoord[i+1],col);
x_draw_line(xcoord[n-1],ycoord[n-1],xcoord[0],ycoord[0],col);
}
x_draw_rectangle(x1,y1,x2,y2,col)
double x1,y1,x2,y2;
int col;
{
x_draw_line(x1,y1,x1,y2,col);
x_draw_line(x1,y2,x2,y2,col);
x_draw_line(x2,y2,x2,y1,col);
x_draw_line(x2,y1,x1,y1,col);
}
x_draw_filled_rectangle(x1,y1,x2,y2,col)
double x1,y1,x2,y2;
int col;
{ double xcoord[4], ycoord[4];
xcoord[0] = x1;
ycoord[0] = y1;
xcoord[1] = x1;
ycoord[1] = y2;
xcoord[2] = x2;
ycoord[2] = y2;
xcoord[3] = x2;
ycoord[3] = y1;
x_draw_filled_polygon(4,xcoord,ycoord,col);
}
x_draw_copy_rect(x1,y1,x2,y2,x,y)
double x1,y1,x2,y2,x,y;
{
pw_copy(pw,XPIX(x1),YPIX(y1),(x2-x1)*x_draw_scale,(y2-y1)*x_draw_scale,
pix_mode(1), pw,XPIX(x),YPIX(y));
}
x_draw_clear(col)
int col;
{struct pr_pos edges[4];
struct pr_pos *grid_points;
int i=0;
int n = 4;
double x,y;
int save;
x_draw_del_messages();
edges[0].x = 0;
edges[0].y = 0;
edges[1].x = xdots;
edges[1].y = 0;
edges[2].x = xdots;
edges[2].y = ydots;
edges[3].x = 0;
edges[3].y = ydots;
pw_polygon_2(pw,0,0,1,&n,edges,COL(col),0,0,0);
save = x_draw_set_node_width(1);
n = 0;
if (x_draw_grid_mode) /* draw grid */
{ for(x = (int)(x_draw_xmin/x_draw_grid_mode)*x_draw_grid_mode; x<=x_draw_xmax; x+=x_draw_grid_mode)
for(y = (int)(x_draw_ymin/x_draw_grid_mode)*x_draw_grid_mode; y<=x_draw_ymax; y+=x_draw_grid_mode)
n++;
grid_points = (struct pr_pos*) malloc(n*sizeof(struct pr_pos));
for(x = (int)(x_draw_xmin/x_draw_grid_mode)*x_draw_grid_mode; x<=x_draw_xmax; x+=x_draw_grid_mode)
for(y = (int)(x_draw_ymin/x_draw_grid_mode)*x_draw_grid_mode; y<=x_draw_ymax; y+=x_draw_grid_mode)
{ if (x*y == 0) x_draw_filled_node(x,y,1,1);
else { grid_points[i].x = XPIX(x);
grid_points[i].y = YPIX(y);
i++;
}
}
pw_polypoint(pw,0,0,n,grid_points,COL(1));
}
x_draw_set_node_width(save);
}
/* TEXT */
x_draw_text(x,y,s,col)
double x,y;
char * s;
int col;
{ if (x_draw_text_mode == 1) /* opaque */
pw_text(pw,XPIX(x),YPIX(y),pix_mode(col),font,s);
else
pw_ttext(pw,XPIX(x),YPIX(y),pix_mode(col),font,s);
}
x_draw_ctext(x,y,s,col)
double x,y;
char * s;
int col;
{
struct pr_size size;
size = pf_textwidth(strlen(s),font,s);
x -= ((double)size.x)/(2*x_draw_scale);
y -= ((double)size.y)/(3*x_draw_scale);
x_draw_text(x,y,s,col);
}
x_draw_int(x0,y0,i,col)
double x0,y0;
int i,col;
{
char buf[16];
sprintf(buf,"%d",i);
x_draw_ctext(x0,y0,buf,col);
}
x_draw_cursor()
{
int X,Y;
X = XPIX(mouse_xreal);
Y = YPIX(mouse_yreal);
pw_vector(pw,X,Y,X+10,Y,PIX_SRC^PIX_DST,1);
pw_vector(pw,X,Y,X-10,Y,PIX_SRC^PIX_DST,1);
pw_vector(pw,X,Y,X,Y+10,PIX_SRC^PIX_DST,1);
pw_vector(pw,X,Y,X,Y-10,PIX_SRC^PIX_DST,1);
}
int x_draw_screen_width()
{ Rect *r;
Frame frame = window_create(0, FRAME,NULL);
r = (Rect *) window_get(frame, WIN_SCREEN_RECT);
window_set(frame, FRAME_NO_CONFIRM, TRUE, 0);
window_destroy(frame);
return(r->r_width);
}
int x_draw_screen_height()
{ Rect *r;
Frame frame = window_create(0, FRAME,NULL);
r = (Rect *) window_get(frame, WIN_SCREEN_RECT);
window_set(frame, FRAME_NO_CONFIRM, TRUE, 0);
window_destroy(frame);
return(r->r_height);
}
static void
center_frame(frame)
Frame frame;
{ Rect * r;
int left,top,width,height;
/* center frame on the screen */
r = (Rect *) window_get(frame, WIN_SCREEN_RECT);
width = (int) window_get(frame, WIN_WIDTH);
height = (int) window_get(frame, WIN_HEIGHT);
left = (r->r_width - width) / 2;
top = (r->r_height - height) / 2;
if (left < 0)
left = 0;
if (top < 0)
top = 0;
window_set(frame, WIN_X, left, WIN_Y, top, 0);
}
int x_draw_confirm(header)
char *header;
{ /* ask for yes or no */
char* s[2];
s[0] = "NO";
s[1] = "YES";
return x_draw_read_panel(header,2,s,0);
}
int x_draw_acknowledge(header)
char *header;
{ /* ask for ok */
char *s = "OK";
return x_draw_read_panel(header,1,&s,0);
}
static Frame init_panel_frame();
static void panel_input_notify();
static int panel_answer;
int x_draw_read_panel(message,n,labels,vertical)
char *message;
int n;
char **labels;
int vertical;
{
Frame panel_frame;
int answer;
if (x_draw_grid_mode) x_draw_cursor();
/* create the panel_frame */
panel_frame = init_panel_frame(message,n,labels,vertical);
/* make the user answer */
window_main_loop(panel_frame);
/* destroy the panel_frame */
window_set(panel_frame, FRAME_NO_CONFIRM, TRUE, 0);
window_destroy(panel_frame);
if (x_draw_grid_mode) x_draw_cursor();
return panel_answer;
}
static Frame
init_panel_frame(message,num,label,vertical)
char *message;
int num;
char **label;
int vertical;
{
Frame panel_frame;
Panel panel;
Panel_item message_item;
int left, top, width, height;
struct pixrect *pr[32];
Rect *r;
int i;
panel_frame = window_create(0, FRAME, FRAME_SHOW_LABEL, FALSE, 0);
panel = window_create(panel_frame, PANEL, 0);
message_item = panel_create_item(panel, PANEL_MESSAGE,
PANEL_LABEL_STRING, message,
0);
r = (Rect *) panel_get(message_item, PANEL_ITEM_RECT);
width = 0;
for(i=0;i<num;i++)
{ pr[i] = panel_button_image(panel, label[i], 3, 0);
width += pr[i]->pr_width;
}
/* center buttons under the message */
left = (r->r_width - width) / 2;
if (left < 0)
left = 0;
height = rect_bottom(r) + 5;
top = height;
panel_create_item(panel, PANEL_BUTTON,
PANEL_ITEM_X, left, PANEL_ITEM_Y, top,
PANEL_LABEL_IMAGE, pr[0],
PANEL_CLIENT_DATA, 0,
PANEL_NOTIFY_PROC, panel_input_notify,
0);
for(i=1;i<num;i++)
{ if (vertical)
panel_create_item(panel, PANEL_BUTTON,
PANEL_ITEM_X, left, PANEL_ITEM_Y, top+=height,
PANEL_LABEL_IMAGE, pr[i],
PANEL_CLIENT_DATA, i,
PANEL_NOTIFY_PROC, panel_input_notify,
0);
else
panel_create_item(panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE, pr[i],
PANEL_CLIENT_DATA, i,
PANEL_NOTIFY_PROC, panel_input_notify,
0);
}
window_fit(panel);
window_fit(panel_frame);
center_frame(panel_frame);
return panel_frame;
}
/* notify proc */
static void panel_input_notify(item, event)
Panel_item item;
Event *event;
{ panel_answer = (int)panel_get(item, PANEL_CLIENT_DATA);
notify_stop();
}
/* Text Panels */
static Frame init_text_panel_frame();
static void text_panel_ok_notify();
static void text_panel_input_notify();
static void text_panel_menu_proc();
static char text_panel_answer[256];
static char **text_panel_menu_strings;
static Menu text_panel_menu;
static Frame text_panel_frame;
static Panel text_panel;
static Panel_item panel_text_item;
char* x_draw_read_text_panel(message,menu_label,n,items)
int n;
char **items;
char *message;
char *menu_label;
{
if (x_draw_grid_mode) x_draw_cursor();
init_text_panel_frame(message,menu_label,n,items);
window_main_loop(text_panel_frame);
window_set(text_panel_frame, FRAME_NO_CONFIRM, TRUE, 0);
window_destroy(text_panel_frame);
if (x_draw_grid_mode) x_draw_cursor();
return text_panel_answer;
}
static Frame
init_text_panel_frame(message,menu_l,n,items)
int n;
char *message;
char *menu_l;
char **items;
{
Panel_item message_item;
int left, top, width, height;
Rect *r;
int i;
int cols;
char* menu_label[64];
cols = 1 +n/15;
sprintf(menu_label,"%s -->",menu_l);
text_panel_frame = window_create(0, FRAME, FRAME_SHOW_LABEL, FALSE, 0);
text_panel = window_create(text_panel_frame, PANEL, 0);
panel_text_item = panel_create_item(text_panel, PANEL_TEXT,
PANEL_ITEM_Y, 15,
PANEL_NOTIFY_PROC, text_panel_input_notify,
PANEL_LABEL_STRING, message,
PANEL_VALUE_DISPLAY_LENGTH, 25,
PANEL_VALUE_STORED_LENGTH, 256,
/* PANEL_VALUE, default_text, */
0);
if (n > 0)
{ text_panel_menu_strings = items;
text_panel_menu = menu_create( MENU_DEFAULT, 0, MENU_NCOLS, cols, 0);
for(i=0;i<n;i++) menu_set(text_panel_menu,MENU_STRING_ITEM,items[i],i,0);
panel_create_item(text_panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,panel_button_image(text_panel,menu_label,0,0),
PANEL_EVENT_PROC, text_panel_menu_proc,
0);
}
window_fit(text_panel);
window_fit(text_panel_frame);
center_frame(text_panel_frame);
}
/* notify proc */
static void text_panel_input_notify(item, event)
Panel_item item;
Event *event;
{
strcpy(text_panel_answer,(char*)panel_get_value(item));
notify_stop();
}
static void text_panel_menu_proc(item, event)
Panel_item item;
Event *event;
{ int i;
if (event_id(event) == MS_RIGHT && event_is_down(event))
{ i = (int)menu_show(text_panel_menu, text_panel, event,0);
window_set(panel_text_item,PANEL_VALUE,text_panel_menu_strings[i],0);
strcpy(text_panel_answer,text_panel_menu_strings[i]);
notify_stop();
}
else panel_default_handle_event(item,event);
}
void x_draw_flush() {}
void x_draw_notice() {}
x_draw_message_panel(argc, argv)
char *argv[];
{
Frame panel_frame;
Panel panel;
Panel_item item,but;
int i,left, top, width, height;
Rect *r;
if (x_draw_grid_mode) x_draw_cursor();
panel_frame = window_create(0, FRAME,
FRAME_LABEL, argv[0],
0);
panel = window_create(panel_frame, PANEL,0);
if (argc > 1)
{ item = panel_create_item(panel, PANEL_MESSAGE,
PANEL_ITEM_Y,20,
PANEL_ITEM_X,25,
PANEL_LABEL_BOLD, TRUE,
PANEL_LABEL_STRING, argv[1],
NULL);
r = (Rect *) panel_get(item, PANEL_ITEM_RECT);
width = r->r_width;
}
for(i = 2; i< argc; i++)
{ item = panel_create_item(panel, PANEL_MESSAGE,
PANEL_ITEM_X,25,
PANEL_ITEM_Y,20*i,
PANEL_LABEL_BOLD, TRUE,
PANEL_LABEL_STRING, argv[i],
NULL);
r = (Rect *) panel_get(item, PANEL_ITEM_RECT);
if (width < r->r_width) width = r->r_width;
}
but = panel_create_item(panel, PANEL_BUTTON,
/*
PANEL_ITEM_X,width/2 - 15,
*/
PANEL_CLIENT_DATA, 0,
PANEL_LABEL_IMAGE, panel_button_image(panel, "OK", 3, 0),
PANEL_NOTIFY_PROC, panel_input_notify,
NULL);
window_fit(panel);
window_fit(panel_frame);
center_frame(panel_frame);
window_main_loop(panel_frame);
window_set(panel_frame, FRAME_NO_CONFIRM, TRUE, 0);
window_destroy(panel_frame);
if (x_draw_grid_mode) x_draw_cursor();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -