📄 ctk-gtksim-service.c
字号:
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 + -