[libbluray-devel] Implement Area class for dirty area

hpi1 git at videolan.org
Tue Apr 30 13:17:55 CEST 2013


libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Tue Apr 30 12:39:27 2013 +0300| [78f5d6a82f9d279206a77e758ef24161d6c0ea2a] | committer: hpi1

Implement Area class for dirty area
(hide differences between J2ME and J2SE Rectangle implementations)

> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=78f5d6a82f9d279206a77e758ef24161d6c0ea2a
---

 .../bdj/java-j2me/java/awt/BDGraphics.java         |    6 +-
 .../bdj/java-j2se/java/awt/BDGraphics.java         |    6 +-
 src/libbluray/bdj/java/java/awt/Area.java          |   73 ++++++++++++++++++++
 src/libbluray/bdj/java/java/awt/BDImageBase.java   |    6 +-
 src/libbluray/bdj/java/java/awt/BDRootWindow.java  |   15 ++--
 5 files changed, 90 insertions(+), 16 deletions(-)

diff --git a/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java b/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java
index c55af5d..169474f 100644
--- a/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java
+++ b/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java
@@ -40,7 +40,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
     private int width;
     private int height;
     private int[] backBuffer;
-    private Rectangle dirty;
+    private Area dirty;
     private GraphicsConfiguration gc;
     private Color foreground;
     private Color background;
@@ -90,7 +90,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
         width = window.getWidth();
         height = window.getHeight();
         backBuffer = window.getBdBackBuffer();
-        dirty = window.getDirtyRect();
+        dirty = window.getDirtyArea();
         gc = window.getGraphicsConfiguration();
         foreground = window.getForeground();
         background = window.getBackground();
@@ -110,7 +110,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
         width = image.getWidth();
         height = image.getHeight();
         backBuffer = image.getBdBackBuffer();
