X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FSurface.java;h=b42ee0c29445f8d13f55ea981094713132458f42;hb=8ca06b850fb51673a7cfe751643ea45ec528070d;hp=089480e79ae34ec83797e7d4bb4346c15f4023d7;hpb=8235361e8601ae7b36ab707058de3b52225d15a2;p=org.ibex.core.git diff --git a/src/org/xwt/Surface.java b/src/org/xwt/Surface.java index 089480e..b42ee0c 100644 --- a/src/org/xwt/Surface.java +++ b/src/org/xwt/Surface.java @@ -284,6 +284,8 @@ public abstract class Surface extends PixelBuffer { Refresh(); } + private static VectorGraphics.Affine identity = VectorGraphics.Affine.identity(); + /** runs the prerender() and render() pipelines in the root Box to regenerate the backbuffer, then blits it to the screen */ public synchronized void render() { @@ -309,7 +311,7 @@ public abstract class Surface extends PixelBuffer { if (y+h > root.height) h = root.height - y; if (w <= 0 || h <= 0) continue; - root.render(0, 0, x, y, w, h, this); + root.render(0, 0, x, y, w, h, this, identity); if (abort) { @@ -326,7 +328,6 @@ public abstract class Surface extends PixelBuffer { return; } } - } // FEATURE: reinstate recycler @@ -361,12 +362,23 @@ public abstract class Surface extends PixelBuffer { screenDirtyRegions.dirty(dx1, dy1, dx2 - dx1, dy2 - dy1); backbuffer.drawPicture(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2); } - public void fillRect(int x1, int y1, int x2, int y2, int color) { - screenDirtyRegions.dirty(x1, y1, x2 - x1, y2 - y1); - backbuffer.fillRect(x1, y1, x2, y2, color); } + public void drawPictureAlphaOnly(Picture source, + int dx1, int dy1, int dx2, int dy2, + int sx1, int sy1, int sx2, int sy2, + int argb) { + screenDirtyRegions.dirty(dx1, dy1, dx2 - dx1, dy2 - dy1); + backbuffer.drawPictureAlphaOnly(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, argb); } + + public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int color) { + screenDirtyRegions.dirty(Math.min(x1, x3), y1, Math.max(x2, x4) - Math.min(x1, x3), y2 - y1); + backbuffer.fillTrapezoid(x1, x2, y1, x3, x4, y2, color); } public void render() { super.render(); + render_(); + } + + public void render_() { int[][] dirt = screenDirtyRegions.flush(); for(int i = 0; dirt != null && i < dirt.length; i++) { if (dirt[i] == null) continue;