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

📄 panel_attr.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (label_x_changed)	 ip->label_rect.r_left = label_x;      if (label_y_changed)	 ip->label_rect.r_top = label_y;      /* now move the value if it's not fixed */      fix_positions(ip);   }       if (value_x_changed || value_y_changed) {      /* value position has changed, so re-compute       * default label position.       */       rect_construct(&deltas, 0, 0, 0, 0);      if (value_x_changed) {	 deltas.r_left = value_x - ip->value_rect.r_left;	 ip->value_rect.r_left = value_x;      }      if (value_y_changed) {	 deltas.r_top = value_y - ip->value_rect.r_top;	 ip->value_rect.r_top = value_y;      }      if (deltas.r_left || deltas.r_top) {	 /* VALUE_X or VALUE_Y has changed, so tell item to shift 	  * all its components (choices, marks etc.).	  */ 	 (*ip->ops->layout)(ip, &deltas);	 /* now move the label if it's not fixed */	 fix_positions(ip);      }   }   /* make sure the item rect encloses the label and value */   ip->rect = panel_enclosing_rect(&ip->label_rect, &ip->value_rect);   /* for scrolling computations, note new extent of panel, tell scrollbars */   if (potential_new_rect)      panel_update_extent(panel, ip->rect);   return 1;}/*****************************************************************************//* fix_positions - of label and value rects                                  *//*****************************************************************************/staticfix_positions(ip)register panel_item_handle	ip;{   if (!value_fixed(ip)) {      struct rect	deltas;      /* compute the value position as after the label */      /* remember the old position */      rect_construct(&deltas, 0, 0, 0, 0);      deltas.r_left = ip->value_rect.r_left;      deltas.r_top = ip->value_rect.r_top;      switch (ip->layout) {	 case PANEL_HORIZONTAL:	    /* after => to right of */	    ip->value_rect.r_left = 	       rect_right(&ip->label_rect) + 1 + 		  (ip->label_rect.r_width ? LABEL_X_GAP : 0); 	    ip->value_rect.r_top = ip->label_rect.r_top;	    break;	 case PANEL_VERTICAL:	    /* after => below */	    ip->value_rect.r_left = ip->label_rect.r_left;	    ip->value_rect.r_top = 	       rect_bottom(&ip->label_rect) + 1 +		  (ip->label_rect.r_height ? LABEL_Y_GAP : 0); 	    break;      }      /* delta is new postion minus old position */      deltas.r_left = ip->value_rect.r_left - deltas.r_left;      deltas.r_top = ip->value_rect.r_top - deltas.r_top;      if (deltas.r_left || deltas.r_top)	 /* VALUE_X or VALUE_Y has changed, so tell item to shift 	  * all its components (choices, marks etc.).	  */ 	 (*ip->ops->layout)(ip, &deltas);      return;   }   panel_fix_label_position(ip);}panel_fix_label_position(ip)register panel_item_handle	ip;{   if (label_fixed(ip))      return;   /* compute the label position as before the value. */   switch (ip->layout) {      case PANEL_HORIZONTAL:	 /* before => to left of */	 ip->label_rect.r_left = ip->value_rect.r_left;	 if (ip->label_rect.r_width > 0)	     ip->label_rect.r_left -= ip->label_rect.r_width + LABEL_X_GAP;	 ip->label_rect.r_top = ip->value_rect.r_top;	 break;       case PANEL_VERTICAL:	 /* before => above */	 ip->label_rect.r_left = ip->value_rect.r_left;	 ip->label_rect.r_top = ip->value_rect.r_top;	 if (ip->label_rect.r_height > 0)	     ip->label_rect.r_top -= ip->label_rect.r_height + LABEL_Y_GAP;	 break;   }}/*****************************************************************************//* panel_get_generic                                                         *//* returns the value of the generic attribute specified by which_attr.       *//* NULL is returned if this is not a generic attribute.                      *//*****************************************************************************/caddr_tpanel_get_generic(ip, which_attr)register panel_item_handle 	ip;register Panel_attribute	which_attr;{   switch (which_attr) {      case PANEL_VALUE_X:	 return (caddr_t) ip->value_rect.r_left;      case PANEL_VALUE_Y:	 return (caddr_t) ip->value_rect.r_top;      case PANEL_LABEL_STRING:	 if (is_string(&ip->label))	    return (caddr_t) image_string(&ip->label);	 else	    return (caddr_t) NULL;      case PANEL_LABEL_FONT:	 if (is_string(&ip->label))	    return (caddr_t) image_font(&ip->label);	 else	    return (caddr_t) NULL;      case PANEL_LABEL_BOLD:	 if (is_string(&ip->label))	    return (caddr_t) image_bold(&ip->label);	 else	    return (caddr_t) NULL;      case PANEL_LABEL_SHADED:	    return (caddr_t) image_shaded(&ip->label);      case PANEL_LABEL_IMAGE:	 if (is_pixrect(&ip->label))	    return (caddr_t) image_pixrect(&ip->label);	 else	    return (caddr_t) NULL;      case PANEL_LABEL_X:	 return (caddr_t) ip->label_rect.r_left;      case PANEL_LABEL_Y:	 return (caddr_t) ip->label_rect.r_top;      case PANEL_ITEM_X:	 return (caddr_t) ip->rect.r_left;      case PANEL_ITEM_Y:	 return (caddr_t) ip->rect.r_top;      case PANEL_ITEM_RECT:	 return (caddr_t) &ip->rect;      case PANEL_ADJUSTABLE:	 return (caddr_t) adjustable(ip);      case PANEL_SHOW_ITEM:	 return (caddr_t) !hidden(ip);      case PANEL_NOTIFY_PROC:	 return (caddr_t) LINT_CAST(ip->notify);      case PANEL_EVENT_PROC:	 return (caddr_t) LINT_CAST(ip->ops->handle_event);      case PANEL_NEXT_ITEM:	 return (caddr_t) ip->next;      case PANEL_PIXWIN:	 return (caddr_t) ip->panel->pixwin;      case PANEL_MOUSE_STATE:	 return (caddr_t) ip->panel->mouse_state;      case PANEL_LAYOUT:	 return (caddr_t) ip->layout;      case PANEL_MENU_TITLE_STRING:	 return is_string(&ip->menu_title) ?		(caddr_t) image_string(&ip->menu_title) : NULL;      case PANEL_MENU_TITLE_IMAGE:	 return is_pixrect(&ip->menu_title) ?		(caddr_t) image_pixrect(&ip->menu_title) : NULL;       case PANEL_MENU_TITLE_FONT:	 return is_string(&ip->menu_title) ?		(caddr_t) image_font(&ip->menu_title) : NULL;      case PANEL_MENU_CHOICE_STRINGS:      case PANEL_MENU_CHOICE_IMAGES:      case PANEL_MENU_CHOICE_FONTS:      case PANEL_MENU_CHOICE_VALUES:	 return NULL;      case PANEL_SHOW_MENU:	 return (caddr_t) show_menu(ip);      case PANEL_SHOW_MENU_MARK:	 return (caddr_t) show_menu_mark(ip);      case PANEL_MENU_MARK_IMAGE:	 return (caddr_t) ip->menu_mark_on;      case PANEL_MENU_NOMARK_IMAGE:	 return (caddr_t) ip->menu_mark_off;      case PANEL_TYPE_IMAGE:	 return (caddr_t) ip->menu_type_pr;      case PANEL_ACCEPT_KEYSTROKE:          return (caddr_t) wants_key(ip);      case PANEL_CLIENT_DATA:	 return ip->client_data;      case HELP_DATA:	 return ip->help_data;      case PANEL_ITEM_COLOR:	 return (caddr_t) ip->color_index;      case PANEL_PARENT_PANEL:         return (caddr_t) ip->panel;      default :	 return (caddr_t) NULL;   }} /* panel_get_generic */panel_set_ops(ip, avlist)register panel_item_handle 	ip;register Attr_avlist		avlist;{   register Panel_attribute	attr;   register panel_ops_handle	new_ops;   while (attr = (Panel_attribute) *avlist++) {      switch (attr) {	 case PANEL_EVENT_PROC:	    if (!ops_set(ip)) {	       new_ops = (panel_ops_handle) 		   LINT_CAST(sv_malloc(sizeof(struct panel_ops)));	       *new_ops = *ip->ops;	       ip->ops = new_ops;	       ip->flags |= OPS_SET;	    }            ip->ops->handle_event = (int (*)()) LINT_CAST(*avlist++);	    if (!ip->ops->handle_event)	       ip->ops->handle_event = panel_nullproc;	    break;	 default:	    /* skip past what we don't care about */	    avlist = attr_skip(attr, avlist);	    break;      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -