#include "ctk-gtksim.h" #include "ctk-gtksim-draw.h" #define RASTER_X 8 #define FONT_BASELINE 8 struct ctk_gtksim_draw_font { /* GdkFont *font;*/ PangoFontDescription *font; }; struct ctk_gtksim_draw_color { GdkGC *color; }; struct ctk_gtksim_draw_font ctk_gtksim_draw_font_normal, ctk_gtksim_draw_font_bold, ctk_gtksim_draw_font_menu, ctk_gtksim_draw_font_monospace, ctk_gtksim_draw_font_monospace_bold; struct ctk_gtksim_draw_color ctk_gtksim_draw_color_white, ctk_gtksim_draw_color_lightgray, ctk_gtksim_draw_color_midgray, ctk_gtksim_draw_color_darkgray, ctk_gtksim_draw_color_ddarkgray, ctk_gtksim_draw_color_black, ctk_gtksim_draw_color_blue; /*static GdkFont *font, *ctk_gtksim_draw_font_bold, *menufont, *ctk_gtksim_draw_font_monospace;*/ static PangoLayout *layout; /*--------------------------------------------------------------------------*/ int ctk_gtksim_draw_string_width(struct ctk_gtksim_draw_font *font, char *str, int monospace) { int width; if(monospace) { return strlen(str) * RASTER_X; } else { pango_layout_set_text(layout, str, -1); pango_layout_set_font_description(layout, font->font); pango_layout_get_size(layout, &width, NULL); return width / PANGO_SCALE; /* return gdk_string_width(font->font, str);*/ } } /*--------------------------------------------------------------------------*/ void ctk_gtksim_draw_string(struct ctk_gtksim_draw_font *font, struct ctk_gtksim_draw_color *color, int x, int y, char *str, int monospace) { int i; char text[2]; pango_layout_set_font_description(layout, font->font); if(monospace) { text[1] = 0; for(i = 0; i < strlen(str); ++i) { text[0] = str[i]; pango_layout_set_text(layout, text, 1); gdk_draw_layout(ctk_gtksim_pixmap, color->color, x, y, layout); /* gdk_draw_string(ctk_gtksim_pixmap, font->font, color->color, x, y + FONT_BASELINE, text);*/ x += RASTER_X; } } else { pango_layout_set_text(layout, str, -1); gdk_draw_layout(ctk_gtksim_pixmap, color->color, x, y, layout); /* gdk_draw_string(ctk_gtksim_pixmap, font->font, color->color, x, y + FONT_BASELINE, str);*/ } } /*--------------------------------------------------------------------------*/ static GdkGC * get_color(unsigned short r, unsigned short g, unsigned short b) { GdkGCValues values; GdkColor color; color.pixel = 0; color.red = r; color.green = g; color.blue = b; if(gdk_colormap_alloc_color(gdk_colormap_get_system(), &color, FALSE, TRUE)) { } values.foreground = color; return gdk_gc_new_with_values(ctk_gtksim_drawing_area->window, &values, GDK_GC_FOREGROUND); } /*--------------------------------------------------------------------------*/ void ctk_gtksim_draw_init(void) { /* ctk_gtksim_draw_font_normal.font = gdk_font_load("-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*"); if(ctk_gtksim_draw_font_normal.font != NULL) { printf("ctk-gtksim-service: Font loaded OK\n"); } else { printf("ctk-gtksim-service: Font loading failed\n"); exit(1); } ctk_gtksim_draw_font_bold.font = gdk_font_load("-*-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*"); if(ctk_gtksim_draw_font_bold.font != NULL) { printf("ctk-gtksim-service: Font loaded OK\n"); } else { printf("ctk-gtksim-service: Font loading failed\n"); exit(1); } ctk_gtksim_draw_font_menu.font = gdk_font_load("-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*"); if(ctk_gtksim_draw_font_menu.font != NULL) { printf("ctk-gtksim-service: Font loaded OK\n"); } else { printf("ctk-gtksim-service: Font loading failed\n"); exit(1); } ctk_gtksim_draw_font_monospace.font = gdk_font_load("-*-courier-medium-r-*-*-*-120-*-*-*-*-*-*"); if(ctk_gtksim_draw_font_monospace.font != NULL) { printf("ctk-gtksim-service: Font loaded OK\n"); } else { printf("ctk-gtksim-service: Font loading failed\n"); exit(1); } */ ctk_gtksim_draw_color_blue.color = get_color(0, 0, 0xffff); ctk_gtksim_draw_color_white.color = get_color(0xffff, 0xffff, 0xffff); ctk_gtksim_draw_color_lightgray.color = get_color(0xefff, 0xefff, 0xefff); ctk_gtksim_draw_color_midgray.color = get_color(0xdfff, 0xdfff, 0xdfff); ctk_gtksim_draw_color_darkgray.color = get_color(0xcfff, 0xcfff, 0xcfff); ctk_gtksim_draw_color_ddarkgray.color = get_color(0xafff, 0xafff, 0xafff); ctk_gtksim_draw_color_black.color = get_color(0, 0, 0); layout = pango_layout_new(gtk_widget_get_pango_context(ctk_gtksim_drawing_area)); ctk_gtksim_draw_font_normal.font = pango_font_description_from_string("Arial 8"); ctk_gtksim_draw_font_bold.font = pango_font_description_from_string("Arial bold 8"); ctk_gtksim_draw_font_menu.font = pango_font_description_from_string("Arial bold 9"); ctk_gtksim_draw_font_monospace.font = pango_font_description_from_string("Monospace 8"); ctk_gtksim_draw_font_monospace_bold.font = pango_font_description_from_string("Monospace bold 8"); } /*--------------------------------------------------------------------------*/