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

📄 panel_paint.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)panel_paint.c 1.1 92/07/30 Copyr 1984 Sun Micro";#endif#endif/*               Copyright (c) 1986 by Sun Microsystems, Inc.                */#include <suntool/panel_impl.h>voidpanel_resize(panel)panel_handle panel;{   Rect	r;   short			caret_was_on = FALSE;   /* turn the caret off, since it    * may be clipped at the edge of the panel.    */   if (panel->caret_on) {      caret_was_on = TRUE;      panel_caret_on(panel, FALSE);   }   (void)win_getsize(panel->windowfd, &r);   panel->rect = r;   panel_resize_region(panel);   panel_update_scrollbars(panel, &panel->rect);   if (caret_was_on)      panel_caret_on(panel, TRUE);}voidpanel_display(panel, flag)register panel_handle panel;Panel_setting   	flag;{   register panel_item_handle   ip;   short			caret_was_on = FALSE;   register int			x_offset, y_offset;   Rect				rect;   extern   pw_damaged();   if (panel->caret_on) {      caret_was_on = TRUE;      panel_caret_on(panel, FALSE);   }   /* clear if needed */   if (flag == PANEL_CLEAR) {      (void)pw_writebackground(panel->pixwin, 0,0,         panel->rect.r_width, panel->rect.r_height, PIX_CLR);       (void)scrollbar_paint_clear(panel->v_scrollbar);       (void)scrollbar_paint_clear(panel->h_scrollbar);   } else {       (void)scrollbar_paint(panel->v_scrollbar);       (void)scrollbar_paint(panel->h_scrollbar);   }   /* Set view pixwin to be using the same clipping as pixwin */   if (panel->pixwin->pw_clipops->pwco_getclipping == pw_damaged)	   (void)pw_damaged(panel->view_pixwin);   /* lock around the whole view pixwin */   rect = *panel->view_pixwin->pw_clipdata->pwcd_regionrect;   rect.r_left = rect.r_top = 0;   (void)pw_lock(panel->view_pixwin, &rect);   /* paint each hidden item */   for (ip = panel->items; ip; ip = ip->next)      if (hidden(ip))	 (void)panel_paint_item(ip, PANEL_NO_CLEAR);   /* paint each non-hidden item */   x_offset = panel->h_offset - 	      panel->view_pixwin->pw_clipdata->pwcd_regionrect->r_left;   y_offset = panel->v_offset - 	      panel->view_pixwin->pw_clipdata->pwcd_regionrect->r_top;   for (ip = panel->items; ip; ip = ip->next)      if (!hidden(ip)) {	  /* only paint the item if it intersects with the	   * subwindow pixwin.	   */	  rect = ip->rect;	  rect_passtochild(x_offset, y_offset, &rect);          if (rl_rectintersects(&rect, &panel->pixwin->pw_clipdata->pwcd_clipping))	      (void)panel_paint_item(ip, PANEL_NO_CLEAR);      }   if (panel->pixwin->pw_clipops->pwco_getclipping == pw_damaged)	   (void)pw_donedamaged(panel->view_pixwin);   if (caret_was_on)      panel_caret_on(panel, TRUE);   (void)pw_unlock(panel->view_pixwin);}/*****************************************************************************//* panel_paint()                                                             *//* calls the painting routine for panels or items, as appropriate.           *//*****************************************************************************/panel_paint(client_object, flag)Panel		client_object;Panel_setting   flag;{   panel_handle    object = PANEL_CAST(client_object);   short	caret_was_on = FALSE;   panel_handle	panel;   if (!object || (flag != PANEL_CLEAR && flag != PANEL_NO_CLEAR))      return NULL;   panel = is_panel(object) ? object : ((panel_item_handle)object)->panel;   if (panel->caret_on) {      caret_was_on = TRUE;      panel_caret_on(panel, FALSE);   }   if (is_panel(object))      (*object->ops->paint)(object, flag);   else      /* This is a hack to allow pre & post painting actions       * for all items.       */      (void)panel_paint_item((panel_item_handle)object, flag);         if (caret_was_on || ((panel_item_handle) object) == panel->caret)      panel_caret_on(panel, TRUE);   return 1;}panel_paint_item(ip, flag)register panel_item_handle	ip;Panel_setting			flag;{   register panel_handle	panel = ip->panel;   if (flag == PANEL_NONE)      return;   /* only clear if specified or hidden */   if (flag == PANEL_CLEAR || hidden(ip)) {      /* clear the previous painted item */      (void)panel_pw_writebackground(panel, 	  ip->painted_rect.r_left, ip->painted_rect.r_top,	  ip->painted_rect.r_width, ip->painted_rect.r_height, PIX_CLR);      /* nothing is painted */      rect_construct(&ip->painted_rect, 0, 0, 0, 0);   }   if (!hidden(ip)) {      Rect			rect;      Pixwin			*pixwin = panel->view_pixwin;      struct pixwin_clipdata	*cd = pixwin->pw_clipdata;      /* don't lock or paint unless the item is visible */      rect = ip->rect;      rect_passtochild(panel->h_offset, panel->v_offset, &rect);      if (rl_rectintersects(&rect, &cd->pwcd_clipping)) {         /* Lock, paint & unlock */         (void)pw_lock(pixwin, &rect);         (*ip->ops->paint)(ip);         (void)pw_unlock(pixwin);         ip->painted_rect = ip->rect;      }   }}

⌨️ 快捷键说明

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