summaryrefslogtreecommitdiff
path: root/modules/om/generic/omDefault.c
diff options
context:
space:
mode:
authorEgbert Eich <eich@freedesktop.org>2004-04-23 18:42:09 +0000
committerEgbert Eich <eich@freedesktop.org>2004-04-23 18:42:09 +0000
commitc6349f43193b74a3c09945f3093a871b0157ba47 (patch)
treeaea173c19da6fa57e24eb4633ff815feb7ae3fa0 /modules/om/generic/omDefault.c
parentc3c4ddc682950a01b80825021f3e2503ab01ea7f (diff)
downloadxorg-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.c294
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);
+}