-        dirty = image.getDirtyRect();
+        dirty = image.getDirtyArea();
         gc = image.getGraphicsConfiguration();
         Component component = image.getComponent();
         if (component != null) {
diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java
index 4fb9005..4c61d68 100644
--- a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java
+++ b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java
@@ -44,7 +44,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
     private int width;
     private int height;
     private int[] backBuffer;
-    private Rectangle dirty;
+    private Area dirty;
     private GraphicsConfiguration gc;
     private Color foreground;
     private Color background;
@@ -97,7 +97,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
         width = window.getWidth();
         height = window.getHeight();
         backBuffer = window.getBdBackBuffer();
-        dirty = window.getDirtyRect();
+        dirty = window.getDirtyArea();
         gc = window.getGraphicsConfiguration();
         foreground = window.getForeground();
         background = window.getBackground();
@@ -124,7 +124,7 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics {
         width = image.getWidth();
         height = image.getHeight();
         backBuffer = image.getBdBackBuffer();
-        dirty = image.getDirtyRect();
+        dirty = image.getDirtyArea();
 
         gc = image.getGraphicsConfiguration();
         Component component = image.getComponent();
diff --git a/src/libbluray/bdj/java/java/awt/Area.java b/src/libbluray/bdj/java/java/awt/Area.java
new file mode 100644
index 0000000..8c3561b
--- /dev/null
+++ b/src/libbluray/bdj/java/java/awt/Area.java
@@ -0,0 +1,73 @@
+ /*
+ * This file is part of libbluray
+ * Copyright (C) 2013  Petri Hintukainen <phintuka at users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+package java.awt;
+
+class Area {
+    public int x0;
+    public int y0;
+    public int x1;
+    public int y1;
+
+    public Area() {
+        clear();
+    }
+
+    public Area(int width, int height) {
+        this(0, 0, width - 1, height - 1);
+    }
+
+    public Area(int x0, int y0, int x1, int y1) {
+        this.x0 = x0;
+        this.y0 = y0;
+        this.x1 = x1;
+        this.y1 = y1;
+    }
+
+    public void clear() {
+        x0 = Integer.MAX_VALUE;
+        y0 = Integer.MAX_VALUE;
+        x1 = -1;
+        y1 = -1;
+    }
+
+    public void add(int newx, int newy) {
+        x0 = Math.min(x0, newx);
+        x1 = Math.max(x1, newx);
+        y0 = Math.min(y0, newy);
+        y1 = Math.max(y1, newy);
+    }
+
+    public void add(Rectangle r) {
+        if ((r.x | r.width | r.y | r.height) >= 0) {
+            x0 = Math.min(x0, r.x);
+            x1 = Math.max(x1, r.x + r.width - 1);
+            y0 = Math.min(y0, r.y);
+            y1 = Math.max(y1, r.y + r.height - 1);
+        }
+    }
+
+    public boolean isEmpty() {
+        return (x1 < x0) || (y1 < y0);
+    }
+
+    public Area getBounds() {
+        return new Area(x0, y0, x1, y1);
+    }
+}
diff --git a/src/libbluray/bdj/java/java/awt/BDImageBase.java b/src/libbluray/bdj/java/java/awt/BDImageBase.java
index 15ff1e0..95c5de4 100644
--- a/src/libbluray/bdj/java/java/awt/BDImageBase.java
+++ b/src/libbluray/bdj/java/java/awt/BDImageBase.java
@@ -39,7 +39,7 @@ class BDImageBase extends Image {
     private Component component;
     protected int width, height;
     protected int[] backBuffer;
-    protected Rectangle dirty;
+    protected Area dirty;
     private GraphicsConfiguration gc;
     private Vector observers = new Vector();
 
@@ -77,7 +77,7 @@ class BDImageBase extends Image {
         if (width > 0 && height > 0)
             backBuffer = new int[width * height];
 
-        dirty = new Rectangle(width, height);
+        dirty = new Area(width, height);
     }
 
     public void flush() {
@@ -148,7 +148,7 @@ class BDImageBase extends Image {
         return backBuffer;
     }
 
-    public Rectangle getDirtyRect() {
+    public Area getDirtyArea() {
         return dirty;
     }
 
diff --git a/src/libbluray/bdj/java/java/awt/BDRootWindow.java b/src/libbluray/bdj/java/java/awt/BDRootWindow.java
index 7ac35b9..c30a305 100644
--- a/src/libbluray/bdj/java/java/awt/BDRootWindow.java
+++ b/src/libbluray/bdj/java/java/awt/BDRootWindow.java
@@ -34,7 +34,7 @@ public class BDRootWindow extends Frame {
         BDToolkit.setFocusedWindow(this);
     }
 
-    public Rectangle getDirtyRect() {
+    public Area getDirtyArea() {
         return dirty;
     }
 
@@ -50,7 +50,7 @@ public class BDRootWindow extends Frame {
 
             Libbluray.updateGraphic(width, height, null);
 
-            dirty.setBounds(0, 0, width - 1, height - 1);
+            dirty.add(new Rectangle(0, 0, width - 1, height - 1));
         }
     }
 
@@ -86,11 +86,12 @@ public class BDRootWindow extends Frame {
             }
             changeCount = 0;
 
-            if ((dirty.width | dirty.height) >= 0) {
-                Libbluray.updateGraphic(getWidth(), getHeight(), backBuffer, dirty.x, dirty.y,
-                                        dirty.x + dirty.width - 1, dirty.y + dirty.height - 1);
+            Area a = dirty.getBounds();
+            dirty.clear();
+
+            if (!a.isEmpty()) {
+                Libbluray.updateGraphic(getWidth(), getHeight(), backBuffer, a.x0, a.y0, a.x1, a.y1);
             }
-            dirty.setSize(-1, -1);
         }
     }
 
@@ -133,7 +134,7 @@ public class BDRootWindow extends Frame {
     }
 
     private int[] backBuffer = null;
-    private Rectangle dirty = new Rectangle();
+    private Area dirty = new Area();
     private int changeCount = 0;
     private Timer timer = new Timer();
     private TimerTask timerTask = null;



More information about the libbluray-devel mailing list