| version 1.4, 2005/03/12 12:36:57 | version 1.7, 2011/01/15 16:01:53 | 
| Line 79  fontmng_create(int size, UINT type, cons | Line 79  fontmng_create(int size, UINT type, cons | 
 | gchar *fontname_utf8; | gchar *fontname_utf8; | 
 | int fontalign; | int fontalign; | 
 | int allocsize; | int allocsize; | 
| GdkColormap *colormap; | GdkColormap *cmap; | 
 | GdkColor color; | GdkColor color; | 
 |  | gboolean rv; | 
 |  |  | 
 | if (size < 0) { | if (size < 0) { | 
 | size = -size; | size = -size; | 
| Line 106  fontmng_create(int size, UINT type, cons | Line 107  fontmng_create(int size, UINT type, cons | 
 | return NULL; | return NULL; | 
 | } | } | 
 |  |  | 
| colormap = gtk_widget_get_colormap(GTK_WIDGET(main_window)); | cmap = gtk_widget_get_colormap(GTK_WIDGET(main_window)); | 
| color.red = color.green = color.blue = 0; | memset(&color, 0, sizeof(color)); | 
| if (gdk_color_alloc(colormap, &color) == 0) { | rv = gdk_colormap_alloc_color(cmap, &color, FALSE, FALSE); | 
| fnt.black_pixel = 0; | if (rv) { | 
| } else { |  | 
 | fnt.black_pixel = color.pixel; | fnt.black_pixel = color.pixel; | 
 |  | } else { | 
 |  | fnt.black_pixel = 0; | 
 | } | } | 
 |  |  | 
 | fnt.layout = gtk_widget_create_pango_layout(main_window, NULL); | fnt.layout = gtk_widget_create_pango_layout(main_window, NULL); | 
| Line 150  fontmng_destroy(void *hdl) | Line 152  fontmng_destroy(void *hdl) | 
 |  |  | 
 | if (fnt) { | if (fnt) { | 
 | if (fnt->backsurf) | if (fnt->backsurf) | 
| gdk_pixmap_unref(fnt->backsurf); | g_object_unref(fnt->backsurf); | 
 | if (fnt->layout) | if (fnt->layout) | 
 | g_object_unref(fnt->layout); | g_object_unref(fnt->layout); | 
 | if (fnt->desc) | if (fnt->desc) | 
| Line 160  fontmng_destroy(void *hdl) | Line 162  fontmng_destroy(void *hdl) | 
 | } | } | 
 |  |  | 
 | static void | static void | 
| setfdathead(FNTMNG fhdl, FNTDAT fdat, const gchar *str, int len) | setfdathead(FNTMNG fhdl, FNTDAT fdat, const char *str, int len) | 
 | { | { | 
 |  |  | 
 | UNUSED(str); |  | 
 |  |  | 
 | fdat->width = fhdl->rect.width; | fdat->width = fhdl->rect.width; | 
 | fdat->height = fhdl->rect.height; | fdat->height = fhdl->rect.height; | 
 | fdat->pitch = fhdl->size; | fdat->pitch = fhdl->size; | 
| Line 174  setfdathead(FNTMNG fhdl, FNTDAT fdat, co | Line 174  setfdathead(FNTMNG fhdl, FNTDAT fdat, co | 
 | } | } | 
 |  |  | 
 | static void | static void | 
| getlength1(FNTMNG fhdl, FNTDAT fdat, const gchar *str, int len) | getlength1(FNTMNG fhdl, FNTDAT fdat, const char *str, int len) | 
 | { | { | 
 |  |  | 
 | setfdathead(fhdl, fdat, str, len); | setfdathead(fhdl, fdat, str, len); | 
 | } | } | 
 |  |  | 
 | static void | static void | 
| getfont1(FNTMNG fhdl, FNTDAT fdat, const gchar *str, int len) | getfont1(FNTMNG fhdl, FNTDAT fdat, const char *str, int len) | 
 | { | { | 
 | GdkImage *img; | GdkImage *img; | 
 |  |  | 
| Line 210  getfont1(FNTMNG fhdl, FNTDAT fdat, const | Line 210  getfont1(FNTMNG fhdl, FNTDAT fdat, const | 
 | p++; | p++; | 
 | } | } | 
 | } | } | 
| gdk_image_destroy(img); | g_object_unref(img); | 
 | } else { | } else { | 
 | memset(fdat + 1, 0, fdat->width * fdat->height); | memset(fdat + 1, 0, fdat->width * fdat->height); | 
 | } | } | 
| Line 221  fontmng_getsize(void *hdl, const char *s | Line 221  fontmng_getsize(void *hdl, const char *s | 
 | { | { | 
 | FNTMNG fhdl = (FNTMNG)hdl; | FNTMNG fhdl = (FNTMNG)hdl; | 
 | _FNTDAT fdat; | _FNTDAT fdat; | 
| UINT8 buf[4]; | char buf[4]; | 
 | int width; | int width; | 
 | int len; | int len; | 
 |  |  | 
| if ((fhdl == NULL) || (str == NULL)) | if ((fhdl == NULL) || (str == NULL)) { | 
 | return FAILURE; | return FAILURE; | 
 |  | } | 
 |  |  | 
 | width = 0; | width = 0; | 
 | buf[2] = '\0'; |  | 
 | for (;;) { | for (;;) { | 
| buf[0] = *str++; | while ((len = milstr_charsize(str)) != 0) { | 
| if ((((buf[0] ^ 0x20) - 0xa1) & 0xff) < 0x3c && *str != '\0') { | memcpy(buf, str, len * sizeof(char)); | 
| buf[1] = *str++; | buf[len] = '\0'; | 
| len = 2; | getlength1(fhdl, &fdat, buf, len); | 
| } else if (buf[0] >= 0xa1 && buf[1] <= 0xdf) { | width += fdat.pitch; | 
| buf[1] = buf[0]; |  | 
| buf[0] = 0x8e; |  | 
| len = 1; |  | 
| } else if (buf[0]) { |  | 
| buf[1] = '\0'; |  | 
| len = 1; |  | 
| } else { |  | 
| break; |  | 
 | } | } | 
 | getlength1(fhdl, &fdat, buf, len); |  | 
 | width += fdat.pitch; |  | 
 | } | } | 
 | if (pt) { | if (pt) { | 
 | pt->x = width; | pt->x = width; | 
| Line 260  fontmng_getdrawsize(void *hdl, const cha | Line 250  fontmng_getdrawsize(void *hdl, const cha | 
 | { | { | 
 | FNTMNG fhdl = (FNTMNG)hdl; | FNTMNG fhdl = (FNTMNG)hdl; | 
 | _FNTDAT fdat; | _FNTDAT fdat; | 
| UINT8 buf[4]; | char buf[4]; | 
 | int width; | int width; | 
 | int len; | int len; | 
 | int posx; | int posx; | 
 |  |  | 
| if ((hdl == NULL) || (str == NULL)) | if ((hdl == NULL) || (str == NULL)) { | 
 | return FAILURE; | return FAILURE; | 
 |  | } | 
 |  |  | 
 | width = 0; | width = 0; | 
 | posx = 0; | posx = 0; | 
 | buf[2] = '\0'; |  | 
 | for (;;) { | for (;;) { | 
| buf[0] = *str++; | while ((len = milstr_charsize(str)) != 0) { | 
| if ((((buf[0] ^ 0x20) - 0xa1) & 0xff) < 0x3c && *str != '\0') { | memcpy(buf, str, len * sizeof(char)); | 
| buf[1] = *str++; | buf[len] = '\0'; | 
| len = 2; | getlength1(fhdl, &fdat, buf, len); | 
| } else if (buf[0] >= 0xa1 && buf[0] <= 0xdf) { | width = posx + max(fdat.width, fdat.pitch); | 
| buf[1] = buf[0]; | posx += fdat.pitch; | 
| buf[0] = 0x8e; |  | 
| len = 1; |  | 
| } else if (buf[0]) { |  | 
| buf[1] = '\0'; |  | 
| len = 1; |  | 
| } else { |  | 
| break; |  | 
 | } | } | 
 | getlength1(fhdl, &fdat, buf, len); |  | 
 | width = posx + max(fdat.width, fdat.pitch); |  | 
 | posx += fdat.pitch; |  | 
 | } | } | 
 | if (pt) { | if (pt) { | 
 | pt->x = width; | pt->x = width; | 
| Line 302  fontmng_get(void *hdl, const char *str) | Line 282  fontmng_get(void *hdl, const char *str) | 
 | { | { | 
 | FNTMNG fhdl = (FNTMNG)hdl; | FNTMNG fhdl = (FNTMNG)hdl; | 
 | FNTDAT fdat = (FNTDAT)(fhdl + 1); | FNTDAT fdat = (FNTDAT)(fhdl + 1); | 
| UINT8 buf[4]; | char buf[4]; | 
 | gchar *utf8; | gchar *utf8; | 
 | int len; | int len; | 
 |  |  | 
| Line 310  fontmng_get(void *hdl, const char *str) | Line 290  fontmng_get(void *hdl, const char *str) | 
 | return NULL; | return NULL; | 
 | } | } | 
 |  |  | 
| if (((((str[0] ^ 0x20) - 0xa1) & 0xff) < 0x3c) && (str[1] != '\0')) { | while ((len = milstr_charsize(str)) != 0) { | 
| codecnv_sjistoeuc(buf, 4, str, 2); | memcpy(buf, str, len * sizeof(char)); | 
| len = 2; | buf[len] = '\0'; | 
| } else if ((UINT8)str[0] >= 0xa1 && (UINT8)str[0] <= 0xdf) { | utf8 = g_locale_to_utf8(buf, -1, NULL, NULL, NULL); | 
| buf[0] = 0x8e; | if (utf8) { | 
| buf[1] = str[0]; | getfont1(fhdl, fdat, utf8, len); | 
| buf[2] = '\0'; | g_free(utf8); | 
| len = 1; | } | 
| } else { | str += len; | 
| buf[0] = str[0]; |  | 
| buf[1] = '\0'; |  | 
| len = 1; |  | 
| } |  | 
| utf8 = g_locale_to_utf8(buf, -1, NULL, NULL, NULL); |  | 
| if (utf8) { |  | 
| getfont1(fhdl, fdat, utf8, len); |  | 
| g_free(utf8); |  | 
| return fdat; |  | 
 | } | } | 
| return NULL; | return fdat; | 
 | } | } |