- }
-
-
- // Font Handling ////////////////////////////////////////////////////////////////////
-
- static String[] fontList = null;
-
- /** hashtable of all built in X11 fonts; key is XWT font spec, value is X11 font string */
- static Hashtable nativeFontList = new Hashtable();
-
- /** cache of all already-looked-up X11 fonts; key is XWT font name, value is a WrappedRawData */
- static Hashtable xwtFontToFontStruct = new Hashtable();
-
- /** dumps a list of X11 font strings */
- private native String[] listNativeFonts();
-
- /** load native font list */
- public void initFonts() {
- // use the font list to build nativeFontList
- String[] fonts = listNativeFonts();
-
- Vector v = new Vector();
- for(int k=0; k<fonts.length; k++) {
-
- String s = fonts[k].toLowerCase();
- String s2 = s;
- try {
- v.setSize(0);
- s = s.substring(s.indexOf('-') + 1);
- while (s.indexOf('-') != -1) {
- v.addElement(s.substring(0, s.indexOf('-')));
- s = s.substring(s.indexOf('-') + 1);
- }
- v.addElement(s);
- String[] font = new String[v.size()];
- v.copyInto(font);
-
- // limit to iso8559 until we can do I18N properly....
- if (font.length > 12) {
- if (!font[12].equals("iso8859") && !font[12].equals("")) continue;
- if (font.length < 14 || !font[13].equals("1")) continue;
- }
-
- String name = font[1];
- String size = font[6];
- String slant = (font[3].equals("i") || font[3].equals("o")) ? "i" : "";
- String bold = font[2].equals("bold") ? "b" : "";
- String tail = s2.substring(1 + font[0].length() + 1 + font[1].length() + 1 + font[2].length() + 1 +
- font[3].length() + 1 + font[4].length() + 1);
-
- if (bold.equals("*") && slant.equals("*")) {
- nativeFontList.put(name + size, font[0] + "-" + font[1] + "-regular-r-" + font[4] + "-" + tail);
- nativeFontList.put(name + size + "b", font[0] + "-" + font[1] + "-bold-r-" + font[4] + "-" + tail);
- nativeFontList.put(name + size + "i", font[0] + "-" + font[1] + "-regular-i-" + font[4] + "-" + tail);
- nativeFontList.put(name + size + "bi", font[0] + "-" + font[1] + "-bold-i-" + font[4] + "-" + tail);
-
- } else if (bold.equals("*")) {
- nativeFontList.put(name + size + slant, font[0] + "-" + font[1] + "-regular-" + font[3] + "-" + font[4] + "-" + tail);
- nativeFontList.put(name + size + "b" + slant, font[0] + "-" + font[1] + "-bold-" + font[3] + "-" + font[4] + "-" + tail);
-
- } else if (slant.equals("*")) {
- nativeFontList.put(name + size + bold, font[0] + "-" + font[1] + "-" + font[2] + "-r-" + font[4] + "-" + tail);
- nativeFontList.put(name + size + bold + "i", font[0] + "-" + font[1] + "-" + font[2] + "-i-" + font[4] + "-" + tail);
-
- } else {
- nativeFontList.put(name + size + bold + slant, s2);
-
- }
- } catch (ArrayIndexOutOfBoundsException e) {
- if (Log.on) Log.log(this, "skipping incomplete font string " + s2);
- continue;
+ // FIXME: try to use os acceleration
+ public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int argb) {
+ if (x1 == x3 && x2 == x4) {
+ fillRect(x1, y1, x4, y2, argb);
+ } else for(int y=y1; y<y2; y++) {
+ int _x1 = (int)Math.floor((y - y1) * (x3 - x1) / (y2 - y1) + x1);
+ int _y1 = (int)Math.floor(y);
+ int _x2 = (int)Math.ceil((y - y1) * (x4 - x2) / (y2 - y1) + x2);
+ int _y2 = (int)Math.floor(y) + 1;
+ if (_x1 > _x2) { int _x0 = _x1; _x1 = _x2; _x2 = _x0; }
+ fillRect(_x1, _y1, _x2, _y2, argb);