diff options
author | Egbert Eich <eich@freedesktop.org> | 2004-04-23 18:42:09 +0000 |
---|---|---|
committer | Egbert Eich <eich@freedesktop.org> | 2004-04-23 18:42:09 +0000 |
commit | c6349f43193b74a3c09945f3093a871b0157ba47 (patch) | |
tree | aea173c19da6fa57e24eb4633ff815feb7ae3fa0 /modules/om/generic/omDefault.c | |
parent | c3c4ddc682950a01b80825021f3e2503ab01ea7f (diff) | |
download | xorg-lib-libX11-c6349f43193b74a3c09945f3093a871b0157ba47.tar.gz |
Merging XORG-CURRENT into trunk
Diffstat (limited to 'modules/om/generic/omDefault.c')
-rw-r--r-- | modules/om/generic/omDefault.c | 294 |
1 files changed, 168 insertions, 126 deletions
diff --git a/modules/om/generic/omDefault.c b/modules/om/generic/omDefault.c index 5d913464..a4765b53 100644 --- a/modules/om/generic/omDefault.c +++ b/modules/om/generic/omDefault.c @@ -28,6 +28,7 @@ * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ +/* $XFree86: xc/lib/X11/omDefault.c,v 1.6 2003/04/13 19:22:22 dawes Exp $ */ #include "Xlibint.h" #include "XomGeneric.h" @@ -40,55 +41,59 @@ #define FreeLocalBuf(ptr) if (ptr != local_buf) Xfree(ptr) static Bool -wcs_to_mbs(oc, to, from, length) - XOC oc; - char *to; - wchar_t *from; - int length; +wcs_to_mbs( + XOC oc, + char *to, + _Xconst wchar_t *from, + int length) { - XlcConv conv = XOC_GENERIC(oc)->wcs_to_cs; - XLCd lcd; - int ret, to_left = length; - - if (conv == NULL) { - lcd = oc->core.om->core.lcd; - conv = _XlcOpenConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte); - if (conv == NULL) - return False; - XOC_GENERIC(oc)->wcs_to_cs = conv; - } else - _XlcResetConverter(conv); + XlcConv conv; + int to_left, ret; + conv = _XomInitConverter(oc, XOMWideChar); + if (conv == NULL) + return False; + + to_left = length; + ret = _XlcConvert(conv, (XPointer *) &from, &length, (XPointer *) &to, + &to_left, NULL, 0); + if (ret != 0 || length > 0) + return False; + + return True; +} + +static Bool +utf8_to_mbs( + XOC oc, + char *to, + _Xconst char *from, + int length) +{ + XlcConv conv; + int to_left, ret; + + conv = _XomInitConverter(oc, XOMUtf8String); + if (conv == NULL) + return False; + + to_left = length; ret = _XlcConvert(conv, (XPointer *) &from, &length, (XPointer *) &to, &to_left, NULL, 0); if (ret != 0 || length > 0) return False; - + return True; } int -#if NeedFunctionPrototypes _XmbDefaultTextEscapement(XOC oc, _Xconst char *text, int length) -#else -_XmbDefaultTextEscapement(oc, text, length) - XOC oc; - char *text; - int length; -#endif { return XTextWidth(*oc->core.font_info.font_struct_list, text, length); } int -#if NeedFunctionPrototypes _XwcDefaultTextEscapement(XOC oc, _Xconst wchar_t *text, int length) -#else -_XwcDefaultTextEscapement(oc, text, length) - XOC oc; - wchar_t *text; - int length; -#endif { DefineLocalBuf; char *buf = AllocLocalBuf(length); @@ -97,8 +102,33 @@ _XwcDefaultTextEscapement(oc, text, length) if (buf == NULL) return 0; - if (wcs_to_mbs(oc, buf, text, length) == False) + if (wcs_to_mbs(oc, buf, text, length) == False) { + ret = 0; goto err; + } + + ret = _XmbDefaultTextEscapement(oc, buf, length); + +err: + FreeLocalBuf(buf); + + return ret; +} + +int +_Xutf8DefaultTextEscapement(XOC oc, _Xconst char *text, int length) +{ + DefineLocalBuf; + char *buf = AllocLocalBuf(length); + int ret; + + if (buf == NULL) + return 0; + + if (utf8_to_mbs(oc, buf, text, length) == False) { + ret = 0; + goto err; + } ret = _XmbDefaultTextEscapement(oc, buf, length); @@ -109,17 +139,8 @@ err: } int -#if NeedFunctionPrototypes _XmbDefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) -#else -_XmbDefaultTextExtents(oc, text, length, overall_ink, overall_logical) - XOC oc; - char *text; - int length; - XRectangle *overall_ink; - XRectangle *overall_logical; -#endif { int direction, logical_ascent, logical_descent; XCharStruct overall; @@ -145,17 +166,8 @@ _XmbDefaultTextExtents(oc, text, length, overall_ink, overall_logical) } int -#if NeedFunctionPrototypes _XwcDefaultTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) -#else -_XwcDefaultTextExtents(oc, text, length, overall_ink, overall_logical) - XOC oc; - wchar_t *text; - int length; - XRectangle *overall_ink; - XRectangle *overall_logical; -#endif { DefineLocalBuf; char *buf = AllocLocalBuf(length); @@ -164,8 +176,34 @@ _XwcDefaultTextExtents(oc, text, length, overall_ink, overall_logical) if (buf == NULL) return 0; - if (wcs_to_mbs(oc, buf, text, length) == False) + if (wcs_to_mbs(oc, buf, text, length) == False) { + ret = 0; + goto err; + } + + ret = _XmbDefaultTextExtents(oc, buf, length, overall_ink, overall_logical); + +err: + FreeLocalBuf(buf); + + return ret; +} + +int +_Xutf8DefaultTextExtents(XOC oc, _Xconst char *text, int length, + XRectangle *overall_ink, XRectangle *overall_logical) +{ + DefineLocalBuf; + char *buf = AllocLocalBuf(length); + int ret; + + if (buf == NULL) + return 0; + + if (utf8_to_mbs(oc, buf, text, length) == False) { + ret = 0; goto err; + } ret = _XmbDefaultTextExtents(oc, buf, length, overall_ink, overall_logical); @@ -176,25 +214,11 @@ err: } Status -#if NeedFunctionPrototypes _XmbDefaultTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) -#else -_XmbDefaultTextPerCharExtents(oc, text, length, ink_buf, logical_buf, buf_size, - num_chars, overall_ink, overall_logical) - XOC oc; - char *text; - int length; - XRectangle *ink_buf; - XRectangle *logical_buf; - int buf_size; - int *num_chars; - XRectangle *overall_ink; - XRectangle *overall_logical; -#endif { XFontStruct *font = *oc->core.font_info.font_struct_list; XCharStruct *def, *cs, overall; @@ -260,25 +284,11 @@ _XmbDefaultTextPerCharExtents(oc, text, length, ink_buf, logical_buf, buf_size, } Status -#if NeedFunctionPrototypes _XwcDefaultTextPerCharExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) -#else -_XwcDefaultTextPerCharExtents(oc, text, length, ink_buf, logical_buf, buf_size, - num_chars, overall_ink, overall_logical) - XOC oc; - wchar_t *text; - int length; - XRectangle *ink_buf; - XRectangle *logical_buf; - int buf_size; - int *num_chars; - XRectangle *overall_ink; - XRectangle *overall_logical; -#endif { DefineLocalBuf; char *buf = AllocLocalBuf(length); @@ -287,8 +297,39 @@ _XwcDefaultTextPerCharExtents(oc, text, length, ink_buf, logical_buf, buf_size, if (buf == NULL) return 0; - if (wcs_to_mbs(oc, buf, text, length) == False) + if (wcs_to_mbs(oc, buf, text, length) == False) { + ret = 0; goto err; + } + + ret = _XmbDefaultTextPerCharExtents(oc, buf, length, ink_buf, logical_buf, + buf_size, num_chars, overall_ink, + overall_logical); + +err: + FreeLocalBuf(buf); + + return ret; +} + +Status +_Xutf8DefaultTextPerCharExtents(XOC oc, _Xconst char *text, int length, + XRectangle *ink_buf, XRectangle *logical_buf, + int buf_size, int *num_chars, + XRectangle *overall_ink, + XRectangle *overall_logical) +{ + DefineLocalBuf; + char *buf = AllocLocalBuf(length); + Status ret; + + if (buf == NULL) + return 0; + + if (utf8_to_mbs(oc, buf, text, length) == False) { + ret = 0; + goto err; + } ret = _XmbDefaultTextPerCharExtents(oc, buf, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, @@ -301,19 +342,8 @@ err: } int -#if NeedFunctionPrototypes _XmbDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) -#else -_XmbDefaultDrawString(dpy, d, oc, gc, x, y, text, length) - Display *dpy; - Drawable d; - XOC oc; - GC gc; - int x, y; - char *text; - int length; -#endif { XFontStruct *font = *oc->core.font_info.font_struct_list; @@ -324,19 +354,8 @@ _XmbDefaultDrawString(dpy, d, oc, gc, x, y, text, length) } int -#if NeedFunctionPrototypes _XwcDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) -#else -_XwcDefaultDrawString(dpy, d, oc, gc, x, y, text, length) - Display *dpy; - Drawable d; - XOC oc; - GC gc; - int x, y; - wchar_t *text; - int length; -#endif { DefineLocalBuf; char *buf = AllocLocalBuf(length); @@ -345,8 +364,34 @@ _XwcDefaultDrawString(dpy, d, oc, gc, x, y, text, length) if (buf == NULL) return 0; - if (wcs_to_mbs(oc, buf, text, length) == False) + if (wcs_to_mbs(oc, buf, text, length) == False) { + ret = 0; goto err; + } + + ret = _XmbDefaultDrawString(dpy, d, oc, gc, x, y, buf, length); + +err: + FreeLocalBuf(buf); + + return ret; +} + +int +_Xutf8DefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, + _Xconst char *text, int length) +{ + DefineLocalBuf; + char *buf = AllocLocalBuf(length); + int ret; + + if (buf == NULL) + return 0; + + if (utf8_to_mbs(oc, buf, text, length) == False) { + ret = 0; + goto err; + } ret = _XmbDefaultDrawString(dpy, d, oc, gc, x, y, buf, length); @@ -357,38 +402,16 @@ err: } void -#if NeedFunctionPrototypes _XmbDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) -#else -_XmbDefaultDrawImageString(dpy, d, oc, gc, x, y, text, length) - Display *dpy; - Drawable d; - XOC oc; - GC gc; - int x, y; - char *text; - int length; -#endif { XSetFont(dpy, gc, (*oc->core.font_info.font_struct_list)->fid); XDrawImageString(dpy, d, gc, x, y, text, length); } void -#if NeedFunctionPrototypes _XwcDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) -#else -_XwcDefaultDrawImageString(dpy, d, oc, gc, x, y, text, length) - Display *dpy; - Drawable d; - XOC oc; - GC gc; - int x, y; - wchar_t *text; - int length; -#endif { DefineLocalBuf; char *buf = AllocLocalBuf(length); @@ -404,3 +427,22 @@ _XwcDefaultDrawImageString(dpy, d, oc, gc, x, y, text, length) err: FreeLocalBuf(buf); } + +void +_Xutf8DefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, + int y, _Xconst char *text, int length) +{ + DefineLocalBuf; + char *buf = AllocLocalBuf(length); + + if (buf == NULL) + return; + + if (utf8_to_mbs(oc, buf, text, length) == False) + goto err; + + _XmbDefaultDrawImageString(dpy, d, oc, gc, x, y, buf, length); + +err: + FreeLocalBuf(buf); +} |