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

📄 panel_attr.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)panel_attr.c 1.1 92/07/30 Copyr 1984 Sun Micro";#endif#endif/*****************************************************************************//*                          panel_attr.c                                     *//*             Copyright (c) 1985 by Sun Microsystems, Inc.                  *//*****************************************************************************/#include <suntool/panel_impl.h>#include <suntool/window.h>#include "sunwindow/sv_malloc.h"void	window_rc_units_to_pixels();/*****************************************************************************//* panel_set_generic                                                         *//*****************************************************************************/panel_set_generic(ip, avlist)register panel_item_handle	ip;register Attr_avlist		avlist;{   register Panel_attribute	attr;    register panel_handle	panel		   = ip->panel;   register panel_image_handle	label		   = &ip->label;   int			 	item_x, item_y;   int			 	label_x, label_y;   int			 	value_x, value_y;   short		 	item_x_changed	   = FALSE;   short		 	item_y_changed     = FALSE;   short		 	label_size_changed = FALSE;   short		 	label_x_changed    = FALSE;   short		 	label_y_changed    = FALSE;   short		 	value_x_changed    = FALSE;   short		 	value_y_changed    = FALSE;   short		 	layout_changed     = FALSE;   short		 	label_bold_changed = FALSE;   short		 	label_font_changed = FALSE;   int			 	label_type         = -1;  /* no new label yet */   struct pixfont	       *label_font         = panel->font;   int			 	label_bold	   = label_bold_flag(panel);   int			 	label_shaded	   = image_shaded(label);   struct pr_size   	 	label_size;   caddr_t		 	label_data;   Rect		 	 	deltas;   short		 	potential_new_rect = FALSE;   if (using_wrapper(panel))      window_rc_units_to_pixels((Window)(LINT_CAST(panel)),       	(Window_attribute *)(LINT_CAST(avlist)));   else      attr_replace_cu(avlist, panel->font, PANEL_ITEM_X_START, 		      panel->item_y_offset, panel->item_y_offset);   /* use the current font & boldness */   if (is_string(label)) {      label_font = image_font(label);      label_bold = image_bold(label);   }   while(attr = (Panel_attribute) *avlist++) {      switch (attr) {	 case PANEL_SHOW_ITEM:	    if ((int) *avlist++) {	       if (hidden(ip)) {		  ip->flags &= ~HIDDEN;		  (*ip->ops->restore)(ip);	       }	    }	    else if (!hidden(ip)) {	       ip->flags |=HIDDEN;	       (*ip->ops->remove)(ip);	    }	    break;	 case PANEL_SHOW_MENU:	    if ((int) *avlist++)               ip->flags |= SHOW_MENU;            else               ip->flags &= ~SHOW_MENU;	    break;	 case PANEL_ITEM_X :	    item_x = (int) *avlist++;	    ip->flags |= ITEM_X_FIXED;	    item_x_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_ITEM_Y :	    item_y = (int) *avlist++;	    ip->flags |= ITEM_Y_FIXED;	    item_y_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_X:	    label_x = (int) *avlist++;	    ip->flags |= LABEL_X_FIXED;	    label_x_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_Y: 	    label_y = (int) *avlist++;	    ip->flags |= LABEL_Y_FIXED;	    label_y_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_VALUE_X:	    value_x = (int) *avlist++;	    ip->flags |= VALUE_X_FIXED;	    value_x_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_VALUE_Y: 	    value_y = (int) *avlist++;	    ip->flags |= VALUE_Y_FIXED;	    value_y_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_IMAGE:	    label_type = IM_PIXRECT;	    label_data = *avlist++;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_STRING:	    label_type = IM_STRING;	    label_data = *avlist++;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_FONT :	    label_font = (struct pixfont *) LINT_CAST(*avlist++);	    label_font_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_BOLD:	    label_bold = (int) *avlist++;	    label_bold_changed = TRUE;	    potential_new_rect = TRUE;	    break;	 case PANEL_LABEL_SHADED:	    label_shaded = (int) *avlist++;	    image_set_shaded(label, label_shaded);	    break;	 case PANEL_LAYOUT:	    switch ((Panel_setting) *avlist) {	       case PANEL_HORIZONTAL:	       case PANEL_VERTICAL:		  ip->layout = (Panel_setting) *avlist++;		  layout_changed = TRUE;	          potential_new_rect = TRUE;		  break;	       default:		  /* invalid layout */		  avlist++;		  break;	    }	    break;	 case PANEL_NOTIFY_PROC:            ip->notify = (int (*)()) LINT_CAST(*avlist++);	    if (!ip->notify)	       ip->notify = panel_nullproc;	    break;	 case PANEL_ADJUSTABLE:	    if ((int) *avlist++)	       ip->flags |= ADJUSTABLE;	    else	       ip->flags &= ~ADJUSTABLE;	    break;	 case PANEL_PAINT:	    ip->repaint = (Panel_setting) *avlist++;	    break;	 case PANEL_ACCEPT_KEYSTROKE: 	    if (*avlist++)	       ip->flags |= WANTS_KEY;	    else	       ip->flags &= ~WANTS_KEY;	    break;	 case PANEL_CLIENT_DATA:	    ip->client_data = *avlist++;	    break;	 case HELP_DATA:	    ip->help_data = *avlist++;	    break;	case PANEL_ITEM_COLOR:	    ip->color_index = (int) *avlist++;	    break;	 default:	    avlist = attr_skip(attr, avlist);	    break;      }   }   /* first handle any item position    * changes.    */   if (item_x_changed || item_y_changed) {      rect_construct(&deltas, 0, 0, 0, 0);      /* compute item offset */      if (item_x_changed)	 deltas.r_left = item_x - ip->rect.r_left;      if (item_y_changed)	 deltas.r_top = item_y - ip->rect.r_top;      if (deltas.r_left || deltas.r_top) 	 /* ITEM_X or ITEM_Y has changed, so re-layout item in	  * order to cause the entire item to change position.	  */ 	 (void)panel_layout(ip, &deltas);   }   /* Now handle label size    * changes .    */   /* update label font & boldness if needed.    * Note that this may be set again below if    * a new label string or image has been given.    */   if (is_string(label) && label_bold_changed) {      if (image_bold(label) && !label_bold) {	  image_set_bold(label, label_bold);	  ip->label_rect.r_width  -= 1;	  label_size_changed = TRUE;      } else if (!image_bold(label) && label_bold) {	  image_set_bold(label, label_bold);	  ip->label_rect.r_width  += 1;	  label_size_changed = TRUE;      }   }   if (is_string(label) && label_font_changed) {      image_set_font(label, label_font);      label_size = pf_textwidth(strlen(image_string(label)), image_font(label),				image_string(label));      if (image_bold(label))	 label_size.x++;      ip->label_rect.r_width  = label_size.x;      ip->label_rect.r_height = label_size.y;      label_size_changed = TRUE;   }   /* free old label, allocate new */   if (set(label_type)) {      char *old_string = is_string(label) ? image_string(label) : NULL;      label_size = panel_make_image(label_font, label, label_type, 				    label_data, label_bold, label_shaded);      ip->label_rect.r_width  = label_size.x;      ip->label_rect.r_height = label_size.y;      label_size_changed = TRUE;      /* now free the old string */      if (old_string)	 free(old_string);   }   /* if the label has changed,    * menu title may be dirty.    */   if (label_size_changed)      ip->menu_status.title_dirty = TRUE;         /* use default positions for label or    * value if not specified.    */   if (layout_changed || label_size_changed || label_x_changed ||        label_y_changed) {      /* layout, label position or size has changed, so re-compute       * default value position.       */ 

⌨️ 快捷键说明

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