OSDN Git Service

2003-04-19 Scott Gilbertson <scottg@mantatest.com>
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Apr 2003 17:52:15 +0000 (17:52 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Apr 2003 17:52:15 +0000 (17:52 +0000)
* libjava/gnu/gcj/xlib/natFont.cc (getStringWidth): Support 16-bit
characters.
* libjava/gnu/gcj/xlib/natGC.cc (drawString): Support 16-bit
characters.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65820 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/gnu/gcj/xlib/natFont.cc
libjava/gnu/gcj/xlib/natGC.cc

index 350bef9..d91604b 100644 (file)
@@ -1,3 +1,10 @@
+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>
 
        * java/lang/ieeefp.h: Handle ARM platforms that have pure-endian
index 7bfea7b..0f8f43d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000  Free Software Foundation
+/* Copyright (C) 2000, 2003  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -69,13 +69,21 @@ jint gnu::gcj::xlib::Font::getStringWidth(java::lang::String* text)
 {
   XFontStruct* fontStruct = (XFontStruct*) structure;
   
-  // FIXME: make proper unicode conversion
-  int len = JvGetStringUTFLength(text);
-  char ctxt[len+1];
-  JvGetStringUTFRegion(text, 0, text->length(), ctxt);
-  ctxt[len] = '\0';
-  int width = XTextWidth(fontStruct, ctxt, len);
-  return width;
+  // 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
+  // use character codes directly, which should be OK for unicode or
+  // 8-bit ascii fonts.
+  jint length = text->length();
+  jchar* txt = JvGetStringChars(text);
+  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()
index 1a1bd58..11f4b28 100644 (file)
@@ -95,27 +95,25 @@ void gnu::gcj::xlib::GC::drawString(jstring text, jint x, jint y)
   ::Drawable drawableXID = target->getXID();
   ::GC gc = (::GC) structure;
   
-  /*
-    FIXME: do something along the lines of the following instead:
+  jint length = text->length();
+  jchar* txt = JvGetStringChars(text);
 
-    jint length = text->length();
-    jchar* txt = JvGetStringChars(text);
-
-    XChar2b xwchars[length];
+  XChar2b xwchars[length];
     
-    // FIXME: Add convertion and caching
-
-    for (int i=0; i<length; i++)
-      {
-       XChar2b* xc = &(xwchars[i]);
-       jchar jc = txt[i];
-       xc->byte1 = jc & 0xff;
-       xc->byte2 = jc >> 8;
-      }
-
-     XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);
-    */
-  
+  // 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
+  // use character codes directly, which should be OK for unicode or
+  // 8-bit ascii fonts.
+
+  for (int i=0; i<length; i++)
+    {
+      XChar2b* xc = &(xwchars[i]);
+      jchar jc = txt[i];
+      xc->byte1 = (jc >> 8) & 0xff;
+      xc->byte2 = jc & 0xff;
+    }
+  XDrawString16(dpy, drawableXID, gc, x, y, xwchars, length);
+
   // FIXME, temporary code:
   int len = JvGetStringUTFLength(text);
   char ctxt[len+1];