libbluray | branch: master | hpi1 <[email protected]> | Sun Jul 28 23:01:42 2013 +0300| [d462eb7db3cc49fc9a2ed149ebe36b75d9c0a08b] | committer: hpi1
Lock frame buffer updates while drawing. Fixes tearing issues. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=d462eb7db3cc49fc9a2ed149ebe36b75d9c0a08b --- .../bdj/java/java/awt/BDWindowGraphics.java | 105 +++++++++++++------- 1 file changed, 69 insertions(+), 36 deletions(-) diff --git a/src/libbluray/bdj/java/java/awt/BDWindowGraphics.java b/src/libbluray/bdj/java/java/awt/BDWindowGraphics.java index 1efc50b..4faaf4d 100644 --- a/src/libbluray/bdj/java/java/awt/BDWindowGraphics.java +++ b/src/libbluray/bdj/java/java/awt/BDWindowGraphics.java @@ -39,78 +39,108 @@ public class BDWindowGraphics extends BDGraphics { } public void clearRect(int x, int y, int w, int h) { - super.clearRect(x, y, w, h); - window.notifyChanged(); + synchronized (window) { + super.clearRect(x, y, w, h); + window.notifyChanged(); + } } public void fillRect(int x, int y, int w, int h) { - super.fillRect(x, y, w, h); - window.notifyChanged(); + synchronized (window) { + super.fillRect(x, y, w, h); + window.notifyChanged(); + } } public void drawRect(int x, int y, int w, int h) { - super.drawRect(x, y, w, h); - window.notifyChanged(); + synchronized (window) { + super.drawRect(x, y, w, h); + window.notifyChanged(); + } } public void drawLine(int x1, int y1, int x2, int y2) { - super.drawLine(x1, y1, x2, y2); - window.notifyChanged(); + synchronized (window) { + super.drawLine(x1, y1, x2, y2); + window.notifyChanged(); + } } public void copyArea(int x, int y, int w, int h, int dx, int dy) { - super.copyArea(x, y, w, h, dx, dy); - window.notifyChanged(); + synchronized (window) { + super.copyArea(x, y, w, h, dx, dy); + window.notifyChanged(); + } } public void drawPolyline(int xPoints[], int yPoints[], int nPoints) { - super.drawPolyline(xPoints, yPoints, nPoints); - window.notifyChanged(); + synchronized (window) { + super.drawPolyline(xPoints, yPoints, nPoints); + window.notifyChanged(); + } } public void drawPolygon(int xPoints[], int yPoints[], int nPoints) { - super.drawPolygon(xPoints, yPoints, nPoints); - window.notifyChanged(); + synchronized (window) { + super.drawPolygon(xPoints, yPoints, nPoints); + window.notifyChanged(); + } } public void fillPolygon(int xPoints[], int yPoints[], int nPoints) { - super.fillPolygon(xPoints, yPoints, nPoints); - window.notifyChanged(); + synchronized (window) { + super.fillPolygon(xPoints, yPoints, nPoints); + window.notifyChanged(); + } } public void drawOval(int x, int y, int w, int h) { - super.drawOval(x, y, w, h); - window.notifyChanged(); + synchronized (window) { + super.drawOval(x, y, w, h); + window.notifyChanged(); + } } public void fillOval(int x, int y, int w, int h) { - super.fillOval(x, y, w, h); - window.notifyChanged(); + synchronized (window) { + super.fillOval(x, y, w, h); + window.notifyChanged(); + } } public void drawArc(int x, int y, int w, int h, int startAngle, int endAngle) { - super.drawArc(x, y, w, h, startAngle, endAngle); - window.notifyChanged(); + synchronized (window) { + super.drawArc(x, y, w, h, startAngle, endAngle); + window.notifyChanged(); + } } public void fillArc(int x, int y, int w, int h, int startAngle, int endAngle) { - super.fillArc(x, y, w, h, startAngle, endAngle); - window.notifyChanged(); + synchronized (window) { + super.fillArc(x, y, w, h, startAngle, endAngle); + window.notifyChanged(); + } } public void drawRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) { - super.drawRoundRect(x, y, w, h, arcWidth, arcHeight); - window.notifyChanged(); + synchronized (window) { + super.drawRoundRect(x, y, w, h, arcWidth, arcHeight); + window.notifyChanged(); + } } public void fillRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) { - super.fillRoundRect(x, y, w, h, arcWidth, arcHeight); - window.notifyChanged(); + synchronized (window) { + super.fillRoundRect(x, y, w, h, arcWidth, arcHeight); + window.notifyChanged(); + } } public void drawStringN(long ftFace, String string, int x, int y, int rgb) { - super.drawStringN(ftFace, string, x, y, rgb); - window.notifyChanged(); + synchronized (window) { + super.drawStringN(ftFace, string, x, y, rgb); + window.notifyChanged(); + } } public void dispose() { @@ -122,12 +152,15 @@ public class BDWindowGraphics extends BDGraphics { int dx, int dy, int dw, int dh, int sx, int sy, int sw, int sh, Color bg, ImageObserver observer) { - boolean complete = super.drawImageN( - img, dx, dy, dw, dh, sx, sy, sw, sh, - bg, observer); - if (complete) { - window.notifyChanged(); + + synchronized (window) { + boolean complete = super.drawImageN( + img, dx, dy, dw, dh, sx, sy, sw, sh, + bg, observer); + if (complete) { + window.notifyChanged(); + } + return complete; } - return complete; } } _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
