Commit 3b228805 by Scott Gilbertson Committed by Tom Tromey

natFont.cc (getStringWidth): Support 16-bit characters.

2003-04-19  Scott Gilbertson  <scottg@mantatest.com>

	* libjava/gnu/gcj/xlib/natFont.cc (getStringWidth): Support 16-bit
	characters.
	* libjava/gnu/gcj/xlib/natGC.cc (drawString): Support 16-bit
	characters.

From-SVN: r65820
parent 6f572ac2
2003-04-19 Scott Gilbertson <scottg@mantatest.com>
* libjava/gnu/gcj/xlib/natFont.cc (getStringWidth): Support 16-bit
characters.
* libjava/gnu/gcj/xlib/natGC.cc (drawString): Support 16-bit
characters.
2003-04-16 Richard Earnshaw <rearnsha@arm.com> 2003-04-16 Richard Earnshaw <rearnsha@arm.com>
* java/lang/ieeefp.h: Handle ARM platforms that have pure-endian * java/lang/ieeefp.h: Handle ARM platforms that have pure-endian
......
/* Copyright (C) 2000 Free Software Foundation /* Copyright (C) 2000, 2003 Free Software Foundation
This file is part of libgcj. This file is part of libgcj.
...@@ -69,13 +69,21 @@ jint gnu::gcj::xlib::Font::getStringWidth(java::lang::String* text) ...@@ -69,13 +69,21 @@ jint gnu::gcj::xlib::Font::getStringWidth(java::lang::String* text)
{ {
XFontStruct* fontStruct = (XFontStruct*) structure; XFontStruct* fontStruct = (XFontStruct*) structure;
// FIXME: make proper unicode conversion // FIXME: Convert to the character set used in the font, which may
int len = JvGetStringUTFLength(text); // or may not be unicode. For now, treat everything as 16-bit and
char ctxt[len+1]; // use character codes directly, which should be OK for unicode or
JvGetStringUTFRegion(text, 0, text->length(), ctxt); // 8-bit ascii fonts.
ctxt[len] = '\0'; jint length = text->length();
int width = XTextWidth(fontStruct, ctxt, len); jchar* txt = JvGetStringChars(text);
return width; XChar2b xwchars[length];
for (int i=0; i<length; i++)
{
XChar2b* xc = &(xwchars[i]);
jchar jc = txt[i];
xc->byte1 = (jc >> 8) & 0xff;
xc->byte2 = jc & 0xff;
}
return XTextWidth16(fontStruct, xwchars, length);
} }
void gnu::gcj::xlib::Font::finalize() void gnu::gcj::xlib::Font::finalize()
......
...@@ -95,27 +95,25 @@ void gnu::gcj::xlib::GC::drawString(jstring text, jint x, jint y) ...@@ -95,27 +95,25 @@ void gnu::gcj::xlib::GC::drawString(jstring text, jint x, jint y)
::Drawable drawableXID = target->getXID(); ::Drawable drawableXID = target->getXID();
::GC gc = (::GC) structure; ::GC gc = (::GC) structure;
/* jint length = text->length();
FIXME: do something along the lines of the following instead: jchar* txt = JvGetStringChars(text);
jint length = text->length(); XChar2b xwchars[length];
jchar* txt = JvGetStringChars(text);
XChar2b xwchars[length];
// FIXME: Add convertion and caching // FIXME: Convert to the character set used in the font, which may
// or may not be unicode. For now, treat everything as 16-bit and
for (int i=0; i<length; i++) // use character codes directly, which should be OK for unicode or
{ // 8-bit ascii fonts.
XChar2b* xc = &(xwchars[i]);
jchar jc = txt[i]; for (int i=0; i<length; i++)
xc->byte1 = jc & 0xff; {
xc->byte2 = jc >> 8; XChar2b* xc = &(xwchars[i]);
} jchar jc = txt[i];
xc->byte1 = (jc >> 8) & 0xff;
XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length); xc->byte2 = jc & 0xff;
*/ }
XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);
// FIXME, temporary code: // FIXME, temporary code:
int len = JvGetStringUTFLength(text); int len = JvGetStringUTFLength(text);
char ctxt[len+1]; char ctxt[len+1];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment