173 lines
5.1 KiB
C
173 lines
5.1 KiB
C
|
|
||
|
#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");
|
||
|
|
||
|
|
||
|
}
|
||
|
/*--------------------------------------------------------------------------*/
|