⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _sunview.c

📁 数据类型和算法库LEDA 数据类型和算法库LEDA
💻 C
📖 第 1 页 / 共 3 页
字号:
 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 + -