X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fplat%2FX11.java;h=a7709945bb635a1a2211132a2ef609a08f626004;hb=d602d58d0fa307be96122e2fe4e0606015bd5d00;hp=5f579e458bce9d1601cdf738f5f33446ad541a92;hpb=42da60bd167403eccc3466575772819007388cfd;p=org.ibex.core.git diff --git a/src/org/xwt/plat/X11.java b/src/org/xwt/plat/X11.java index 5f579e4..a770994 100644 --- a/src/org/xwt/plat/X11.java +++ b/src/org/xwt/plat/X11.java @@ -1,4 +1,4 @@ -// Copyright 2003 Adam Megacz, see the COPYING file for licensing [LGPL] +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [LGPL] package org.xwt.plat; import gnu.gcj.RawData; @@ -33,7 +33,7 @@ public class X11 extends POSIX { protected String _getAltKeyName() { return System.getProperty("os.name", "").indexOf("SunOS") != -1 ? "Meta" : "Alt"; } - protected Picture _createPicture(int[] data, int w, int h) { return new X11Picture(data, w, h); } + protected Picture _createPicture() { return new X11Picture(); } protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return new X11PixelBuffer(w, h); } protected Surface _createSurface(Box b, boolean framed) { return new X11Surface(b, framed); } protected boolean _needsAutoClick() { return true; } @@ -46,7 +46,7 @@ public class X11 extends POSIX { private native void natInit(); public X11() { } - public void init() { + public void postInit() { natInit(); (new Thread() { public void run() { eventThread(); } }).start(); } @@ -62,11 +62,11 @@ public class X11 extends POSIX { Semaphore waitForCreation = new Semaphore(); public native void setInvisible(boolean i); - public void _setMaximized(boolean m) { if (Log.on) Log.log(this, "X11 can't maximize windows"); } + public void _setMaximized(boolean m) { if (Log.on) Log.warn(this, "X11 can't maximize windows"); } public native void setIcon(Picture p); public native void _setMinimized(boolean b); public native void setTitleBarText(String s); - public native void setSize(int w, int h); + public native void _setSize(int w, int h); public native void setLocation(); public native void natInit(); public native void toFront(); @@ -105,14 +105,14 @@ public class X11 extends POSIX { public int getWidth() { return width; } public int getHeight() { return height; } - public X11Picture(int[] data, int w, int h) { - this.data = data; - this.width = w; - this.height = h; + boolean initialized = false; + public void init() { + if (initialized) return; + initialized = true; boolean needsStipple = false; // if we have any non-0x00, non-0xFF alphas, we can't double buffer ourselves - for(int i=0; i= cx2 || cy1 >= cy2) return; + slowDrawPicture(((Platform.DefaultGlyph)source).getPicture(), dx, dy, cx1, cy1, cx2, cy2, rgb, true); } - - public void drawPicture(Picture source, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2) { - if (!(dx2 - dx1 != sx2 - sx1 || dy2 - dy1 != sy2 - sy1) && ((X11Picture)source).doublebuf != null) - fastDrawPicture(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2); + public void drawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2) { + cx1 = Math.max(dx, cx1); + cy1 = Math.max(dy, cy1); + cx2 = Math.min(dx + source.width, cx2); + cy2 = Math.min(dy + source.height, cy2); + if (cx1 >= cx2 || cy1 >= cy2) return; + ((X11Picture)source).init(); + if (((X11Picture)source).doublebuf != null) + fastDrawPicture(source, dx, dy, cx1, cy1, cx2, cy2); else - slowDrawPicture(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2); + slowDrawPicture(source, dx, dy, cx1, cy1, cx2, cy2, 0, false); } /** fast path for image drawing (no scaling, all-or-nothing alpha) */ - public native void fastDrawPicture(Picture source, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2); + public native void fastDrawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2); /** slow path for image drawing */ - public native void slowDrawPicture(Picture source, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2); + public native void slowDrawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int rgb, boolean alphaOnly); public int getWidth() { return width; } public int getHeight() { return height; } @@ -199,6 +201,19 @@ public class X11 extends POSIX { public native void fillRect(int x, int y, int x2, int y2, int color); public native void finalize(); + // 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 _x2) { int _x0 = _x1; _x1 = _x2; _x2 = _x0; } + fillRect(_x1, _y1, _x2, _y2, argb); + } + } } }