From: Jason Rumney Date: Sat, 11 Oct 2003 22:35:25 +0000 (+0000) Subject: (Fx_create_frame, x_create_tip_frame): Use new version of x_new_fontset. X-Git-Tag: emacs-pretest-23.0.90~8295^2~1763 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=10b4bc332e02b5aec49dd0cac84eb61642924568;p=emacs.git (Fx_create_frame, x_create_tip_frame): Use new version of x_new_fontset. (w32_load_system_font): Initialize charset as unicode. font_info.encoding becomes encoding_type. (w32_to_x_font): Use decode_coding_c_string in place of decode_coding. (x_to_w32_font): Use encode_coding_object in place of encode_coding. (syms_of_w32fns): Set get_font_repertory_func. --- diff --git a/src/w32fns.c b/src/w32fns.c index e5ec00e8651..bf271cfa449 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -29,22 +29,23 @@ Boston, MA 02111-1307, USA. */ #include #include "lisp.h" -#include "charset.h" -#include "dispextern.h" #include "w32term.h" -#include "keyboard.h" #include "frame.h" #include "window.h" #include "buffer.h" -#include "fontset.h" #include "intervals.h" +#include "dispextern.h" +#include "keyboard.h" #include "blockinput.h" #include "epaths.h" -#include "w32heap.h" -#include "termhooks.h" +#include "character.h" +#include "charset.h" #include "coding.h" #include "ccl.h" +#include "fontset.h" #include "systime.h" +#include "termhooks.h" +#include "w32heap.h" #include "bitmaps/gray.xbm" @@ -4399,7 +4400,7 @@ This function is an internal primitive--use `make-frame' instead. */) { tem = Fquery_fontset (font, Qnil); if (STRINGP (tem)) - font = x_new_fontset (f, SDATA (tem)); + font = x_new_fontset (f, tem); else font = x_new_font (f, SDATA (font)); } @@ -4784,11 +4785,13 @@ w32_load_system_font (f,fontname,size) /* Now fill in the slots of *FONTP. */ BLOCK_INPUT; + bzero (fontp, sizeof (*fontp)); fontp->font = font; fontp->font_idx = i; fontp->name = (char *) xmalloc (strlen (fontname) + 1); bcopy (fontname, fontp->name, strlen (fontname) + 1); + fontp->charset = charset_unicode; charset = xlfd_charset_of_font (fontname); /* Cache the W32 codepage for a font. This makes w32_encode_char @@ -4815,7 +4818,7 @@ w32_load_system_font (f,fontname,size) (0:0x20..0x7F, 1:0xA0..0xFF, (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, 2:0xA020..0xFF7F). For the moment, we don't know which charset - uses this font. So, we set information in fontp->encoding[1] + uses this font. So, we set information in fontp->encoding_type which is never used by any charset. If mapping can't be decided, set FONT_ENCODING_NOT_DECIDED. */ @@ -4823,9 +4826,9 @@ w32_load_system_font (f,fontname,size) type FONT_ENCODING_NOT_DECIDED. */ encoding = strrchr (fontp->name, '-'); if (encoding && strnicmp (encoding+1, "sjis", 4) == 0) - fontp->encoding[1] = 4; + fontp->encoding_type = 4; else - fontp->encoding[1] = FONT_ENCODING_NOT_DECIDED; + fontp->encoding_type = FONT_ENCODING_NOT_DECIDED; /* The following three values are set to 0 under W32, which is what they get set to if XGetFontProperty fails under X. */ @@ -5403,7 +5406,6 @@ w32_to_x_font (lplogfont, lpxstr, len, specific_charset) char *fontname_dash; int display_resy = (int) one_w32_display_info.resy; int display_resx = (int) one_w32_display_info.resx; - int bufsz; struct coding_system coding; if (!lpxstr) abort (); @@ -5425,12 +5427,14 @@ w32_to_x_font (lplogfont, lpxstr, len, specific_charset) coding.mode |= CODING_MODE_LAST_BLOCK; /* We explicitely disable composition handling because selection data should not contain any composition sequence. */ - coding.composing = COMPOSITION_DISABLED; - bufsz = decoding_buffer_size (&coding, LF_FACESIZE); + coding.common_flags &= ~CODING_ANNOTATION_MASK; + + coding.dst_bytes = LF_FACESIZE * 2; + coding.destination = (unsigned char *) xmalloc (coding.dst_bytes + 1); + decode_coding_c_string (&coding, lplogfont->lfFaceName, + strlen(lplogfont->lfFaceName), Qnil); + fontname = coding.destination; - fontname = alloca(sizeof(*fontname) * bufsz); - decode_coding (&coding, lplogfont->lfFaceName, fontname, - strlen(lplogfont->lfFaceName), bufsz - 1); *(fontname + coding.produced) = '\0'; /* Replace dashes with underscores so the dashes are not @@ -5549,21 +5553,22 @@ x_to_w32_font (lpxstr, lplogfont) if (fields > 0 && name[0] != '*') { - int bufsize; - unsigned char *buf; - setup_coding_system (Fcheck_coding_system (Vlocale_coding_system), &coding); coding.src_multibyte = 1; coding.dst_multibyte = 1; - bufsize = encoding_buffer_size (&coding, strlen (name)); - buf = (unsigned char *) alloca (bufsize); + coding.dst_bytes = strlen (name) * 2; + coding.destination = (unsigned char *) xmalloc (coding.dst_bytes); coding.mode |= CODING_MODE_LAST_BLOCK; - encode_coding (&coding, name, buf, strlen (name), bufsize); + encode_coding_object (&coding, build_string (name), 0, 0, + strlen (name), coding.dst_bytes, Qnil); if (coding.produced >= LF_FACESIZE) coding.produced = LF_FACESIZE - 1; - buf[coding.produced] = 0; - strcpy (lplogfont->lfFaceName, buf); + + coding.destination[coding.produced] = '\0'; + + strcpy (lplogfont->lfFaceName, coding.destination); + xfree (coding.destination); } else { @@ -12848,7 +12853,7 @@ x_create_tip_frame (dpyinfo, parms, text) { tem = Fquery_fontset (font, Qnil); if (STRINGP (tem)) - font = x_new_fontset (f, SDATA (tem)); + font = x_new_fontset (f, tem); else font = x_new_font (f, SDATA (font)); } @@ -14390,6 +14395,7 @@ versions of Windows) characters. */); find_ccl_program_func = w32_find_ccl_program; query_font_func = w32_query_font; set_frame_fontset_func = x_set_font; + get_font_repertory_func = x_get_font_repertory; check_window_system_func = check_w32; /* Images. */