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

📄 ctk-gtksim-service.c

📁 伟大的Contiki工程, 短小精悍 的操作系统, 学习编程不可不看
💻 C
📖 第 1 页 / 共 2 页
字号:
			 w->w * RASTER_X + BUTTON_X_BORDER * 2 + 1,			 RASTER_Y + BUTTON_Y_BORDER * 2 + 1);*/    } else {      gdk_draw_rectangle(ctk_gtksim_pixmap,			 darkgray,			 FALSE,			 x * RASTER_X - BUTTON_X_BORDER,			 y * RASTER_Y - BUTTON_Y_BORDER + MENUBAR_HEIGHT,			 w->w * RASTER_X + BUTTON_X_BORDER * 2,			 BUTTON_HEIGHT + BUTTON_Y_BORDER);    }    gdk_draw_rectangle(ctk_gtksim_pixmap,		       buttoncol,		       TRUE,		       x * RASTER_X - BUTTON_X_BORDER + 1,		       y * RASTER_Y + MENUBAR_HEIGHT,		       w->w * RASTER_X + BUTTON_X_BORDER * 2 - 2,		       BUTTON_HEIGHT);    gdk_draw_line(ctk_gtksim_pixmap,		  ddarkgray,		  x * RASTER_X - BUTTON_X_BORDER + 1,		  y * RASTER_Y + BUTTON_HEIGHT - 1 + MENUBAR_HEIGHT,		  x * RASTER_X + w->w * RASTER_X + BUTTON_X_BORDER - 1,		  y * RASTER_Y + BUTTON_HEIGHT - 1 + MENUBAR_HEIGHT);    gdk_draw_line(ctk_gtksim_pixmap,		  ddarkgray,		  x * RASTER_X + w->w * RASTER_X + BUTTON_X_BORDER - 1,		  y * RASTER_Y + BUTTON_HEIGHT - 1 + MENUBAR_HEIGHT,		  x * RASTER_X + w->w * RASTER_X + BUTTON_X_BORDER - 1,		  y * RASTER_Y + MENUBAR_HEIGHT);    if(w != &w->window->closebutton) {      ctk_gtksim_draw_string(buttonfont,			     &ctk_gtksim_draw_color_black,			     RASTER_X * x +			     (w->w * RASTER_X) / 2 - width / 2,			     RASTER_Y * y + MENUBAR_HEIGHT,			     w->widget.button.text,			     monospace);    }    break;  case CTK_WIDGET_HYPERLINK:    strncpy(text, w->widget.hyperlink.text, w->w);    text[w->w] = 0;    width = ctk_gtksim_draw_string_width(textfont, text, monospace);    gdk_draw_rectangle(ctk_gtksim_pixmap,		       bgcol,		       TRUE,		       x * RASTER_X,		       y * RASTER_Y + MENUBAR_HEIGHT,		       width,		       RASTER_Y);    if(focus & CTK_FOCUS_WIDGET) {      ctk_gtksim_draw_string(textfont_bold,			     &ctk_gtksim_draw_color_blue,			     RASTER_X * x,			     RASTER_Y * y + MENUBAR_HEIGHT,			     text, monospace);    } else {      ctk_gtksim_draw_string(textfont,			     &ctk_gtksim_draw_color_blue,			     RASTER_X * x,			     RASTER_Y * y + MENUBAR_HEIGHT,			     text, monospace);    }    gdk_draw_line(ctk_gtksim_pixmap,		  blue,		  x * RASTER_X,		  y * RASTER_Y + FONT_BASELINE + 1 + MENUBAR_HEIGHT,		  x * RASTER_X + width,		  y * RASTER_Y + FONT_BASELINE + 1 + MENUBAR_HEIGHT);    break;  case CTK_WIDGET_TEXTENTRY:    strncpy(text, w->widget.textentry.text, sizeof(text));    text[w->widget.textentry.xpos] = 0;    width = ctk_gtksim_draw_string_width(textfont, text, monospace);    gdk_draw_rectangle(ctk_gtksim_pixmap,		       darkgray,		       FALSE,		       x * RASTER_X - TEXTENTRY_X_BORDER + RASTER_X,		       y * RASTER_Y - TEXTENTRY_Y_BORDER + MENUBAR_HEIGHT,		       w->w * RASTER_X + TEXTENTRY_X_BORDER * 2 - 1,		       TEXTENTRY_HEIGHT + TEXTENTRY_Y_BORDER);    gdk_draw_rectangle(ctk_gtksim_pixmap,		       bgcol,		       TRUE,		       x * RASTER_X + RASTER_X,		       y * RASTER_Y + MENUBAR_HEIGHT,		       w->w * RASTER_X,		       TEXTENTRY_HEIGHT);    ctk_gtksim_draw_string(textfont,			   &ctk_gtksim_draw_color_black,			   RASTER_X * x + RASTER_X,			   RASTER_Y * y + MENUBAR_HEIGHT,			   w->widget.textentry.text,			   monospace);    if(focus == (CTK_FOCUS_WIDGET|CTK_FOCUS_WINDOW) ||       focus == (CTK_FOCUS_WIDGET|CTK_FOCUS_DIALOG)) {      gdk_draw_line(ctk_gtksim_pixmap,		    black,		    x * RASTER_X + width + RASTER_X,		    y * RASTER_Y + MENUBAR_HEIGHT,		    x * RASTER_X + width + RASTER_X,		    y * RASTER_Y + TEXTENTRY_HEIGHT - 1 + MENUBAR_HEIGHT);    }    break;  case CTK_WIDGET_ICON:    width = ctk_gtksim_draw_string_width(&ctk_gtksim_draw_font_normal,					 w->widget.icon.title, monospace);    if(x * RASTER_X + width >= CTK_GTKSIM_SCREEN_WIDTH - RASTER_X) {      xpos = CTK_GTKSIM_SCREEN_WIDTH - width - RASTER_X;    } else {      xpos = x * RASTER_X;    }    if((focus & CTK_FOCUS_WIDGET) == 0) {      color = black;      inv_color = bgcol;    } else {      color = bgcol;      inv_color = black;    }    bitmap = w->widget.icon.bitmap;    if (bitmap != NULL) {      int k, c;      for (c = 0; c < 9; ++c) {	for (i = 0; i < 8; ++i) {	  unsigned char b = bitmap[i + c * 8];	  for (k = 0; k < 8; k++) {	    gdk_draw_rectangle(ctk_gtksim_pixmap,			       ((b >> k) & 1) > 0 ? color : inv_color,			       TRUE,			       x * RASTER_X + 8 * (c % 3) + (8 - k),			       y * RASTER_Y + MENUBAR_HEIGHT +			       8 * (c / 3) + i,			       1, 1);	  }	}      }    } else {      gdk_draw_rectangle(ctk_gtksim_pixmap,			 color,			 TRUE,			 x * RASTER_X,			 y * RASTER_Y + MENUBAR_HEIGHT,			 24, 24);    }    /*    if((focus & CTK_FOCUS_WIDGET) == 0) {      gdk_draw_rectangle(ctk_gtksim_pixmap,			 bgcol,			 TRUE,			 x * RASTER_X,			 y * RASTER_Y + MENUBAR_HEIGHT,			 24, 24);    } else {      gdk_draw_rectangle(ctk_gtksim_pixmap,			 black,			 TRUE,			 x * RASTER_X,			 y * RASTER_Y + MENUBAR_HEIGHT,			 24, 24);			 }*/        /*      gdk_draw_rectangle(ctk_gtksim_pixmap,	    white,	    TRUE,	    xpos,	    RASTER_Y * y + 24 + 1 + MENUBAR_HEIGHT,	    width,	    RASTER_Y);*/        ctk_gtksim_draw_string(textfont,			   &ctk_gtksim_draw_color_black,			   xpos + 1,			   RASTER_Y * y + 24 + 1 + MENUBAR_HEIGHT,			   w->widget.icon.title,			   monospace);    ctk_gtksim_draw_string(textfont,			   &ctk_gtksim_draw_color_white,			   xpos,			   RASTER_Y * y + 24 + MENUBAR_HEIGHT,			   w->widget.icon.title,			   monospace);    break;  case CTK_WIDGET_BITMAP:    bitmap = w->widget.bitmap.bitmap;    if(bitmap != NULL) {      int bx, by;      int k;      int xtmp;            color = black;      inv_color = bgcol;      for(by = 0; by < w->h; ++by) {	for(bx = 0; bx < w->w; ++bx) {	  for (i = 0; i < 8; ++i) {	    unsigned char b = bitmap[i + (by * w->w + bx) * 8];	    for (k = 0; k < 8; k++) {	      gdk_draw_rectangle(ctk_gtksim_pixmap,				 ((b >> k) & 1) > 0 ? color : inv_color,				 TRUE,				 x * RASTER_X + 8 * bx + (8 - k),				 y * RASTER_Y + MENUBAR_HEIGHT +				 8 * by + i,				 1, 1);	    }	  }	}      }    }    break;  default:    break;  }}/*--------------------------------------------------------------------------*/static voids_ctk_draw_widget(struct ctk_widget *w,		  unsigned char focus,		  unsigned char clipy1,		  unsigned char clipy2){  struct ctk_window *win = w->window;  unsigned char posx, posy;  posx = win->x + WINDOWBORDER_WIDTH;  posy = win->y + WINDOWTITLE_HEIGHT + MENU_HEIGHT;  if(w == win->focused) {    focus |= CTK_FOCUS_WIDGET;  }    draw_widget(w, posx, posy,	      posx + win->w,	      posy + win->h,	      clipy1, clipy2,	      focus);    ctk_gtksim_set_redrawflag();}/*--------------------------------------------------------------------------*/static voiddraw_menu(struct ctk_menu *m, int x, int open){  int i;  int xpos;    if(x >= CTK_GTKSIM_SCREEN_WIDTH / RASTER_X - 16) {    xpos = CTK_GTKSIM_SCREEN_WIDTH / RASTER_X - 16;  } else {    xpos = x;  }    if(open) {    gdk_draw_rectangle(ctk_gtksim_pixmap,		       black,		       TRUE,		       RASTER_X * x, 0,		       m->titlelen * RASTER_X,		       RASTER_Y + MENUBAR_HEIGHT);        ctk_gtksim_draw_string(&ctk_gtksim_draw_font_menu,			   &ctk_gtksim_draw_color_white,			   RASTER_X * x + 2,			   MENUBAR_FONT_BASELINE,			   m->title, 0);    gdk_draw_rectangle(ctk_gtksim_pixmap,		       white,		       TRUE,		       xpos * RASTER_X,		       RASTER_Y * MENU_HEIGHT + MENUBAR_HEIGHT,		       (xpos + 16) * RASTER_X,		       (m->nitems) * RASTER_Y);        for(i = 0; i < m->nitems; ++i) {      if(i == m->active) {	gdk_draw_rectangle(ctk_gtksim_pixmap,			   black,			   TRUE,			   RASTER_X * xpos,			   (MENU_HEIGHT + i) * RASTER_Y + MENUBAR_HEIGHT,			   (xpos + 16) * RASTER_X,			   RASTER_Y);	ctk_gtksim_draw_string(&ctk_gtksim_draw_font_normal,			       &ctk_gtksim_draw_color_white,			       RASTER_X * xpos + 2,			       (MENU_HEIGHT + i) * RASTER_Y +			       MENUBAR_HEIGHT,			       m->items[i].title, 0);      } else {	ctk_gtksim_draw_string(&ctk_gtksim_draw_font_normal,			       &ctk_gtksim_draw_color_black,			       RASTER_X * xpos + 2,			       (MENU_HEIGHT + i) * RASTER_Y + MENUBAR_HEIGHT,			       m->items[i].title, 0);      }    }  } else {    /*    gdk_draw_rectangle(ctk_gtksim_pixmap,		       white,		       TRUE,		       RASTER_X * x, 0,		       m->titlelen * RASTER_X, RASTER_Y);*/        ctk_gtksim_draw_string(&ctk_gtksim_draw_font_menu,			   &ctk_gtksim_draw_color_black,			   RASTER_X * x, MENUBAR_FONT_BASELINE,			   m->title, 0);  }}/*--------------------------------------------------------------------------*/static voids_ctk_draw_menus(struct ctk_menus *menus){  struct ctk_menu *m;  int x;    if(menubar != NULL) {    gdk_draw_pixbuf(ctk_gtksim_pixmap,		    darkgray,		    menubar,		    0, 0,		    0, 0,		    CTK_GTKSIM_SCREEN_WIDTH,		    RASTER_Y + MENUBAR_HEIGHT,		    GDK_RGB_DITHER_NONE, 0, 0);  }    x = 1;  for(m = menus->menus->next; m != NULL; m = m->next) {    draw_menu(m, x, m == menus->open);    x += strlen(m->title);  }  x = CTK_GTKSIM_SCREEN_WIDTH / RASTER_X - strlen(menus->menus->title);  draw_menu(menus->menus, x, menus->menus == menus->open);      /*  gdk_draw_line(ctk_gtksim_pixmap,		ctk_gtksim_drawing_area->style->black_gc,		0, RASTER_Y,		CTK_GTKSIM_SCREEN_WIDTH,		RASTER_Y);*/  ctk_gtksim_set_redrawflag();}/*--------------------------------------------------------------------------*/static unsigned chars_ctk_draw_width(void){  return CTK_GTKSIM_SCREEN_WIDTH / RASTER_X;}/*--------------------------------------------------------------------------*/static unsigned chars_ctk_draw_height(void){  return CTK_GTKSIM_SCREEN_HEIGHT / RASTER_Y;}/*--------------------------------------------------------------------------*/static unsigned shorts_ctk_mouse_xtoc(unsigned short x){  return x / RASTER_X;}/*--------------------------------------------------------------------------*/static unsigned shorts_ctk_mouse_ytoc(unsigned short y){  if(y < MENUBAR_HEIGHT) {    return 0;  } else {    return (y - MENUBAR_HEIGHT) / RASTER_Y;  }}/*--------------------------------------------------------------------------*/SERVICE(ctk_gtksim_service, ctk_draw_service,{  WINDOWBORDER_WIDTH,    WINDOWBORDER_HEIGHT,    WINDOWTITLE_HEIGHT,    s_ctk_draw_init,    s_ctk_draw_clear,    s_ctk_draw_clear_window,    s_ctk_draw_window,    s_ctk_draw_dialog,    s_ctk_draw_widget,    s_ctk_draw_menus,    s_ctk_draw_width,    s_ctk_draw_height,    s_ctk_mouse_xtoc,    s_ctk_mouse_ytoc,});PROCESS(ctk_gtksim_service_process, "CTK GTK driver");PROCESS_THREAD(ctk_gtksim_service_process, ev, data) {    PROCESS_BEGIN();  SERVICE_REGISTER(ctk_gtksim_service);  ctk_draw_init();  ctk_desktop_redraw(NULL);    while(ev != PROCESS_EVENT_SERVICE_REMOVED &&	ev != PROCESS_EVENT_EXIT) {    process_poll(&ctk_gtksim_service_process);    PROCESS_WAIT_EVENT();    ctk_gtksim_redraw();      }  SERVICE_REMOVE(ctk_gtksim_service);    PROCESS_END();}/*--------------------------------------------------------------------------*/

⌨️ 快捷键说明

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