[packages/libbluray] - updated to 0.4.0 - removed obsolete missing patch

qboosh qboosh at pld-linux.org
Tue Oct 15 18:15:29 CEST 2013


commit 70fa2b1a399e25dfa1d3e7d8de44bdc19ab7dfeb
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Tue Oct 15 18:14:43 2013 +0200

    - updated to 0.4.0
    - removed obsolete missing patch

 libbluray-missing.patch | 4467 -----------------------------------------------
 libbluray.spec          |    6 +-
 2 files changed, 2 insertions(+), 4471 deletions(-)
---
diff --git a/libbluray.spec b/libbluray.spec
index ee2578e..9efa7ae 100644
--- a/libbluray.spec
+++ b/libbluray.spec
@@ -6,13 +6,12 @@
 Summary:	Library to access Blu-Ray disks for video playback
 Summary(pl.UTF-8):	Biblioteka dostępu do dysków Blu-Ray w celu odtwarzania filmów
 Name:		libbluray
-Version:	0.3.0
+Version:	0.4.0
 Release:	1
 License:	LGPL v2+
 Group:		Libraries
 Source0:	ftp://ftp.videolan.org/pub/videolan/libbluray/last/%{name}-%{version}.tar.bz2
-# Source0-md5:	d04a2af21fa154237ea2c693cf05e0ac
-Patch0:		%{name}-missing.patch
+# Source0-md5:	c7a1cc71cb9747f93122ec650d4ae933
 URL:		http://www.videolan.org/developers/libbluray.html
 BuildRequires:	autoconf >= 2.50
 BuildRequires:	automake
@@ -85,7 +84,6 @@ Klasy obsługujące BD-Java dla libbluray.
 
 %prep
 %setup -q
-%patch0 -p1
 
 %build
 %{__libtoolize}
diff --git a/libbluray-missing.patch b/libbluray-missing.patch
deleted file mode 100644
index 4ed05ca..0000000
--- a/libbluray-missing.patch
+++ /dev/null
@@ -1,4467 +0,0 @@
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDGraphicsConfiguration.java libbluray/src/libbluray/bdj/java-j2me/java/awt/BDGraphicsConfiguration.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDGraphicsConfiguration.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/java/awt/BDGraphicsConfiguration.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,63 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  Libbluray
-+ *
-+ * 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;
-+
-+import java.awt.color.ColorSpace;
-+import java.awt.image.BufferedImage;
-+import java.awt.image.ColorModel;
-+import java.awt.image.DataBuffer;
-+import java.awt.image.DirectColorModel;
-+import java.awt.image.VolatileImage;
-+
-+class BDGraphicsConfiguration extends GraphicsConfiguration {
-+    private BDGraphicsDevice device;
-+
-+    BDGraphicsConfiguration(BDGraphicsDevice device) {
-+        this.device = device;
-+    }
-+
-+    public GraphicsDevice getDevice() {
-+        return device;
-+    }
-+
-+    public Rectangle getBounds() {
-+        return device.getBounds();
-+    }
-+
-+    int getCompatibleImageType() {
-+        return BufferedImage.TYPE_INT_ARGB;
-+    }
-+
-+    public synchronized ColorModel getColorModel() {
-+        return new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-+                                    32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000, true,
-+                                    DataBuffer.TYPE_INT);
-+    }
-+
-+    public BufferedImage createCompatibleImage(int width, int height) {
-+        if (width <= 0 || height <= 0)
-+            return null;
-+        return BDImage.getBuffededImage(width, height, this);
-+    }
-+
-+    public VolatileImage createCompatibleVolatileImage(int width, int height) {
-+        return null;
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDGraphics.java libbluray/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDGraphics.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,684 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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;
-+
-+import java.lang.reflect.Field;
-+import java.text.AttributedCharacterIterator;
-+import java.util.Arrays;
-+import java.awt.image.AreaAveragingScaleFilter;
-+import java.awt.image.BufferedImage;
-+import java.awt.image.ImageConsumer;
-+import java.awt.image.ImageObserver;
-+
-+import org.dvb.ui.DVBBufferedImage;
-+
-+import sun.awt.ConstrainableGraphics;
-+
-+import org.videolan.Logger;
-+
-+class BDGraphics extends Graphics2D implements ConstrainableGraphics {
-+    private static final Color DEFAULT_COLOR = Color.BLACK;
-+    private static final Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 12);
-+
-+    private int width;
-+    private int height;
-+    private int[] backBuffer;
-+    private Area dirty;
-+    private GraphicsConfiguration gc;
-+    private Color foreground;
-+    private Color background;
-+    private Font font;
-+    private BDFontMetrics fontMetrics;
-+    private AlphaComposite composite;
-+
-+    /** The current xor color. If null then we are in paint mode. */
-+    private Color xorColor;
-+
-+    /** Translated X, Y offset from native offset. */
-+    private int originX;
-+    private int originY;
-+
-+    /** The actual clip rectangle that is intersection of user clip and constrained rectangle. */
-+    private Rectangle actualClip;
-+
-+    /** The current user clip rectangle or null if no clip has been set. This is stored in the
-+     native coordinate system and not the (possibly) translated Java coordinate system. */
-+    private Rectangle clip;
-+
-+    /** The rectangle this graphics object has been constrained too. This is stored in the
-+     native coordinate system and not the (possibly) translated Java coordinate system.
-+     If it is null then this graphics has not been constrained. The constrained rectangle
-+     is another layer of clipping independant of the user clip. */
-+    private Rectangle constrainedRect;
-+
-+    BDGraphics(BDGraphics g) {
-+        backBuffer = g.backBuffer;
-+        dirty = g.dirty;
-+        width = g.width;
-+        height = g.height;
-+        gc = g.gc;
-+        foreground = g.foreground;
-+        background = g.background;
-+        composite = g.composite;
-+        font = g.font;
-+        fontMetrics = g.fontMetrics;
-+        originX = g.originX;
-+        originY = g.originY;
-+        actualClip = g.clip;
-+        clip = g.clip;
-+        constrainedRect = g.constrainedRect;
-+    }
-+
-+    BDGraphics(BDRootWindow window) {
-+        width = window.getWidth();
-+        height = window.getHeight();
-+        backBuffer = window.getBdBackBuffer();
-+        dirty = window.getDirtyArea();
-+        gc = window.getGraphicsConfiguration();
-+        foreground = window.getForeground();
-+        background = window.getBackground();
-+        font = window.getFont();
-+        if (foreground == null)
-+            foreground = DEFAULT_COLOR;
-+        if (background == null)
-+            background = DEFAULT_COLOR;
-+        if (font == null)
-+            font = DEFAULT_FONT;
-+        fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        composite = AlphaComposite.SrcOver;
-+        setupClip();
-+    }
-+
-+    BDGraphics(BDImage image) {
-+        width = image.getWidth();
-+        height = image.getHeight();
-+        backBuffer = image.getBdBackBuffer();
-+        dirty = image.getDirtyArea();
-+        gc = image.getGraphicsConfiguration();
-+        Component component = image.getComponent();
-+        if (component != null) {
-+            foreground = component.getForeground();
-+            background = component.getBackground();
-+            font = component.getFont();
-+        }
-+        if (foreground == null)
-+            foreground = DEFAULT_COLOR;
-+        if (background == null)
-+            background = DEFAULT_COLOR;
-+        if (font == null)
-+            font = DEFAULT_FONT;
-+        fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        composite = AlphaComposite.SrcOver;
-+        setupClip();
-+    }
-+
-+    public Graphics create() {
-+        return new BDGraphics(this);
-+    }
-+
-+    public void translate(int x, int y) {
-+        originX += x;
-+        originY += y;
-+    }
-+
-+    public void setFont(Font font) {
-+        if (font != null && !font.equals(this.font)) {
-+            this.font = font;
-+            fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        }
-+    }
-+
-+    public Font getFont() {
-+        return font;
-+    }
-+
-+    public FontMetrics getFontMetrics() {
-+        return fontMetrics;
-+    }
-+
-+    public FontMetrics getFontMetrics(Font font) {
-+        return BDFontMetrics.getFontMetrics(font);
-+    }
-+
-+    public void setColor(Color c) {
-+        if ((c != null) && (c != foreground))
-+            foreground = c;
-+    }
-+
-+    public Color getColor() {
-+        return foreground;
-+    }
-+
-+    public Composite getComposite() {
-+        return composite;
-+    }
-+
-+    public GraphicsConfiguration getDeviceConfiguration() {
-+        return gc;
-+    }
-+
-+    public void setComposite(Composite comp) {
-+        if ((comp != null) && (comp != composite)) {
-+            if (!(comp instanceof AlphaComposite))
-+                throw new IllegalArgumentException("Only AlphaComposite is supported");
-+            composite = (AlphaComposite) comp;
-+        }
-+    }
-+
-+    public void setPaintMode() {
-+        xorColor = null;
-+    }
-+
-+    public void setXORMode(Color color) {
-+        xorColor = color;
-+    }
-+
-+    /** Gets the current clipping area. */
-+    public Rectangle getClipBounds() {
-+        if (clip != null)
-+            return new Rectangle (clip.x - originX, clip.y - originY, clip.width, clip.height);
-+        return null;
-+    }
-+
-+    public void constrain(int x, int y, int w, int h) {
-+        Rectangle rect;
-+        if (constrainedRect != null)
-+            rect = constrainedRect;
-+        else
-+            rect = new Rectangle(0, 0, width, height);
-+        constrainedRect = rect.intersection(new Rectangle(rect.x + x, rect.y + y, w, h));
-+        originX = constrainedRect.x;
-+        originY = constrainedRect.y;
-+        setupClip();
-+    }
-+
-+    /** Returns a Shape object representing the clip. */
-+    public Shape getClip() {
-+        return getClipBounds();
-+    }
-+
-+    /** Crops the clipping rectangle. */
-+    public void clipRect(int x, int y, int w, int h) {
-+        Rectangle rect = new Rectangle(x + originX, y + originY, w, h);
-+        if (clip != null)
-+            clip = clip.intersection(rect);
-+        else
-+            clip = rect;
-+        setupClip();
-+    }
-+
-+    /** Sets the clipping rectangle. */
-+    public void setClip(int x, int y, int w, int h) {
-+        clip = new Rectangle (x + originX, y + originY, w, h);
-+        setupClip();
-+    }
-+
-+    /** Sets the clip to a Shape (only Rectangle allowed). */
-+    public void setClip(Shape clip) {
-+        if (clip == null) {
-+            this.clip = null;
-+            setupClip();
-+        } else if (clip instanceof Rectangle) {
-+            Rectangle rect = (Rectangle) clip;
-+            setClip(rect.x, rect.y, rect.width, rect.height);
-+        } else
-+            throw new IllegalArgumentException("setClip(Shape) only supports Rectangle objects");
-+    }
-+
-+    private void setupClip() {
-+        Rectangle rect;
-+        if (constrainedRect != null)
-+            rect = constrainedRect;
-+        else
-+            rect = new Rectangle(0, 0, width, height);
-+        if (clip != null)
-+            actualClip = clip.intersection(rect);
-+        else
-+            actualClip = rect;
-+    }
-+
-+    private int alphaBlend(int dest, int src) {
-+        int As = src >>> 24;
-+        if (As == 0)
-+            return dest;
-+        if (As == 255)
-+            return src;
-+        int Ad = (dest >>> 24);
-+        if (Ad == 0)
-+            return src;
-+        int R, G, B;
-+        R = ((src >>> 16) & 255) * As * 255;
-+        G = ((src >>> 8) & 255) * As * 255;
-+        B = (src & 255) * As * 255;
-+        Ad = Ad * (255 - As);
-+        As = As * 255 + Ad;
-+        R = (R + ((dest >>> 16) & 255) * Ad) / As;
-+        G = (G + ((dest >>> 8) & 255) * Ad) / As;
-+        B = (B + (dest & 255) * Ad) / As;
-+        R = Math.min(255, R);
-+        G = Math.min(255, G);
-+        B = Math.min(255, B);
-+        Ad = As / 255;
-+        Ad = Math.min(255, Ad);
-+        return (Ad << 24) | (R << 16) | (G << 8) | B;
-+    }
-+
-+    private void drawPointN(int x, int y, int rgb) {
-+
-+        dirty.add(x, y);
-+
-+        if (xorColor != null) {
-+            backBuffer[y * width + x] ^= xorColor.getRGB() ^ rgb;
-+            return;
-+        }
-+        int rule;
-+        if (composite != null) {
-+            rule = composite.getRule();
-+            rgb = ((int)((rgb >>> 24) * composite.getAlpha()) << 24) | (rgb & 0x00FFFFFF);
-+        } else {
-+            rule = AlphaComposite.SRC_OVER;
-+        }
-+        switch (rule) {
-+            case AlphaComposite.CLEAR:
-+                backBuffer[y * width + x] = 0;
-+                break;
-+            case AlphaComposite.SRC:
-+                backBuffer[y * width + x] = rgb;
-+                break;
-+            case AlphaComposite.SRC_OVER:
-+                backBuffer[y * width + x] = alphaBlend(backBuffer[y * width + x], rgb);
-+                break;
-+        }
-+    }
-+
-+    private void drawGlyph(int[] rgbArray, int x0, int y0, int w, int h) {
-+        for (int y = 0; y < h; y++)
-+            for (int x = 0; x < w; x++)
-+                drawPoint(x + x0, y + y0, rgbArray[y * w + x]);
-+    }
-+
-+    private void drawPoint(int x, int y, int rgb) {
-+        x += originX;
-+        y += originY;
-+        if (actualClip.contains(x, y))
-+            drawPointN(x, y, rgb);
-+    }
-+
-+    public void clearRect(int x, int y, int w, int h) {
-+        x += originX;
-+        y += originY;
-+        Rectangle rect = new Rectangle(x, y, w, h);
-+        rect = actualClip.intersection(rect);
-+        x = rect.x;
-+        y = rect.y;
-+        w = rect.width;
-+        h = rect.height;
-+        int rgb = background.getRGB();
-+        for (int i = 0; i < h; i++)
-+            Arrays.fill(backBuffer, (y + i) * width + x, (y + i) * width + x + w, rgb);
-+
-+        dirty.add(rect);
-+    }
-+
-+    public void fillRect(int x, int y, int w, int h) {
-+        x += originX;
-+        y += originY;
-+        Rectangle rect = new Rectangle(x, y, w, h);
-+        rect = actualClip.intersection(rect);
-+        x = rect.x;
-+        y = rect.y;
-+        w = rect.width;
-+        h = rect.height;
-+        int rgb = foreground.getRGB();
-+        for (int Y = y; Y < (y + h); Y++)
-+            for (int X = x; X < (x + w); X++)
-+                drawPointN(X, Y, rgb);
-+    }
-+
-+    public void drawRect(int x, int y, int w, int h) {
-+        drawLineN(x, y, x + w, y);
-+        drawLineN(x, y + h, x + w, y + h);
-+        drawLineN(x, y, x, y + h);
-+        drawLineN(x + w, y, x + w, y + h);
-+    }
-+
-+    public void drawLineN(int x1, int y1, int x2, int y2) {
-+        int rgb = foreground.getRGB();
-+        int dy = y2 - y1;
-+        int dx = x2 - x1;
-+        int stepx, stepy;
-+        int fraction;
-+        if (dy < 0) {
-+            dy = -dy;
-+            stepy = -1;
-+        } else {
-+            stepy = 1;
-+        }
-+        if (dx < 0) {
-+            dx = -dx;
-+            stepx = -1;
-+        } else {
-+            stepx = 1;
-+        }
-+        dy <<= 1;
-+        dx <<= 1;
-+
-+        drawPointN(x1, y1, rgb);
-+
-+        if (dx > dy) {
-+            fraction = dy - (dx >> 1);
-+            while (x1 != x2) {
-+                if (fraction >= 0) {
-+                    y1 += stepy;
-+                    fraction -= dx;
-+                }
-+                x1 += stepx;
-+                fraction += dy;
-+                drawPointN(x1, y1, rgb);
-+            }
-+        } else {
-+            fraction = dx - (dy >> 1);
-+            while (y1 != y2) {
-+                if (fraction >= 0) {
-+                    x1 += stepx;
-+                    fraction -= dy;
-+                }
-+                y1 += stepy;
-+                fraction += dx;
-+                drawPointN(x1, y1, rgb);
-+            }
-+        }
-+    }
-+
-+    public void drawLine(int x1, int y1, int x2, int y2) {
-+        drawLineN(x1, y1, x2, y2);
-+    }
-+
-+    /**
-+     * Copies an area of the canvas that this graphics context paints to.
-+     * @param X the x-coordinate of the source.
-+     * @param Y the y-coordinate of the source.
-+     * @param W the width.
-+     * @param H the height.
-+     * @param dx the horizontal distance to copy the pixels.
-+     * @param dy the vertical distance to copy the pixels.
-+     */
-+    public void copyArea(int X, int Y, int W, int H, int dx, int dy) {
-+        X += originX;
-+        Y += originY;
-+        logger.unimplemented("copyArea");
-+    }
-+
-+    /** Draws lines defined by an array of x points and y points */
-+    public void drawPolyline(int xPoints[], int yPoints[], int nPoints) {
-+        if (nPoints == 1) {
-+            drawPointN(xPoints[0], yPoints[0], foreground.getRGB());
-+        } else {
-+            for (int i = 0; i < (nPoints - 1); i++)
-+                drawLineN(xPoints[i], xPoints[i], xPoints[i + 1], xPoints[i + 1]);
-+        }
-+    }
-+
-+    /** Draws a polygon defined by an array of x points and y points */
-+    public void drawPolygon(int xPoints[], int yPoints[], int nPoints) {
-+        if (nPoints == 1) {
-+            drawPointN(xPoints[0], yPoints[0], foreground.getRGB());
-+        } else {
-+            for (int i = 0; i < (nPoints - 1); i++)
-+                drawLineN(xPoints[i], xPoints[i], xPoints[i + 1], xPoints[i + 1]);
-+            if (nPoints > 2)
-+                drawLineN(xPoints[0], xPoints[0], xPoints[nPoints - 1], xPoints[nPoints - 1]);
-+        }
-+    }
-+
-+    /** Fills a polygon with the current fill mask */
-+    public void fillPolygon(int xPoints[], int yPoints[], int nPoints) {
-+        logger.unimplemented("fillPolygon");
-+    }
-+
-+    /** Draws an oval to fit in the given rectangle */
-+    public void drawOval(int x, int y, int w, int h) {
-+        logger.unimplemented("drawOval");
-+    }
-+
-+    /** Fills an oval to fit in the given rectangle */
-+    public void fillOval(int x, int y, int w, int h) {
-+        logger.unimplemented("fillOval");
-+    }
-+
-+    /**
-+     * Draws an arc bounded by the given rectangle from startAngle to
-+     * endAngle. 0 degrees is a vertical line straight up from the
-+     * center of the rectangle. Positive start angle indicate clockwise
-+     * rotations, negative angle are counter-clockwise.
-+     */
-+    public void drawArc(int x, int y, int w, int h, int startAngle, int endAngle) {
-+        logger.unimplemented("drawArc");
-+    }
-+
-+    /** fills an arc. arguments are the same as drawArc. */
-+    public void fillArc(int x, int y, int w, int h, int startAngle, int endAngle) {
-+        logger.unimplemented("fillArc");
-+    }
-+
-+    /** Draws a rounded rectangle. */
-+    public void drawRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) {
-+        logger.unimplemented("drawRoundRect");
-+    }
-+
-+    /** Draws a filled rounded rectangle. */
-+    public void fillRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) {
-+        logger.unimplemented("fillRoundRect");
-+    }
-+
-+    protected native void drawStringN(long ftFace, String string, int x, int y, int rgb);
-+
-+    /** Draws the given string. */
-+    public void drawString(String string, int x, int y) {
-+        drawStringN(fontMetrics.ftFace, string, x, y, foreground.getRGB());
-+    }
-+
-+    /** Draws the given character array. */
-+    public void drawChars(char chars[], int offset, int length, int x, int y) {
-+        drawStringN(fontMetrics.ftFace, new String(chars, offset, length), x, y, foreground.getRGB());
-+    }
-+
-+    public void drawString(AttributedCharacterIterator arg0, int arg1, int arg2) {
-+        logger.unimplemented("drawString");
-+    }
-+
-+    /**
-+     * Draws an image at x,y in nonblocking mode with a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
-+        return drawImage(img, x, y, null, observer);
-+    }
-+
-+    /**
-+     * Draws an image at x,y in nonblocking mode with a solid background
-+     * color and a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, Color bg,
-+        ImageObserver observer) {
-+        return drawImageN(img, x, y, -1, -1, 0, 0, -1, -1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws an image scaled to x,y,w,h in nonblocking mode with a
-+     * callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, int w, int h,
-+        ImageObserver observer) {
-+        return drawImage(img, x, y, w, h, null, observer);
-+    }
-+
-+    /**
-+     * Draws an image scaled to x,y,w,h in nonblocking mode with a
-+     * solid background color and a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, int w, int h,
-+        Color bg, ImageObserver observer) {
-+        return drawImageN(img, x, y, w, h, 0, 0, -1, -1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle
-+     * in nonblocking mode with a callback object.
-+     */
-+    public boolean drawImage(Image img,
-+        int dx1, int dy1, int dx2, int dy2,
-+        int sx1, int sy1, int sx2, int sy2,
-+        ImageObserver observer) {
-+        return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle in
-+     * nonblocking mode with a solid background color and a callback object.
-+     */
-+    public boolean drawImage(Image img,
-+        int dx1, int dy1, int dx2, int dy2,
-+        int sx1, int sy1, int sx2, int sy2,
-+        Color bg, ImageObserver observer) {
-+        if ((dx1 >= dx2) || (dy1 >= dy2))
-+            return false;
-+        return drawImageN(img, dx1, dy1, dx2 - dx1, dy2 - dy1,
-+                          sx1, sy1, sx2 - sx1, sy2 - sy1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle in
-+     * nonblocking mode with a solid background color and a callback object.
-+     */
-+    protected boolean drawImageN(Image img,
-+        int dx, int dy, int dw, int dh,
-+        int sx, int sy, int sw, int sh,
-+        Color bg, ImageObserver observer) {
-+        if ((sx < 0) || (sy < 0) ||
-+            (sw == 0) || (sh == 0) || (dw == 0) || (dh == 0))
-+            return false;
-+        BDImage bdImage;
-+        if (img instanceof BDImage)
-+            bdImage = (BDImage)img;
-+        else if (img instanceof DVBBufferedImage)
-+            bdImage = (BDImage)getBufferedImagePeer(
-+                    (BufferedImage)(((DVBBufferedImage)img).getImage()));
-+        else if (img instanceof BufferedImage)
-+            bdImage = (BDImage)getBufferedImagePeer((BufferedImage)img);
-+        else
-+            return false;
-+        if (bdImage instanceof BDImageConsumer) {
-+            BDImageConsumer consumer = (BDImageConsumer)bdImage;
-+            if (!consumer.isComplete(observer))
-+                return false;
-+        }
-+
-+        if(sx + sw > bdImage.width) {
-+            int n = sx + sw - bdImage.width;
-+            dw -= dw * n / sw;
-+            sw -= n;
-+        }
-+
-+        if(sy + sh > bdImage.height) {
-+            int n = sy + sh - bdImage.height;
-+            dh -= dh * n / sh;
-+            sh -= n;
-+        }
-+
-+        if ((sw > 0) && (sh > 0) &&
-+            ((sx != 0) || (sy != 0) || (sw != bdImage.width) || (sh != bdImage.height))) {
-+            BDImage subImage = new BDImage(null, sw, sh, null);
-+            bdImage.getRGB(sx, sy, sw, sh, subImage.getBdBackBuffer(), 0, sw);
-+            bdImage = subImage;
-+        }
-+        if ((dw > 0) && (dh > 0) &&
-+            ((dw != bdImage.width) || (dh != bdImage.height))) {
-+            BDImageConsumer scaledImage = new BDImageConsumer(null);
-+            AreaAveragingScaleFilter scaleFilter =
-+                new AreaAveragingScaleFilter(dw, dh);
-+            scaleFilter = (AreaAveragingScaleFilter)scaleFilter.getFilterInstance(scaledImage);
-+            scaleFilter.setDimensions(bdImage.width, bdImage.height);
-+            scaleFilter.setPixels(0, 0, bdImage.width, bdImage.height,
-+                                  bdImage.getColorModel(), bdImage.getBdBackBuffer(),
-+                                  0, bdImage.width);
-+            scaleFilter.imageComplete(ImageConsumer.STATICIMAGEDONE);
-+            bdImage = scaledImage;
-+        }
-+        int[] rgbArray = bdImage.getBdBackBuffer();
-+        int bgColor;
-+        if (bg != null)
-+            bgColor = bg.getRGB();
-+        else
-+            bgColor = 0;
-+        // TODO: optimize this
-+        for (int y = dy; y < (dy + bdImage.height); y++)
-+            for (int x = dx; x < (dx + bdImage.width); x++) {
-+                if (bg != null)
-+                    drawPoint(x, y, bgColor);
-+                drawPoint(x, y, rgbArray[(y - dy) * bdImage.width + (x - dx)]);
-+            }
-+        return true;
-+    }
-+
-+    public Stroke getStroke() {
-+        logger.unimplemented("getStroke");
-+        throw new Error();
-+    }
-+
-+    public void setStroke(Stroke stroke) {
-+        logger.unimplemented("setStroke");
-+    }
-+
-+    public void dispose() {
-+    }
-+
-+    public String toString() {
-+        return getClass().getName() + "[" + originX + "," + originY + "]";
-+    }
-+
-+    private static Image getBufferedImagePeer(BufferedImage image) {
-+        try {
-+            return (Image)bufferedImagePeer.get(image);
-+        } catch (IllegalArgumentException e) {
-+            e.printStackTrace();
-+        } catch (IllegalAccessException e) {
-+            e.printStackTrace();
-+        }
-+        return null;
-+    }
-+
-+    private static Field bufferedImagePeer;
-+
-+    static {
-+        try {
-+            Class c = Class.forName("java.awt.image.BufferedImage");
-+            bufferedImagePeer = c.getDeclaredField("peer");
-+            bufferedImagePeer.setAccessible(true);
-+        } catch (ClassNotFoundException e) {
-+            throw new AWTError("java.awt.image.BufferedImage not found");
-+        } catch (SecurityException e) {
-+            throw new AWTError("java.awt.image.BufferedImage.peer not accessible");
-+        } catch (NoSuchFieldException e) {
-+            throw new AWTError("java.awt.image.BufferedImage.peer not found");
-+        }
-+    }
-+
-+    private static final Logger logger = Logger.getLogger(BDGraphics.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDImage.java libbluray/src/libbluray/bdj/java-j2me/java/awt/BDImage.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDImage.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/java/awt/BDImage.java	2013-07-26 18:40:43.502463047 +0200
-@@ -0,0 +1,28 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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;
-+
-+import sun.awt.image.BufferedImagePeer;
-+
-+public class BDImage extends BDImageBase implements BufferedImagePeer {
-+    BDImage(Component component, int width, int height, GraphicsConfiguration gc) {
-+        super(component, width, height, gc);
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDToolkit.java libbluray/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/java/awt/BDToolkit.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,243 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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;
-+
-+import java.awt.image.ColorModel;
-+import java.awt.image.ImageObserver;
-+import java.awt.image.ImageProducer;
-+import java.io.File;
-+import java.net.URL;
-+import java.util.Collections;
-+import java.util.Hashtable;
-+import java.util.WeakHashMap;
-+import java.util.Map;
-+import java.util.Iterator;
-+
-+import sun.awt.NullGraphics;
-+import sun.awt.image.ByteArrayImageSource;
-+import sun.awt.image.FileImageSource;
-+import sun.awt.image.URLImageSource;
-+
-+import org.videolan.BDJXletContext;
-+import org.videolan.Logger;
-+
-+public class BDToolkit extends Toolkit {
-+    private EventQueue eventQueue = new EventQueue();
-+    private BDGraphicsEnvironment localEnv = new BDGraphicsEnvironment();
-+    private BDGraphicsConfiguration defaultGC = (BDGraphicsConfiguration)localEnv.getDefaultScreenDevice().getDefaultConfiguration();
-+    private static Hashtable cachedImages = new Hashtable();
-+    private static final Logger logger = Logger.getLogger(BDToolkit.class.getName());
-+
-+    public BDToolkit () {}
-+
-+    public static void setFocusedWindow(Window window) {
-+        /* nothing to do */
-+    }
-+
-+    public static void shutdown() {
-+        Toolkit toolkit = getDefaultToolkit();
-+        if (toolkit instanceof BDToolkit) {
-+            ((BDToolkit)toolkit).dispose();
-+        }
-+    }
-+
-+    public void dispose() {
-+        if (eventQueue != null) {
-+            BDJHelper.stopEventQueue(eventQueue);
-+            eventQueue = null;
-+        }
-+        cachedImages = null;
-+    }
-+
-+    public Dimension getScreenSize() {
-+        Rectangle dims = defaultGC.getBounds();
-+        return new Dimension(dims.width, dims.height);
-+    }
-+
-+    Graphics getGraphics(Window window) {
-+        if (!(window instanceof BDRootWindow))
-+            return new NullGraphics(window);
-+        return new BDWindowGraphics((BDRootWindow)window);
-+    }
-+
-+    GraphicsEnvironment getLocalGraphicsEnvironment() {
-+        return localEnv;
-+    }
-+
-+    public int getScreenResolution() {
-+        return 72;
-+    }
-+
-+    public ColorModel getColorModel() {
-+        return defaultGC.getColorModel();
-+    }
-+
-+    public String[] getFontList() {
-+        return BDFontMetrics.getFontList();
-+    }
-+
-+    public FontMetrics getFontMetrics(Font font) {
-+        return BDFontMetrics.getFontMetrics(font);
-+    }
-+
-+    public void sync() {
-+        Window window = ((BDGraphicsDevice)localEnv.getDefaultScreenDevice()).getWindow();
-+        if (window instanceof BDRootWindow)
-+            ((BDRootWindow)window).sync();
-+    }
-+
-+    static void clearCache(BDImage image) {
-+        synchronized (cachedImages) {
-+            Iterator i = cachedImages.entrySet().iterator();
-+            while (i.hasNext()) {
-+                Map.Entry entry = (Map.Entry) i.next();
-+                if (entry.getValue() == image) {
-+                    i.remove();
-+                    return;
-+                }
-+            }
-+        }
-+    }
-+
-+    public Image getImage(String filename) {
-+        if (cachedImages.containsKey(filename))
-+            return (Image)cachedImages.get(filename);
-+        Image newImage = createImage(filename);
-+        if (newImage != null)
-+            cachedImages.put(filename, newImage);
-+        return newImage;
-+    }
-+
-+    public Image getImage(URL url) {
-+        if (cachedImages.containsKey(url))
-+            return (Image)cachedImages.get(url);
-+        Image newImage = createImage(url);
-+        if (newImage != null)
-+            cachedImages.put(url, newImage);
-+        return newImage;
-+    }
-+
-+    public Image createImage(String filename) {
-+        if (!new File(filename).exists()) {
-+            BDJXletContext ctx = BDJXletContext.getCurrentContext();
-+            if (ctx != null) {
-+                ClassLoader cldr = (ClassLoader)ctx.getClassLoader();
-+                URL url = cldr.getResource(filename);
-+                if (url != null) {
-+                    logger.warning("" + filename + " translated to " + url);
-+                    return createImage(url);
-+                } else {
-+                    logger.error("ClassLoader failed to translate " + filename);
-+                }
-+            } else {
-+                logger.error("createImage(" + filename + "): no XletContext available!\n" + logger.dumpStack());
-+            }
-+        }
-+
-+        ImageProducer ip = new FileImageSource(filename);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(URL url) {
-+        ImageProducer ip = new URLImageSource(url);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(byte[] imagedata,
-+        int imageoffset,
-+        int imagelength) {
-+        ImageProducer ip = new ByteArrayImageSource(imagedata, imageoffset, imagelength);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(ImageProducer producer) {
-+        return new BDImageConsumer(producer);
-+    }
-+
-+    public Image createImage(Component component, int width, int height) {
-+        return new BDImage(component, width, height, defaultGC);
-+    }
-+
-+    public boolean prepareImage(Image image, int width, int height, ImageObserver observer) {
-+        if (!(image instanceof BDImageConsumer))
-+            return true;
-+        BDImageConsumer img = (BDImageConsumer)image;
-+        return img.prepareImage(observer);
-+    }
-+
-+    public int checkImage(Image image, int width, int height,
-+        ImageObserver observer) {
-+        if (!(image instanceof BDImageConsumer)) {
-+            return ImageObserver.ALLBITS;
-+        }
-+        BDImageConsumer img = (BDImageConsumer)image;
-+        return img.checkImage(observer);
-+    }
-+
-+    public void beep() { }
-+
-+    // mapping of Components to AppContexts, WeakHashMap<Component,AppContext>
-+    private static final Map contextMap =
-+        Collections.synchronizedMap(new WeakHashMap());
-+
-+    public static void addComponent(Component component) {
-+
-+        BDJXletContext context = BDJXletContext.getCurrentContext();
-+        if (context == null) {
-+            logger.warning("addComponent() outside of app context");
-+            return;
-+        }
-+        contextMap.put(component, context);
-+    }
-+
-+    public static EventQueue getEventQueue(Component component) {
-+        if (component != null) {
-+            do {
-+                BDJXletContext ctx = (BDJXletContext)contextMap.get(component);
-+                if (ctx != null) {
-+                    EventQueue eq = ctx.getEventQueue();
-+                    if (eq == null) {
-+                        logger.warning("getEventQueue() failed: no context event queue");
-+                    }
-+                    return eq;
-+                }
-+
-+                component = component.getParent();
-+            } while (component != null);
-+
-+            logger.warning("getEventQueue() failed: no context");
-+        }
-+        return null;
-+    }
-+
-+    protected EventQueue getSystemEventQueueImpl() {
-+        BDJXletContext ctx = BDJXletContext.getCurrentContext();
-+        if (ctx != null) {
-+            EventQueue eq = ctx.getEventQueue();
-+            if (eq != null) {
-+                return eq;
-+            }
-+        }
-+        return eventQueue;
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/io/ixc/IxcRegistry.java libbluray/src/libbluray/bdj/java-j2me/org/dvb/io/ixc/IxcRegistry.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/io/ixc/IxcRegistry.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/org/dvb/io/ixc/IxcRegistry.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,124 @@
-+/*
-+ * This file is part of libbluray
-+ *
-+ * 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 org.dvb.io.ixc;
-+
-+import java.rmi.AccessException;
-+import java.rmi.RemoteException;
-+import java.rmi.NotBoundException;
-+import java.rmi.AlreadyBoundException;
-+import java.rmi.Remote;
-+
-+import javax.microedition.xlet.ixc.StubException;
-+import javax.tv.xlet.XletContext;
-+
-+import org.dvb.application.AppID;
-+import org.dvb.application.AppProxy;
-+import org.dvb.application.AppsDatabase;
-+import org.videolan.BDJXletContext;
-+
-+public class IxcRegistry {
-+    private static javax.microedition.xlet.ixc.IxcRegistry getIxcRegistry(XletContext xc) {
-+        if (!(xc instanceof BDJXletContext))
-+            throw new IllegalArgumentException();
-+        javax.microedition.xlet.ixc.IxcRegistry registry;
-+        registry = javax.microedition.xlet.ixc.IxcRegistry.getRegistry((BDJXletContext)xc);
-+        if (registry == null)
-+            throw new IllegalArgumentException();
-+        return registry;
-+    }
-+
-+    public static Remote lookup(XletContext xc, String path) throws NotBoundException, RemoteException {
-+        int orgid, appid;
-+        int s1, s2;
-+        if (path.charAt(0) != '/')
-+            throw new IllegalArgumentException();
-+        s1 = path.indexOf('/', 1);
-+        if (s1 <= 1)
-+            throw new IllegalArgumentException();
-+        try {
-+            orgid = Integer.parseInt(path.substring(1, s1), 16);
-+        } catch (Exception e) {
-+            throw new IllegalArgumentException();
-+        }
-+        s1++;
-+        s2 = path.indexOf('/', s1);
-+        if (s2 <= s1)
-+            throw new IllegalArgumentException();
-+        try {
-+            appid = Integer.parseInt(path.substring(s1, s2), 16);
-+        } catch (Exception e) {
-+            throw new IllegalArgumentException();
-+        }
-+        String key = "/" + Integer.toHexString(orgid) +
-+                     "/" + Integer.toHexString(appid) +
-+                     "/" + path.substring(s2 + 1, path.length());
-+        return getIxcRegistry(xc).lookup(key);
-+    }
-+
-+    public static void bind(XletContext xc, String name, Remote obj) throws AlreadyBoundException {
-+        if ((xc == null) || (name == null) || (obj == null))
-+            throw new NullPointerException();
-+        String orgid = (String)xc.getXletProperty("dvb.org.id");
-+        String appid = (String)xc.getXletProperty("dvb.app.id");
-+        AppID id = new AppID(Integer.parseInt(orgid, 16), Integer.parseInt(appid, 16));
-+        if (AppsDatabase.getAppsDatabase().getAppProxy(id).getState() == AppProxy.DESTROYED)
-+            return;
-+        String key = "/" + orgid + "/" + appid + "/" + name;
-+        try {
-+            getIxcRegistry(xc).bind(key, obj);
-+        } catch (StubException e) {
-+            throw new IllegalArgumentException();
-+        }
-+    }
-+
-+    public static void unbind(XletContext xc, String name) throws NotBoundException {
-+        if ((xc == null) || (name == null))
-+            throw new NullPointerException();
-+        String key = "/" + (String)xc.getXletProperty("dvb.org.id") +
-+                     "/" + (String)xc.getXletProperty("dvb.app.id") +
-+                     "/" + name;
-+        try {
-+            getIxcRegistry(xc).unbind(key);
-+        } catch (AccessException e) {
-+            throw new IllegalArgumentException();
-+        }
-+    }
-+
-+    public static void rebind(XletContext xc, String name, Remote obj) {
-+        if ((xc == null) || (name == null) || (obj == null))
-+            throw new NullPointerException();
-+        String orgid = (String)xc.getXletProperty("dvb.org.id");
-+        String appid = (String)xc.getXletProperty("dvb.app.id");
-+        AppID id = new AppID(Integer.parseInt(orgid, 16), Integer.parseInt(appid, 16));
-+        if (AppsDatabase.getAppsDatabase().getAppProxy(id).getState() == AppProxy.DESTROYED)
-+            return;
-+        String key = "/" + orgid + "/" + appid + "/" + name;
-+        try {
-+            getIxcRegistry(xc).rebind(key, obj);
-+        } catch (StubException e) {
-+            throw new IllegalArgumentException();
-+        } catch (AccessException e) {
-+            throw new IllegalArgumentException();
-+        }
-+    }
-+
-+    public static String[] list(XletContext xc) {
-+        return getIxcRegistry(xc).list();
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/ui/DVBGraphicsImpl.java libbluray/src/libbluray/bdj/java-j2me/org/dvb/ui/DVBGraphicsImpl.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/ui/DVBGraphicsImpl.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/org/dvb/ui/DVBGraphicsImpl.java	2013-07-26 18:40:43.502463047 +0200
-@@ -0,0 +1,359 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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 org.dvb.ui;
-+
-+import java.awt.AlphaComposite;
-+import java.awt.Color;
-+import java.awt.Composite;
-+import java.awt.Font;
-+import java.awt.FontMetrics;
-+import java.awt.Graphics;
-+import java.awt.Graphics2D;
-+import java.awt.GraphicsConfiguration;
-+import java.awt.Image;
-+import java.awt.Polygon;
-+import java.awt.Rectangle;
-+import java.awt.Shape;
-+import java.awt.Stroke;
-+import java.awt.image.ImageObserver;
-+import java.text.AttributedCharacterIterator;
-+
-+public class DVBGraphicsImpl extends DVBGraphics {
-+    protected DVBGraphicsImpl(Graphics2D gfx)
-+    {
-+        super(gfx);
-+    }
-+
-+    /*
-+     * Graphics methods
-+     */
-+    public void clearRect(int x, int y, int width, int height)
-+    {
-+        gfx.clearRect(x, y, width, height);
-+    }
-+
-+    public void clipRect(int x, int y, int width, int height)
-+    {
-+        gfx.clipRect(x, y, width, height);
-+    }
-+
-+    public void copyArea(int x, int y, int width, int height, int dx, int dy)
-+    {
-+        gfx.copyArea(x, y, width, height, dx, dy);
-+    }
-+
-+    public Graphics create()
-+    {
-+        return gfx.create();
-+    }
-+
-+    public Graphics create(int x, int y, int width, int height)
-+    {
-+        return gfx.create(x, y, width, height);
-+    }
-+
-+    public void dispose()
-+    {
-+        gfx.dispose();
-+    }
-+
-+    public void draw3DRect(int x, int y, int width, int height, boolean raised)
-+    {
-+        gfx.draw3DRect(x, y, width, height, raised);
-+    }
-+
-+    public void drawArc(int x, int y, int width, int height, int startAngle,
-+            int arcAngle)
-+    {
-+        gfx.drawArc(x, y, width, height, startAngle, arcAngle);
-+    }
-+
-+    public void drawBytes(byte[] data, int offset, int length, int x, int y)
-+    {
-+        gfx.drawBytes(data, offset, length, x, y);
-+    }
-+
-+    public void drawChars(char[] data, int offset, int length, int x, int y)
-+    {
-+        gfx.drawChars(data, offset, length, x, y);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, Color bgcolor,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, int width, int height,
-+            Color bgcolor, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, width, height, bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, int width, int height,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, width, height, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
-+            int sx1, int sy1, int sx2, int sy2, Color bgcolor,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
-+                             bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
-+            int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
-+                             observer);
-+    }
-+
-+    public void drawLine(int x1, int y1, int x2, int y2)
-+    {
-+        gfx.drawLine(x1, y1, x2, y2);
-+    }
-+
-+    public void drawOval(int x, int y, int width, int height)
-+    {
-+        gfx.drawOval(x, y, width, height);
-+    }
-+
-+    public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
-+    {
-+        gfx.drawPolygon(xPoints, yPoints, nPoints);
-+    }
-+
-+    public void drawPolygon(Polygon p)
-+    {
-+        gfx.drawPolygon(p);
-+    }
-+
-+    public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
-+    {
-+        gfx.drawPolyline(xPoints, yPoints, nPoints);
-+    }
-+
-+    public void drawRect(int x, int y, int width, int height)
-+    {
-+        gfx.drawRect(x, y, width, height);
-+    }
-+
-+    public void drawRoundRect(int x, int y, int width, int height,
-+            int arcWidth, int arcHeight)
-+    {
-+        gfx.drawRoundRect(x, y, width, height, arcWidth, arcHeight);
-+    }
-+
-+    public void drawString(AttributedCharacterIterator iterator, int x, int y)
-+    {
-+        gfx.drawString(iterator, x, y);
-+    }
-+
-+    public void drawString(String str, int x, int y)
-+    {
-+        gfx.drawString(str, x, y);
-+    }
-+
-+    public void fill3DRect(int x, int y, int width, int height, boolean raised)
-+    {
-+        gfx.fill3DRect(x, y, width, height, raised);
-+    }
-+
-+    public void fillArc(int x, int y, int width, int height, int startAngle,
-+            int arcAngle)
-+    {
-+        gfx.fillArc(x, y, width, height, startAngle, arcAngle);
-+    }
-+
-+    public void fillOval(int x, int y, int width, int height)
-+    {
-+        gfx.fillOval(x, y, width, height);
-+    }
-+
-+    public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
-+    {
-+        gfx.fillPolygon(xPoints, yPoints, nPoints);
-+    }
-+
-+    public void fillPolygon(Polygon p)
-+    {
-+        gfx.fillPolygon(p);
-+    }
-+
-+    public void fillRect(int x, int y, int width, int height)
-+    {
-+        gfx.fillRect(x, y, width, height);
-+    }
-+
-+    public void fillRoundRect(int x, int y, int width, int height,
-+            int arcWidth, int arcHeight)
-+    {
-+        gfx.fillRoundRect(x, y, width, height, arcWidth, arcHeight);
-+    }
-+
-+    public void finalize()
-+    {
-+        gfx.finalize();
-+    }
-+
-+    public Shape getClip()
-+    {
-+        return gfx.getClip();
-+    }
-+
-+    public Rectangle getClipBounds()
-+    {
-+        return gfx.getClipBounds();
-+    }
-+
-+    public Rectangle getClipBounds(Rectangle r)
-+    {
-+        return gfx.getClipBounds(r);
-+    }
-+
-+    public Color getColor()
-+    {
-+        return gfx.getColor();
-+    }
-+
-+    public Font getFont()
-+    {
-+        return gfx.getFont();
-+    }
-+
-+    public FontMetrics getFontMetrics()
-+    {
-+        return gfx.getFontMetrics();
-+    }
-+
-+    public FontMetrics getFontMetrics(Font f)
-+    {
-+        return gfx.getFontMetrics(f);
-+    }
-+
-+    public boolean hitClip(int x, int y, int width, int height)
-+    {
-+        return gfx.hitClip(x, y, width, height);
-+    }
-+
-+    public void setClip(int x, int y, int width, int height)
-+    {
-+        gfx.setClip(x, y, width, height);
-+    }
-+
-+    public void setClip(Shape clip)
-+    {
-+        gfx.setClip(clip);
-+    }
-+
-+    public void setColor(Color c)
-+    {
-+        gfx.setColor(c);
-+    }
-+
-+    public void setFont(Font font)
-+    {
-+        gfx.setFont(font);
-+    }
-+
-+    public void setPaintMode()
-+    {
-+        gfx.setPaintMode();
-+    }
-+
-+    public void setXORMode(Color c1)
-+    {
-+        gfx.setXORMode(c1);
-+    }
-+
-+    public void translate(int x, int y)
-+    {
-+        gfx.translate(x, y);
-+    }
-+
-+    /*
-+     * DVBGraphics methods
-+     */
-+    public int[] getAvailableCompositeRules()
-+    {
-+        int[] rules = {
-+            DVBAlphaComposite.CLEAR,
-+            DVBAlphaComposite.SRC,
-+            DVBAlphaComposite.SRC_OVER };
-+
-+        return rules;
-+    }
-+
-+    public DVBAlphaComposite getDVBComposite()
-+    {
-+        Composite comp = gfx.getComposite();
-+        if (!(comp instanceof AlphaComposite))
-+            return null;
-+        return DVBAlphaComposite.getInstance(
-+                        ((AlphaComposite)comp).getRule(),
-+                        ((AlphaComposite)comp).getAlpha());
-+    }
-+
-+    public void setDVBComposite(DVBAlphaComposite comp)
-+            throws UnsupportedDrawingOperationException
-+    {
-+        if ((comp.getRule() < DVBAlphaComposite.CLEAR) ||
-+            (comp.getRule() > DVBAlphaComposite.SRC_OVER))
-+            throw new UnsupportedDrawingOperationException("Unsupported composition rule");
-+
-+        gfx.setComposite(AlphaComposite.getInstance(comp.getRule(), comp.getAlpha()));
-+    }
-+
-+    /*
-+     * Graphics2D methods
-+     */
-+    public Composite getComposite()
-+    {
-+        return gfx.getComposite();
-+    }
-+
-+    public Stroke getStroke()
-+    {
-+        return gfx.getStroke();
-+    }
-+
-+    public GraphicsConfiguration getDeviceConfiguration()
-+    {
-+        return gfx.getDeviceConfiguration();
-+    }
-+
-+    public void setComposite(Composite comp)
-+    {
-+        gfx.setComposite(comp);
-+    }
-+
-+    public void setStroke(Stroke s)
-+    {
-+        gfx.setStroke(s);
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/ui/FontFactory.java libbluray/src/libbluray/bdj/java-j2me/org/dvb/ui/FontFactory.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/org/dvb/ui/FontFactory.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/org/dvb/ui/FontFactory.java	2013-07-26 18:40:43.502463047 +0200
-@@ -0,0 +1,111 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2010  William Hahne
-+ *
-+ * 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 org.dvb.ui;
-+
-+import java.awt.Font;
-+
-+import java.io.File;
-+import java.io.FileOutputStream;
-+import java.io.IOException;
-+import java.io.InputStream;
-+
-+import java.net.URL;
-+import java.net.URLConnection;
-+
-+import org.videolan.BDJUtil;
-+import org.videolan.FontIndex;
-+import org.videolan.FontIndexData;
-+import org.videolan.Logger;
-+
-+import sun.net.www.ParseUtil;
-+
-+public class FontFactory {
-+    public static void loadDiscFonts() {
-+        unloadDiscFonts();
-+
-+        fonts = FontIndex.parseIndex(BDJUtil.discRootToFilesystem("/BDMV/AUXDATA/dvb.fontindex"));
-+
-+        if (fonts != null) {
-+            logger.trace("Disc fonts:");
-+            for (int i = 0; i < fonts.length; i++)
-+                System.err.println("    "+(i+1)+": " + fonts[i].toString());
-+        } else {
-+            logger.trace("No fonts loaded from disc");
-+        }
-+    }
-+
-+    public static void unloadDiscFonts() {
-+        if (fonts != null) {
-+            fonts = null;
-+        }
-+    }
-+
-+    public FontFactory() throws FontFormatException, IOException {
-+        if (fonts == null)
-+            throw new IOException("There is no font data");
-+    }
-+
-+    public FontFactory(URL u) throws IOException, FontFormatException {
-+        String path = u.getPath().replace('/', File.separatorChar);
-+        path = ParseUtil.decode(path);
-+        if (u.getProtocol().equals("file")) {
-+            path = path.replace('/', File.separatorChar);
-+            file = new File(path);
-+        } else {
-+            int index = path.lastIndexOf('/');
-+            if (index >= 0)
-+                path = path.substring(index + 1);
-+            path = System.getProperty("bluray.vfs.root") + File.separator + path;
-+
-+            URLConnection uc = u.openConnection();
-+            InputStream is = uc.getInputStream();
-+            FileOutputStream os = null;
-+            try {
-+                os = new FileOutputStream(path);
-+                byte[] buf = new byte[1024];
-+                int len;
-+                while ((len = is.read(buf)) > 0)
-+                    os.write(buf, 0, len);
-+                file = new File(path);
-+            } finally {
-+                try {
-+                    is.close();
-+                    os.close();
-+                } catch (Throwable e) {
-+                    file = null;
-+                }
-+            }
-+        }
-+        if (file == null)
-+            throw new IOException();
-+    }
-+
-+    public Font createFont(String name, int style, int size)
-+            throws FontNotAvailableException, FontFormatException, IOException {
-+        logger.info("Creating font: " + name + " " + style + " " + size);
-+
-+        return new Font(name, style, size);
-+    }
-+
-+    private File file = null;
-+    private static FontIndexData[] fonts = null;
-+
-+    private static final Logger logger = Logger.getLogger(FontFactory.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2me.orig/org/videolan/PortingHelper.java libbluray/src/libbluray/bdj/java-j2me/org/videolan/PortingHelper.java
---- libbluray/src/libbluray/bdj/java-j2me.orig/org/videolan/PortingHelper.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2me/org/videolan/PortingHelper.java	2013-07-26 18:40:43.502463047 +0200
-@@ -0,0 +1,29 @@
-+/*
-+ * 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 org.videolan;
-+
-+public class PortingHelper {
-+
-+    public static void stopThread(Thread t) {
-+    }
-+
-+    public static void stopThreadGroup(ThreadGroup t) {
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDGraphicsConfiguration.java libbluray/src/libbluray/bdj/java-j2se/java/awt/BDGraphicsConfiguration.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDGraphicsConfiguration.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/BDGraphicsConfiguration.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,106 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  Libbluray
-+ *
-+ * 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;
-+
-+import java.awt.color.ColorSpace;
-+import java.awt.image.BufferedImage;
-+import java.awt.image.ColorModel;
-+import java.awt.image.DataBuffer;
-+import java.awt.image.DirectColorModel;
-+import java.awt.image.VolatileImage;
-+
-+class BDGraphicsConfiguration extends GraphicsConfiguration {
-+    private BDGraphicsDevice device;
-+
-+    BDGraphicsConfiguration(BDGraphicsDevice device) {
-+        this.device = device;
-+    }
-+
-+    public GraphicsDevice getDevice() {
-+        return device;
-+    }
-+
-+    public Rectangle getBounds() {
-+        return device.getBounds();
-+    }
-+
-+    int getCompatibleImageType() {
-+        return BufferedImage.TYPE_INT_ARGB;
-+    }
-+
-+    public java.awt.geom.AffineTransform getNormalizingTransform() {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "getNormalizingTransform");
-+        return null;
-+    }
-+    public java.awt.geom.AffineTransform getDefaultTransform() {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "getDefaultTransform");
-+        return null;
-+    }
-+    public java.awt.image.ColorModel getColorModel(int transparency) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "getColorModel");
-+        return null;
-+    }
-+
-+    public synchronized ColorModel getColorModel() {
-+        return new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
-+                                    32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000, true,
-+                                    DataBuffer.TYPE_INT);
-+    }
-+
-+    public BufferedImage createCompatibleImage(int width, int height, int trans) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "createCompatibleImage");
-+        return null;
-+    }
-+
-+    public BufferedImage createCompatibleImage(int width, int height) {
-+        if (width <= 0 || height <= 0)
-+            return null;
-+        return BDImage.getBuffededImage(width, height, this);
-+    }
-+
-+    public VolatileImage createCompatibleVolatileImage(int width, int height) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "createCompatibleVolatileImage");
-+        return null;
-+    }
-+
-+    public VolatileImage createCompatibleVolatileImage(int width, int height, int trans) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "createCompatibleVolatileImage");
-+        return null;
-+    }
-+
-+    public VolatileImage createCompatibleVolatileImage(int width, int height, ImageCapabilities caps) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "createCompatibleVolatileImage");
-+        return null;
-+    }
-+
-+    public VolatileImage createCompatibleVolatileImage(int width, int height, ImageCapabilities caps, int trans) {
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "createCompatibleVolatileImage");
-+        return null;
-+    }
-+
-+    public BufferCapabilities getBufferCapabilities(){
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "getBufferCapabilities");
-+        return super.getBufferCapabilities();
-+    }
-+    public ImageCapabilities getImageCapabilities(){
-+        org.videolan.Logger.unimplemented("BDGraphicsConfiguration", "getImageCapabilities");
-+        return super.getImageCapabilities();
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDGraphics.java libbluray/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDGraphics.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java	2013-07-26 19:56:40.242271819 +0200
-@@ -0,0 +1,768 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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;
-+
-+import java.lang.reflect.Field;
-+import java.text.AttributedCharacterIterator;
-+import java.util.Arrays;
-+import java.awt.image.AreaAveragingScaleFilter;
-+import java.awt.image.BufferedImage;
-+import java.awt.image.ImageConsumer;
-+import java.awt.image.ImageObserver;
-+import java.awt.font.*;
-+import java.awt.image.renderable.RenderableImage;
-+import java.awt.image.RenderedImage;
-+import java.awt.geom.AffineTransform;
-+
-+import org.dvb.ui.DVBBufferedImage;
-+
-+import sun.awt.ConstrainableGraphics;
-+
-+import org.videolan.Logger;
-+
-+class BDGraphics extends Graphics2D implements ConstrainableGraphics {
-+    private static final Color DEFAULT_COLOR = Color.BLACK;
-+    private static final Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 12);
-+
-+    private int width;
-+    private int height;
-+    private int[] backBuffer;
-+    private Area dirty;
-+    private GraphicsConfiguration gc;
-+    private Color foreground;
-+    private Color background;
-+    private Paint paint;
-+    private Font font;
-+    private BDFontMetrics fontMetrics;
-+    private AlphaComposite composite;
-+
-+    /** The current xor color. If null then we are in paint mode. */
-+    private Color xorColor;
-+
-+    /** Translated X, Y offset from native offset. */
-+    private int originX;
-+    private int originY;
-+
-+    /** The actual clip rectangle that is intersection of user clip and constrained rectangle. */
-+    private Rectangle actualClip;
-+
-+    /** The current user clip rectangle or null if no clip has been set. This is stored in the
-+     native coordinate system and not the (possibly) translated Java coordinate system. */
-+    private Rectangle clip;
-+
-+    /** The rectangle this graphics object has been constrained too. This is stored in the
-+     native coordinate system and not the (possibly) translated Java coordinate system.
-+     If it is null then this graphics has not been constrained. The constrained rectangle
-+     is another layer of clipping independant of the user clip. */
-+    private Rectangle constrainedRect;
-+
-+    BDGraphics(BDGraphics g) {
-+        backBuffer = g.backBuffer;
-+        dirty = g.dirty;
-+        width = g.width;
-+        height = g.height;
-+        gc = g.gc;
-+        foreground = g.foreground;
-+        background = g.background;
-+        composite = g.composite;
-+        font = g.font;
-+        fontMetrics = g.fontMetrics;
-+        originX = g.originX;
-+        originY = g.originY;
-+        actualClip = g.clip;
-+        clip = g.clip;
-+        constrainedRect = g.constrainedRect;
-+        if (clip == null)
-+            setupClip();
-+    }
-+
-+    BDGraphics(BDRootWindow window) {
-+        width = window.getWidth();
-+        height = window.getHeight();
-+        backBuffer = window.getBdBackBuffer();
-+        dirty = window.getDirtyArea();
-+        gc = window.getGraphicsConfiguration();
-+        foreground = window.getForeground();
-+        background = window.getBackground();
-+        font = window.getFont();
-+        if (foreground == null)
-+            foreground = DEFAULT_COLOR;
-+        if (background == null)
-+            background = DEFAULT_COLOR;
-+        if (font == null)
-+            font = DEFAULT_FONT;
-+        fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        composite = AlphaComposite.SrcOver;
-+        setupClip();
-+    }
-+
-+    public Color getBackground() {
-+        return background;
-+    }
-+    public void setBackground(Color c) {
-+        background = c;
-+    }
-+
-+    BDGraphics(BDImage image) {
-+        width = image.getWidth();
-+        height = image.getHeight();
-+        backBuffer = image.getBdBackBuffer();
-+        dirty = image.getDirtyArea();
-+
-+        gc = image.getGraphicsConfiguration();
-+        Component component = image.getComponent();
-+        if (component != null) {
-+            foreground = component.getForeground();
-+            background = component.getBackground();
-+            font = component.getFont();
-+        }
-+        if (foreground == null)
-+            foreground = DEFAULT_COLOR;
-+        if (background == null)
-+            background = DEFAULT_COLOR;
-+        if (font == null)
-+            font = DEFAULT_FONT;
-+        fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        composite = AlphaComposite.SrcOver;
-+        setupClip();
-+    }
-+
-+    public Graphics create() {
-+        return new BDGraphics(this);
-+    }
-+
-+    public java.awt.font.FontRenderContext getFontRenderContext()
-+    {
-+        return null;
-+    }
-+
-+    public void translate(int x, int y) {
-+        originX += x;
-+        originY += y;
-+    }
-+
-+    public void setFont(Font font) {
-+        if (font != null && !font.equals(this.font)) {
-+            this.font = font;
-+            fontMetrics = BDFontMetrics.getFontMetrics(font);
-+        }
-+    }
-+
-+    public Font getFont() {
-+        return font;
-+    }
-+
-+    public FontMetrics getFontMetrics() {
-+        return fontMetrics;
-+    }
-+
-+    public FontMetrics getFontMetrics(Font font) {
-+        return BDFontMetrics.getFontMetrics(font);
-+    }
-+
-+    public void setColor(Color c) {
-+        if ((c != null) && (c != foreground))
-+            foreground = c;
-+    }
-+
-+    public Color getColor() {
-+        return foreground;
-+    }
-+
-+    public void setPaint(Paint p) {
-+        paint = p;
-+    }
-+    public Paint getPaint() {
-+        return paint;
-+    }
-+    public void transform(java.awt.geom.AffineTransform t) {
-+        logger.unimplemented("transform");
-+    }
-+    public void setTransform(java.awt.geom.AffineTransform t) {
-+        logger.unimplemented("setTransform");
-+    }
-+    public java.awt.geom.AffineTransform getTransform() {
-+        logger.unimplemented("getTransform");
-+        throw new Error("Not implemented");
-+    }
-+    public void shear(double a, double b) {
-+        logger.unimplemented("shear");
-+    }
-+    public void scale(double a, double b) {
-+        logger.unimplemented("scale");
-+    }
-+    public void rotate(double a) {
-+        logger.unimplemented("rotate");
-+    }
-+    public void rotate(double a, double b, double c) {
-+        logger.unimplemented("rotate");
-+    }
-+    public void translate(double a, double b) {
-+        logger.unimplemented("translate");
-+    }
-+    public boolean hit(Rectangle rect, Shape s, boolean onStroke)  {
-+        logger.unimplemented("hit");
-+        return true;
-+    }
-+    public void fill(Shape s) {
-+        logger.unimplemented("fill");
-+    }
-+    public void draw(java.awt.Shape s) {
-+        logger.unimplemented("draw");
-+    }
-+    public  void drawGlyphVector(GlyphVector g, float x, float y)  {
-+        logger.unimplemented("drawGlyphVector");
-+    }
-+    public void setRenderingHints(java.util.Map hints) {
-+        logger.unimplemented("setRenderingHints");
-+    }
-+    public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) {
-+        logger.unimplemented("setRenderingHint");
-+    }
-+    public void addRenderingHints(java.util.Map hints) {
-+        logger.unimplemented("addRenderingHints");
-+    }
-+    public Object getRenderingHint(RenderingHints.Key hintKey) {
-+        logger.unimplemented("getRenderingHint");
-+        return null;
-+    }
-+    public RenderingHints getRenderingHints() {
-+        logger.unimplemented("getRenderingHints");
-+        return null;
-+    }
-+    public Composite getComposite() {
-+        return composite;
-+    }
-+
-+    public GraphicsConfiguration getDeviceConfiguration() {
-+        return gc;
-+    }
-+
-+    public void setComposite(Composite comp) {
-+        if ((comp != null) && (comp != composite)) {
-+            if (!(comp instanceof AlphaComposite))
-+                throw new IllegalArgumentException("Only AlphaComposite is supported");
-+            composite = (AlphaComposite) comp;
-+        }
-+    }
-+
-+    public void setPaintMode() {
-+        xorColor = null;
-+    }
-+
-+    public void setXORMode(Color color) {
-+        xorColor = color;
-+    }
-+
-+    /** Gets the current clipping area. */
-+    public Rectangle getClipBounds() {
-+        if (clip != null)
-+            return new Rectangle (clip.x - originX, clip.y - originY, clip.width, clip.height);
-+        return null;
-+    }
-+
-+    public void constrain(int x, int y, int w, int h) {
-+        Rectangle rect;
-+        if (constrainedRect != null)
-+            rect = constrainedRect;
-+        else
-+            rect = new Rectangle(0, 0, width, height);
-+        constrainedRect = rect.intersection(new Rectangle(rect.x + x, rect.y + y, w, h));
-+        originX = constrainedRect.x;
-+        originY = constrainedRect.y;
-+        setupClip();
-+    }
-+
-+    /** Returns a Shape object representing the clip. */
-+    public Shape getClip() {
-+        return getClipBounds();
-+    }
-+
-+    /** Crops the clipping rectangle. */
-+    public void clipRect(int x, int y, int w, int h) {
-+        Rectangle rect = new Rectangle(x + originX, y + originY, w, h);
-+        if (clip != null)
-+            clip = clip.intersection(rect);
-+        else
-+            clip = rect;
-+        setupClip();
-+    }
-+
-+    /** Sets the clipping rectangle. */
-+    public void setClip(int x, int y, int w, int h) {
-+        clip = new Rectangle (x + originX, y + originY, w, h);
-+        setupClip();
-+    }
-+
-+    public void clip(Shape s) {
-+        setClip(s);
-+    }
-+
-+    /** Sets the clip to a Shape (only Rectangle allowed). */
-+    public void setClip(Shape clip) {
-+        if (clip == null) {
-+            this.clip = null;
-+            setupClip();
-+        } else if (clip instanceof Rectangle) {
-+            Rectangle rect = (Rectangle) clip;
-+            setClip(rect.x, rect.y, rect.width, rect.height);
-+        } else
-+            throw new IllegalArgumentException("setClip(Shape) only supports Rectangle objects");
-+    }
-+
-+    private void setupClip() {
-+        Rectangle rect;
-+        if (constrainedRect != null)
-+            rect = constrainedRect;
-+        else
-+            rect = new Rectangle(0, 0, width, height);
-+        if (clip != null)
-+            actualClip = clip.intersection(rect);
-+        else
-+            actualClip = rect;
-+    }
-+
-+    private int alphaBlend(int dest, int src) {
-+        int As = src >>> 24;
-+        if (As == 0)
-+            return dest;
-+        if (As == 255)
-+            return src;
-+        int Ad = (dest >>> 24);
-+        if (Ad == 0)
-+            return src;
-+        int R, G, B;
-+        R = ((src >>> 16) & 255) * As * 255;
-+        G = ((src >>> 8) & 255) * As * 255;
-+        B = (src & 255) * As * 255;
-+        Ad = Ad * (255 - As);
-+        As = As * 255 + Ad;
-+        R = (R + ((dest >>> 16) & 255) * Ad) / As;
-+        G = (G + ((dest >>> 8) & 255) * Ad) / As;
-+        B = (B + (dest & 255) * Ad) / As;
-+        R = Math.min(255, R);
-+        G = Math.min(255, G);
-+        B = Math.min(255, B);
-+        Ad = As / 255;
-+        Ad = Math.min(255, Ad);
-+        return (Ad << 24) | (R << 16) | (G << 8) | B;
-+    }
-+
-+    private void drawPointN(int x, int y, int rgb) {
-+
-+        dirty.add(x, y);
-+
-+        if (xorColor != null) {
-+            backBuffer[y * width + x] ^= xorColor.getRGB() ^ rgb;
-+            return;
-+        }
-+        int rule;
-+        if (composite != null) {
-+            rule = composite.getRule();
-+            rgb = ((int)((rgb >>> 24) * composite.getAlpha()) << 24) | (rgb & 0x00FFFFFF);
-+        } else {
-+            rule = AlphaComposite.SRC_OVER;
-+        }
-+        switch (rule) {
-+            case AlphaComposite.CLEAR:
-+                backBuffer[y * width + x] = 0;
-+                break;
-+            case AlphaComposite.SRC:
-+                backBuffer[y * width + x] = rgb;
-+                break;
-+            case AlphaComposite.SRC_OVER:
-+                backBuffer[y * width + x] = alphaBlend(backBuffer[y * width + x], rgb);
-+                break;
-+        }
-+    }
-+
-+    private void drawPoint(int x, int y, int rgb) {
-+        x += originX;
-+        y += originY;
-+        if (actualClip.contains(x, y))
-+            drawPointN(x, y, rgb);
-+    }
-+
-+    public void clearRect(int x, int y, int w, int h) {
-+        x += originX;
-+        y += originY;
-+        Rectangle rect = new Rectangle(x, y, w, h);
-+        rect = actualClip.intersection(rect);
-+        x = rect.x;
-+        y = rect.y;
-+        w = rect.width;
-+        h = rect.height;
-+        int rgb = background.getRGB();
-+        for (int i = 0; i < h; i++)
-+            Arrays.fill(backBuffer, (y + i) * width + x, (y + i) * width + x + w, rgb);
-+
-+        dirty.add(rect);
-+    }
-+
-+    public void fillRect(int x, int y, int w, int h) {
-+        x += originX;
-+        y += originY;
-+        Rectangle rect = new Rectangle(x, y, w, h);
-+        rect = actualClip.intersection(rect);
-+        x = rect.x;
-+        y = rect.y;
-+        w = rect.width;
-+        h = rect.height;
-+        int rgb = foreground.getRGB();
-+        for (int Y = y; Y < (y + h); Y++)
-+            for (int X = x; X < (x + w); X++)
-+                drawPointN(X, Y, rgb);
-+    }
-+
-+    public void drawRect(int x, int y, int w, int h) {
-+        drawLineN(x, y, x + w, y);
-+        drawLineN(x, y + h, x + w, y + h);
-+        drawLineN(x, y, x, y + h);
-+        drawLineN(x + w, y, x + w, y + h);
-+    }
-+
-+    public void drawLineN(int x1, int y1, int x2, int y2) {
-+        int rgb = foreground.getRGB();
-+        int dy = y2 - y1;
-+        int dx = x2 - x1;
-+        int stepx, stepy;
-+        int fraction;
-+        if (dy < 0) {
-+            dy = -dy;
-+            stepy = -1;
-+        } else {
-+            stepy = 1;
-+        }
-+        if (dx < 0) {
-+            dx = -dx;
-+            stepx = -1;
-+        } else {
-+            stepx = 1;
-+        }
-+        dy <<= 1;
-+        dx <<= 1;
-+
-+        drawPointN(x1, y1, rgb);
-+
-+        if (dx > dy) {
-+            fraction = dy - (dx >> 1);
-+            while (x1 != x2) {
-+                if (fraction >= 0) {
-+                    y1 += stepy;
-+                    fraction -= dx;
-+                }
-+                x1 += stepx;
-+                fraction += dy;
-+                drawPointN(x1, y1, rgb);
-+            }
-+        } else {
-+            fraction = dx - (dy >> 1);
-+            while (y1 != y2) {
-+                if (fraction >= 0) {
-+                    x1 += stepx;
-+                    fraction -= dy;
-+                }
-+                y1 += stepy;
-+                fraction += dx;
-+                drawPointN(x1, y1, rgb);
-+            }
-+        }
-+    }
-+
-+    public void drawLine(int x1, int y1, int x2, int y2) {
-+        drawLineN(x1, y1, x2, y2);
-+    }
-+
-+    /**
-+     * Copies an area of the canvas that this graphics context paints to.
-+     * @param X the x-coordinate of the source.
-+     * @param Y the y-coordinate of the source.
-+     * @param W the width.
-+     * @param H the height.
-+     * @param dx the horizontal distance to copy the pixels.
-+     * @param dy the vertical distance to copy the pixels.
-+     */
-+    public void copyArea(int X, int Y, int W, int H, int dx, int dy) {
-+        X += originX;
-+        Y += originY;
-+        logger.unimplemented("copyArea");
-+    }
-+
-+    /** Draws lines defined by an array of x points and y points */
-+    public void drawPolyline(int xPoints[], int yPoints[], int nPoints) {
-+        if (nPoints == 1) {
-+            drawPointN(xPoints[0], yPoints[0], foreground.getRGB());
-+        } else {
-+            for (int i = 0; i < (nPoints - 1); i++)
-+                drawLineN(xPoints[i], xPoints[i], xPoints[i + 1], xPoints[i + 1]);
-+        }
-+    }
-+
-+    /** Draws a polygon defined by an array of x points and y points */
-+    public void drawPolygon(int xPoints[], int yPoints[], int nPoints) {
-+        if (nPoints == 1) {
-+            drawPointN(xPoints[0], yPoints[0], foreground.getRGB());
-+        } else {
-+            for (int i = 0; i < (nPoints - 1); i++)
-+                drawLineN(xPoints[i], xPoints[i], xPoints[i + 1], xPoints[i + 1]);
-+            if (nPoints > 2)
-+                drawLineN(xPoints[0], xPoints[0], xPoints[nPoints - 1], xPoints[nPoints - 1]);
-+        }
-+    }
-+
-+    /** Fills a polygon with the current fill mask */
-+    public void fillPolygon(int xPoints[], int yPoints[], int nPoints) {
-+        logger.unimplemented("fillPolygon");
-+    }
-+
-+    /** Draws an oval to fit in the given rectangle */
-+    public void drawOval(int x, int y, int w, int h) {
-+        logger.unimplemented("drawOval");
-+    }
-+
-+    /** Fills an oval to fit in the given rectangle */
-+    public void fillOval(int x, int y, int w, int h) {
-+        logger.unimplemented("fillOval");
-+    }
-+
-+    /**
-+     * Draws an arc bounded by the given rectangle from startAngle to
-+     * endAngle. 0 degrees is a vertical line straight up from the
-+     * center of the rectangle. Positive start angle indicate clockwise
-+     * rotations, negative angle are counter-clockwise.
-+     */
-+    public void drawArc(int x, int y, int w, int h, int startAngle, int endAngle) {
-+        logger.unimplemented("drawArc");
-+    }
-+
-+    /** fills an arc. arguments are the same as drawArc. */
-+    public void fillArc(int x, int y, int w, int h, int startAngle, int endAngle) {
-+        logger.unimplemented("fillArc");
-+    }
-+
-+    /** Draws a rounded rectangle. */
-+    public void drawRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) {
-+        logger.unimplemented("drawRoundRect");
-+    }
-+
-+    /** Draws a filled rounded rectangle. */
-+    public void fillRoundRect(int x, int y, int w, int h, int arcWidth, int arcHeight) {
-+        logger.unimplemented("fillRoundRect");
-+    }
-+
-+    protected native void drawStringN(long ftFace, String string, int x, int y, int rgb);
-+
-+    /** Draws the given string. */
-+    public void drawString(String string, int x, int y) {
-+        drawStringN(fontMetrics.ftFace, string, x, y, foreground.getRGB());
-+    }
-+
-+    public void drawString(String string, float x, float y) {
-+        drawStringN(fontMetrics.ftFace, string, (int)x, (int)y, foreground.getRGB());
-+    }
-+
-+    public void drawRenderableImage(RenderableImage img, AffineTransform xform)  {
-+        logger.unimplemented("drawRenaerableImage");
-+    }
-+
-+    public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
-+        logger.unimplemented("drawRenaeredImage");
-+    }
-+
-+    /** Draws the given character array. */
-+    public void drawChars(char chars[], int offset, int length, int x, int y) {
-+        drawStringN(fontMetrics.ftFace, new String(chars, offset, length), x, y, foreground.getRGB());
-+    }
-+
-+    public void drawString(AttributedCharacterIterator arg0, int arg1, int arg2) {
-+        logger.unimplemented("drawString");
-+    }
-+
-+    public void drawString(AttributedCharacterIterator iterator, float x, float y) {
-+        logger.unimplemented("drawString");
-+    }
-+
-+    public void drawImage(java.awt.image.BufferedImage i,java.awt.image.BufferedImageOp o, int x, int y) {
-+        logger.unimplemented("drawImage");
-+    }
-+
-+    public boolean drawImage(java.awt.Image i, java.awt.geom.AffineTransform t, java.awt.image.ImageObserver o) {
-+        logger.unimplemented("drawImage");
-+        return true;
-+    }
-+
-+    /**
-+     * Draws an image at x,y in nonblocking mode with a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
-+        return drawImage(img, x, y, null, observer);
-+    }
-+
-+    /**
-+     * Draws an image at x,y in nonblocking mode with a solid background
-+     * color and a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, Color bg,
-+        ImageObserver observer) {
-+        return drawImageN(img, x, y, -1, -1, 0, 0, -1, -1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws an image scaled to x,y,w,h in nonblocking mode with a
-+     * callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, int w, int h,
-+        ImageObserver observer) {
-+        return drawImage(img, x, y, w, h, null, observer);
-+    }
-+
-+    /**
-+     * Draws an image scaled to x,y,w,h in nonblocking mode with a
-+     * solid background color and a callback object.
-+     */
-+    public boolean drawImage(Image img, int x, int y, int w, int h,
-+        Color bg, ImageObserver observer) {
-+        return drawImageN(img, x, y, w, h, 0, 0, -1, -1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle
-+     * in nonblocking mode with a callback object.
-+     */
-+    public boolean drawImage(Image img,
-+        int dx1, int dy1, int dx2, int dy2,
-+        int sx1, int sy1, int sx2, int sy2,
-+        ImageObserver observer) {
-+        return drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle in
-+     * nonblocking mode with a solid background color and a callback object.
-+     */
-+    public boolean drawImage(Image img,
-+        int dx1, int dy1, int dx2, int dy2,
-+        int sx1, int sy1, int sx2, int sy2,
-+        Color bg, ImageObserver observer) {
-+        if ((dx1 >= dx2) || (dy1 >= dy2))
-+            return false;
-+        return drawImageN(img, dx1, dy1, dx2 - dx1, dy2 - dy1,
-+                          sx1, sy1, sx2 - sx1, sy2 - sy1, bg, observer);
-+    }
-+
-+    /**
-+     * Draws a subrectangle of an image scaled to a destination rectangle in
-+     * nonblocking mode with a solid background color and a callback object.
-+     */
-+    protected boolean drawImageN(Image img,
-+        int dx, int dy, int dw, int dh,
-+        int sx, int sy, int sw, int sh,
-+        Color bg, ImageObserver observer) {
-+        if ((sx < 0) || (sy < 0) ||
-+            (sw == 0) || (sh == 0) || (dw == 0) || (dh == 0))
-+            return false;
-+
-+        BDImage bdImage;
-+        if (img instanceof BDImage) {
-+            bdImage = (BDImage)img;
-+        } else if (img instanceof DVBBufferedImage) {
-+            logger.unimplemented("drawImageN(DVBBufferedImage)");
-+            //bdImage = (BDImage)getBufferedImagePeer(
-+            //          (BufferedImage)(((DVBBufferedImage)img).getImage()));
-+            bdImage = (BDImage)((DVBBufferedImage)img).getImage();
-+        } else if (img instanceof BufferedImage) {
-+            logger.unimplemented("drawImageN(BufferedImage)");
-+            //bdImage = (BDImage)getBufferedImagePeer((BufferedImage)img);
-+            return false;
-+        } else {
-+            logger.unimplemented("drawImageN(UNKNOWN)");
-+            return false;
-+        }
-+        if (bdImage instanceof BDImageConsumer) {
-+            BDImageConsumer consumer = (BDImageConsumer)bdImage;
-+            if (!consumer.isComplete(observer)) {
-+                return false;
-+            }
-+        }
-+
-+        if(sx + sw > bdImage.width) {
-+            int n = sx + sw - bdImage.width;
-+            dw -= dw * n / sw;
-+            sw -= n;
-+        }
-+
-+        if(sy + sh > bdImage.height) {
-+            int n = sy + sh - bdImage.height;
-+            dh -= dh * n / sh;
-+            sh -= n;
-+        }
-+
-+        if ((sw > 0) && (sh > 0) &&
-+            ((sx != 0) || (sy != 0) || (sw != bdImage.width) || (sh != bdImage.height))) {
-+            BDImage subImage = new BDImage(null, sw, sh, null);
-+            bdImage.getRGB(sx, sy, sw, sh, subImage.getBdBackBuffer(), 0, sw);
-+            bdImage = subImage;
-+        }
-+        if ((dw > 0) && (dh > 0) &&
-+            ((dw != bdImage.width) || (dh != bdImage.height))) {
-+            BDImageConsumer scaledImage = new BDImageConsumer(null);
-+            AreaAveragingScaleFilter scaleFilter =
-+                new AreaAveragingScaleFilter(dw, dh);
-+            scaleFilter = (AreaAveragingScaleFilter)scaleFilter.getFilterInstance(scaledImage);
-+            scaleFilter.setDimensions(bdImage.width, bdImage.height);
-+            scaleFilter.setPixels(0, 0, bdImage.width, bdImage.height,
-+                                  bdImage.getColorModel(), bdImage.getBdBackBuffer(),
-+                                  0, bdImage.width);
-+            scaleFilter.imageComplete(ImageConsumer.STATICIMAGEDONE);
-+            bdImage = scaledImage;
-+        }
-+        int[] rgbArray = bdImage.getBdBackBuffer();
-+        int bgColor;
-+        if (bg != null)
-+            bgColor = bg.getRGB();
-+        else
-+            bgColor = 0;
-+        for (int y = dy; y < (dy + bdImage.height); y++)
-+            for (int x = dx; x < (dx + bdImage.width); x++) {
-+                if (bg != null)
-+                    drawPoint(x, y, bgColor);
-+                drawPoint(x, y, rgbArray[(y - dy) * bdImage.width + (x - dx)]);
-+            }
-+        return true;
-+    }
-+
-+    public Stroke getStroke() {
-+        logger.unimplemented("getStroke");
-+        throw new Error();
-+    }
-+
-+    public void setStroke(Stroke stroke) {
-+        logger.unimplemented("setStroke");
-+    }
-+
-+    public void dispose() {
-+    }
-+
-+    public String toString() {
-+        return getClass().getName() + "[" + originX + "," + originY + "]";
-+    }
-+
-+    private static final Logger logger = Logger.getLogger(BDGraphics.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDImage.java libbluray/src/libbluray/bdj/java-j2se/java/awt/BDImage.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDImage.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/BDImage.java	2013-07-26 19:56:40.245605159 +0200
-@@ -0,0 +1,26 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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 BDImage extends BDImageBase {
-+    BDImage(Component component, int width, int height, GraphicsConfiguration gc) {
-+        super(component, width, height, gc);
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDToolkit.java libbluray/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/BDToolkit.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java	2013-07-26 18:40:43.505796387 +0200
-@@ -0,0 +1,351 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ * Copyright (C) 2012  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;
-+
-+import java.awt.image.ColorModel;
-+import java.awt.image.ImageObserver;
-+import java.awt.image.ImageProducer;
-+import java.awt.peer.KeyboardFocusManagerPeer;
-+import java.io.File;
-+import java.net.URL;
-+import java.util.Collections;
-+import java.util.Hashtable;
-+import java.util.WeakHashMap;
-+import java.util.Map;
-+import java.util.Iterator;
-+
-+import sun.awt.image.ByteArrayImageSource;
-+import sun.awt.image.FileImageSource;
-+import sun.awt.image.URLImageSource;
-+import sun.awt.KeyboardFocusManagerPeerProvider;
-+
-+import java.awt.peer.BDFramePeer;
-+import java.awt.peer.BDKeyboardFocusManagerPeer;
-+
-+import org.videolan.BDJXletContext;
-+import org.videolan.Logger;
-+
-+public class BDToolkit extends Toolkit implements KeyboardFocusManagerPeerProvider {
-+    private EventQueue eventQueue = new EventQueue();
-+    private BDGraphicsEnvironment localEnv = new BDGraphicsEnvironment();
-+    private BDGraphicsConfiguration defaultGC = (BDGraphicsConfiguration)localEnv.getDefaultScreenDevice().getDefaultConfiguration();
-+    private static Hashtable cachedImages = new Hashtable();
-+    private static final Logger logger = Logger.getLogger(BDToolkit.class.getName());
-+
-+    public BDToolkit () {
-+    }
-+
-+    public static void shutdown() {
-+        Toolkit toolkit = getDefaultToolkit();
-+        if (toolkit instanceof BDToolkit) {
-+            ((BDToolkit)toolkit).dispose();
-+        }
-+    }
-+
-+    public void dispose() {
-+        if (eventQueue != null) {
-+            BDJHelper.stopEventQueue(eventQueue);
-+            eventQueue = null;
-+        }
-+
-+        KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
-+        KeyboardFocusManager.getCurrentKeyboardFocusManager().setGlobalCurrentFocusCycleRoot(null);
-+        KeyboardFocusManager.getCurrentKeyboardFocusManager().setGlobalFocusedWindow(null);
-+        KeyboardFocusManager.getCurrentKeyboardFocusManager().setGlobalActiveWindow(null);
-+        KeyboardFocusManager.getCurrentKeyboardFocusManager().setGlobalPermanentFocusOwner(null);
-+
-+        BDKeyboardFocusManagerPeer.shutdown();
-+
-+        KeyboardFocusManager.setCurrentKeyboardFocusManager(null);
-+    }
-+
-+    public static void setFocusedWindow(Window window) {
-+        /* hook KeyboardFocusManagerPeer (not doing this leads to crash) */
-+        BDKeyboardFocusManagerPeer.init(window);
-+    }
-+
-+    public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager kfm)
-+    {
-+        return BDKeyboardFocusManagerPeer.getInstance();
-+    }
-+
-+    public Dimension getScreenSize() {
-+        Rectangle dims = defaultGC.getBounds();
-+        return new Dimension(dims.width, dims.height);
-+    }
-+
-+    Graphics getGraphics(Window window) {
-+        if (!(window instanceof BDRootWindow)) {
-+            System.err.println("getGraphics(): not BDRootWindow");
-+            throw new Error("Not implemented");
-+        }
-+        return new BDWindowGraphics((BDRootWindow)window);
-+    }
-+
-+    GraphicsEnvironment getLocalGraphicsEnvironment() {
-+        return localEnv;
-+    }
-+
-+    public int getScreenResolution() {
-+        return 72;
-+    }
-+
-+    public ColorModel getColorModel() {
-+        return defaultGC.getColorModel();
-+    }
-+
-+    public String[] getFontList() {
-+        return BDFontMetrics.getFontList();
-+    }
-+
-+    public FontMetrics getFontMetrics(Font font) {
-+        return BDFontMetrics.getFontMetrics(font);
-+    }
-+
-+    public void sync() {
-+        org.videolan.GUIManager.getInstance().sync();
-+    }
-+
-+    static void clearCache(BDImage image) {
-+        synchronized (cachedImages) {
-+            Iterator i = cachedImages.entrySet().iterator();
-+            while (i.hasNext()) {
-+                Map.Entry entry = (Map.Entry) i.next();
-+                if (entry.getValue() == image) {
-+                    i.remove();
-+                    return;
-+                }
-+            }
-+        }
-+    }
-+
-+    public Image getImage(String filename) {
-+        if (cachedImages.containsKey(filename))
-+            return (Image)cachedImages.get(filename);
-+        Image newImage = createImage(filename);
-+        if (newImage != null)
-+            cachedImages.put(filename, newImage);
-+        return newImage;
-+    }
-+
-+    public Image getImage(URL url) {
-+        if (cachedImages.containsKey(url))
-+            return (Image)cachedImages.get(url);
-+        Image newImage = createImage(url);
-+        if (newImage != null)
-+            cachedImages.put(url, newImage);
-+        return newImage;
-+    }
-+
-+    public Image createImage(String filename) {
-+        if (!new File(filename).exists()) {
-+            BDJXletContext ctx = BDJXletContext.getCurrentContext();
-+            if (ctx != null) {
-+                ClassLoader cldr = (ClassLoader)ctx.getClassLoader();
-+                URL url = cldr.getResource(filename);
-+                if (url != null) {
-+                    logger.warning("" + filename + " translated to " + url);
-+                    return createImage(url);
-+                } else {
-+                    logger.error("ClassLoader failed to translate " + filename);
-+                }
-+            } else {
-+                logger.error("createImage(" + filename + "): no XletContext available!\n" + logger.dumpStack());
-+            }
-+        }
-+
-+        ImageProducer ip = new FileImageSource(filename);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(URL url) {
-+        ImageProducer ip = new URLImageSource(url);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(byte[] imagedata,
-+        int imageoffset,
-+        int imagelength) {
-+        ImageProducer ip = new ByteArrayImageSource(imagedata, imageoffset, imagelength);
-+        Image newImage = createImage(ip);
-+        return newImage;
-+    }
-+
-+    public Image createImage(ImageProducer producer) {
-+        return new BDImageConsumer(producer);
-+    }
-+
-+    public Image createImage(Component component, int width, int height) {
-+        return new BDImage(component, width, height, defaultGC);
-+   }
-+
-+    public boolean prepareImage(Image image, int width, int height, ImageObserver observer) {
-+        if (!(image instanceof BDImageConsumer))
-+            return true;
-+        BDImageConsumer img = (BDImageConsumer)image;
-+        return img.prepareImage(observer);
-+    }
-+
-+    public int checkImage(Image image, int width, int height,
-+        ImageObserver observer) {
-+        if (!(image instanceof BDImageConsumer)) {
-+            return ImageObserver.ALLBITS;
-+        }
-+        BDImageConsumer img = (BDImageConsumer)image;
-+        return img.checkImage(observer);
-+    }
-+
-+    public void beep() {
-+    }
-+
-+    // mapping of Components to AppContexts, WeakHashMap<Component,AppContext>
-+    private static final Map contextMap =
-+        Collections.synchronizedMap(new WeakHashMap());
-+
-+    public static void addComponent(Component component) {
-+
-+        BDJXletContext context = BDJXletContext.getCurrentContext();
-+        if (context == null) {
-+            logger.warning("addComponent() outside of app context");
-+            return;
-+        }
-+        contextMap.put(component, context);
-+    }
-+
-+    public static EventQueue getEventQueue(Component component) {
-+        if (component != null) {
-+            do {
-+                BDJXletContext ctx = (BDJXletContext)contextMap.get(component);
-+                if (ctx != null) {
-+                    EventQueue eq = ctx.getEventQueue();
-+                    if (eq == null) {
-+                        logger.warning("getEventQueue() failed: no context event queue");
-+                    }
-+                    return eq;
-+                }
-+
-+                component = component.getParent();
-+            } while (component != null);
-+
-+            logger.warning("getEventQueue() failed: no context");
-+        }
-+        return null;
-+    }
-+
-+    protected EventQueue getSystemEventQueueImpl() {
-+        BDJXletContext ctx = BDJXletContext.getCurrentContext();
-+        if (ctx != null) {
-+            EventQueue eq = ctx.getEventQueue();
-+            if (eq != null) {
-+                return eq;
-+            }
-+        }
-+        return eventQueue;
-+    }
-+
-+    public Map mapInputMethodHighlight(java.awt.im.InputMethodHighlight h) {
-+        throw new Error("Not implemented");
-+    }
-+    public  boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType modalExclusionType) {
-+        throw new Error("Not implemented");
-+    }
-+    public  boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.FramePeer createFrame(Frame target) {
-+        return new BDFramePeer(target, (BDRootWindow)target);
-+    }
-+
-+    protected java.awt.peer.ButtonPeer createButton(Button target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.CanvasPeer createCanvas(Canvas target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.CheckboxPeer createCheckbox(Checkbox target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.ChoicePeer createChoice(Choice target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.DesktopPeer createDesktopPeer(Desktop target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.DialogPeer createDialog(Dialog target) {
-+        throw new Error("Not implemented");
-+    }
-+    public java.awt.dnd.peer.DragSourceContextPeer createDragSourceContextPeer(java.awt.dnd.DragGestureEvent dge) {
-+        throw new Error("Not implemented");
-+    }
-+    public java.awt.peer.FileDialogPeer createFileDialog(FileDialog target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.LabelPeer createLabel(Label target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.ListPeer createList(List target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.MenuPeer createMenu(Menu target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.MenuBarPeer createMenuBar(MenuBar target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.MenuItemPeer createMenuItem(MenuItem target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.PanelPeer createPanel(Panel target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.PopupMenuPeer createPopupMenu(PopupMenu target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.ScrollbarPeer createScrollbar(Scrollbar target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.ScrollPanePeer createScrollPane(ScrollPane target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.TextAreaPeer createTextArea(TextArea target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.TextFieldPeer createTextField(TextField target) {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.WindowPeer createWindow(Window target) {
-+        throw new Error("Not implemented");
-+    }
-+    public java.awt.datatransfer.Clipboard getSystemClipboard() {
-+        throw new Error("Not implemented");
-+    }
-+    public PrintJob getPrintJob(Frame frame, String jobtitle, java.util.Properties props)  {
-+        throw new Error("Not implemented");
-+    }
-+    protected java.awt.peer.FontPeer getFontPeer(String name, int style) {
-+        throw new Error("Not implemented");
-+    }
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDComponentPeer.java libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDComponentPeer.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDComponentPeer.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDComponentPeer.java	2013-07-26 18:40:43.559129723 +0200
-@@ -0,0 +1,283 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  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.peer;
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.awt.image.*;
-+
-+import org.videolan.Logger;
-+
-+public abstract class BDComponentPeer implements ComponentPeer
-+{
-+    public BDComponentPeer(Toolkit toolkit, Component component) {
-+        this.toolkit = toolkit;
-+        this.component = component;
-+        setBounds (component.getX(), component.getY(), component.getWidth(), component.getHeight(), SET_BOUNDS);
-+    }
-+
-+    public void applyShape(sun.java2d.pipe.Region r) {
-+    }
-+
-+    public boolean canDetermineObscurity() {
-+        return false;
-+    }
-+
-+    public int checkImage(Image img, int w, int h, ImageObserver o) {
-+        return ((BDToolkit)toolkit).checkImage(img, w, h, o);
-+    }
-+
-+    public void coalescePaintEvent(PaintEvent e) {
-+    }
-+
-+    public void createBuffers(int x, BufferCapabilities bufferCapabilities) {
-+        logger.unimplemented("createBuffers");
-+    }
-+
-+    public Image createImage(ImageProducer producer) {
-+        logger.unimplemented("createImage");
-+        return null;
-+    }
-+
-+    public Image createImage(int width, int height) {
-+        Component parent = component.getParent();
-+        if (parent != null) {
-+            return parent.createImage(width, height);
-+        }
-+        logger.error("createImage(): no parent !");
-+        throw new Error();
-+    }
-+
-+    public VolatileImage createVolatileImage(int width, int height) {
-+        logger.unimplemented("createVolatileImage");
-+        return null;
-+    }
-+
-+    public void destroyBuffers() {
-+    }
-+
-+    /* java 6 only */
-+    public void disable() {
-+        setEnabled(false);
-+    }
-+
-+    public void dispose() {
-+        component = null;
-+        toolkit = null;
-+    }
-+
-+    /* java 6 only */
-+    public void enable() {
-+        setEnabled(true);
-+    }
-+
-+    public void flip(int a, int b, int c, int d, java.awt.BufferCapabilities.FlipContents e) {
-+    }
-+
-+    /* java 6 only */
-+    public Rectangle getBounds() {
-+        return new Rectangle(location.x, location.y, size.width, size.height);
-+        //rootWindow.getBounds();
-+    }
-+
-+    public Image getBackBuffer() {
-+        logger.unimplemented("getBackBuffer");
-+        throw new Error();
-+    }
-+
-+    public ColorModel getColorModel() {
-+        return toolkit.getColorModel();
-+    }
-+
-+    public FontMetrics getFontMetrics(Font font) {
-+        logger.unimplemented("getFontMetrics");
-+        return null;
-+    }
-+
-+    public Graphics getGraphics() {
-+        Component parent = component.getParent();
-+        if (parent != null) {
-+            return parent.getGraphics().create(location.x, location.y, size.width, size.height);
-+        }
-+        logger.error("getGraphics(): no parent !");
-+        throw new Error();
-+    }
-+
-+    public GraphicsConfiguration getGraphicsConfiguration() {
-+        logger.unimplemented("getGraphicsConfiguration");
-+        return null;
-+    }
-+
-+    public Point getLocationOnScreen() {
-+        Point screen = new Point(location);
-+        Component parent = component.getParent();
-+        if (parent != null) {
-+            Point parentScreen = parent.getLocationOnScreen();
-+            screen.translate(parentScreen.x, parentScreen.y);
-+        }
-+        return screen;
-+    }
-+
-+    public Dimension getMinimumSize() {
-+        return size;
-+    }
-+
-+    public Dimension getPreferredSize() {
-+        return size;
-+    }
-+
-+    public Toolkit getToolkit() {
-+        return toolkit;
-+    }
-+
-+    public void handleEvent(AWTEvent e) {
-+        int id = e.getID();
-+
-+        if (e instanceof PaintEvent) {
-+            Graphics g = null;
-+            Rectangle r = ((PaintEvent)e).getUpdateRect();
-+            try {
-+                g = component.getGraphics();
-+                if (g == null)
-+                    return;
-+                g.clipRect(r.x, r.y, r.width, r.height);
-+                if (id == PaintEvent.PAINT)
-+                    component.paint(g);
-+                else
-+                    component.update(g);
-+                toolkit.sync();
-+            } finally {
-+                if (g != null)
-+                    g.dispose();
-+            }
-+        }
-+    }
-+
-+    public boolean handlesWheelScrolling() {
-+        return false;
-+    }
-+
-+    /* java 6 only */
-+    public void hide() {
-+        setVisible(false);
-+    }
-+
-+    public boolean isFocusable() {
-+        return true;
-+    }
-+
-+    public boolean isObscured() {
-+        return false;
-+    }
-+
-+    public boolean isReparentSupported() {
-+        return false;
-+    }
-+
-+    public void layout() {
-+    }
-+
-+    /* java 1.6 only */
-+    public Dimension minimumSize() {
-+        return getMinimumSize();
-+    }
-+
-+    public void paint(Graphics g) {
-+        component.paint(g);
-+    }
-+
-+    /* java 1.6 only */
-+    public Dimension preferredSize() {
-+        return getPreferredSize();
-+    }
-+
-+    public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
-+        return ((BDToolkit)toolkit).prepareImage(img, w, h, o);
-+    }
-+
-+    public void print(Graphics g) {
-+    }
-+
-+    /* java 1.6 only */
-+    public void repaint(long tm, int x, int y, int width, int height) {
-+        logger.unimplemented("repaint");
-+    }
-+
-+    public void reparent(ContainerPeer p) {
-+    }
-+
-+    /* java 1.6 only */
-+    public void reshape(int x, int y, int width, int height) {
-+        setBounds(x, y, width, height, SET_BOUNDS);
-+    }
-+
-+    public boolean requestFocus(Component lightweightChild, boolean temporary, boolean focusedWindowChangeAllowed, long time) {
-+        return true;
-+    }
-+
-+
-+    public void setBackground(Color c) {
-+    }
-+
-+    public void setBounds(int x, int y, int width, int height, int op) {
-+        location.x = x;
-+        location.y = y;
-+        size.width = width;
-+        size.height = height;
-+    }
-+
-+    public void setEnabled(boolean b) {
-+        logger.unimplemented("setEnabled");
-+    }
-+
-+    public void setFont(Font f) {
-+    }
-+
-+    public void setForeground(Color c) {
-+    }
-+
-+    public void setVisible(boolean b) {
-+    }
-+
-+    /* java 7 */
-+    public void setZOrder(ComponentPeer peer) {
-+    }
-+
-+    /* java 6 only */
-+    public void show() {
-+        setVisible(true);
-+    }
-+
-+    public void updateCursorImmediately() {
-+    }
-+
-+    /* java 7 */
-+    public boolean updateGraphicsData(GraphicsConfiguration gc) {
-+        return false;
-+    }
-+
-+
-+    protected Component component;
-+    protected Toolkit toolkit;
-+    protected Point location = new Point();
-+    protected Dimension size = new Dimension();
-+
-+    private static final Logger logger = Logger.getLogger(BDComponentPeer.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDFramePeer.java libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDFramePeer.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDFramePeer.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDFramePeer.java	2013-07-26 18:40:43.559129723 +0200
-@@ -0,0 +1,193 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  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.peer;
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.awt.image.BufferedImage;
-+
-+import org.videolan.Logger;
-+
-+public class BDFramePeer extends BDComponentPeer implements FramePeer
-+{
-+    public BDFramePeer(Frame frame, BDRootWindow rootWindow) {
-+        super(frame.getToolkit(), frame);
-+        this.rootWindow = rootWindow;
-+    }
-+
-+    public Rectangle getBoundsPrivate() {
-+        return null;
-+    }
-+
-+    public int getState() {
-+        return Frame.NORMAL;
-+    }
-+
-+    public void setBoundsPrivate(int a, int b, int c, int d) {
-+    }
-+
-+    public void setMaximizedBounds(Rectangle bounds) {
-+    }
-+
-+    public void setMenuBar(MenuBar mb) {
-+    }
-+
-+    public void setResizable(boolean resizeable) {
-+    }
-+
-+    public void setState(int state) {
-+    }
-+
-+    public void setTitle(String title) {
-+    }
-+
-+    //
-+    // ContainerPeer
-+    //
-+
-+    public void beginLayout() {
-+    }
-+
-+    public void beginValidate() {
-+    }
-+
-+    public void endLayout() {
-+    }
-+
-+    public void endValidate() {
-+    }
-+
-+    public Insets getInsets() {
-+        return insets;
-+    }
-+
-+    /* java 1.6 only */
-+    public Insets insets() {
-+        return getInsets();
-+    }
-+
-+    /* java 1.6 only */
-+    public boolean isPaintPending() {
-+        return false;
-+    }
-+
-+    /* java 1.6 only */
-+    public boolean isRestackSupported() {
-+        return false;
-+    }
-+
-+    /* java 1.6 only */
-+    public void restack() {
-+    }
-+
-+    //
-+    // WindowPeer
-+    //
-+
-+    public void repositionSecurityWarning() {
-+    }
-+
-+    /* Removed in java 1.6 update 45 */
-+    public void setAlwaysOnTop(boolean b) {
-+    }
-+
-+    /* java 1.6 update 45. Also in java 7 / 8. */
-+    public void updateAlwaysOnTopState() {
-+    }
-+
-+    public void setModalBlocked(Dialog d,boolean b) {
-+    }
-+
-+    public void setOpacity(float f) {
-+    }
-+
-+    public void setOpaque(boolean b) {
-+    }
-+
-+    public void toBack() {
-+    }
-+
-+    public void toFront() {
-+    }
-+
-+    public void updateFocusableWindowState() {
-+    }
-+
-+    public void updateIconImages() {
-+    }
-+
-+    public void updateMinimumSize() {
-+    }
-+
-+    public void updateWindow(BufferedImage b) {
-+        logger.unimplemented("updateWindow");
-+    }
-+
-+    /* java 1.7 ? */
-+    public void updateWindow() {
-+        logger.unimplemented("updateWindow");
-+    }
-+
-+    /* java 1.6 only */
-+    public boolean requestWindowFocus()  {
-+        return true;
-+    }
-+
-+    //
-+    // ComponentPeer
-+    //
-+
-+    //public Rectangle getBounds() {
-+    //    return rootWindow.getBounds();
-+    //}
-+
-+    public Graphics getGraphics() {
-+        return new BDWindowGraphics(rootWindow);
-+    }
-+
-+    public Image createImage(int width, int height) {
-+        return ((BDToolkit)BDToolkit.getDefaultToolkit()).createImage((Component)null, width, height);
-+    }
-+
-+    public boolean requestFocus(Component c, boolean a, boolean b, long l, sun.awt.CausedFocusEvent.Cause d) {
-+        if (c == null) {
-+            return true;
-+        }
-+        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new FocusEvent(c, FocusEvent.FOCUS_GAINED));
-+        return true;
-+    }
-+
-+    public void setVisible(boolean b) {
-+        //Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new WindowEvent((Frame)component, WindowEvent.WINDOW_ACTIVATED));
-+        if (b == true) {
-+            component.paint(getGraphics());
-+        }
-+    }
-+
-+    public void dispose() {
-+        super.dispose();
-+        rootWindow = null;
-+    }
-+
-+    private BDRootWindow rootWindow;
-+    private Insets insets = new Insets(0, 0, 0, 0);
-+
-+    private static final Logger logger = Logger.getLogger(BDFramePeer.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDKeyboardFocusManagerPeer.java libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDKeyboardFocusManagerPeer.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java	2013-07-26 18:40:43.559129723 +0200
-@@ -0,0 +1,121 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  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.peer;
-+
-+import java.awt.Component;
-+import java.awt.KeyboardFocusManager;
-+import java.awt.Window;
-+import java.lang.reflect.Field;
-+
-+public class BDKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer {
-+    private static boolean java7 = false;
-+    static BDKeyboardFocusManagerPeer instance = null;
-+
-+    /* used in java 7 only */
-+    public static KeyboardFocusManagerPeer getInstance() {
-+        java7 = true;
-+
-+        if (instance == null) {
-+            instance = new BDKeyboardFocusManagerPeer();
-+        }
-+        return instance;
-+    }
-+
-+    public static void shutdown()
-+    {
-+        if (instance != null) {
-+            instance.dispose();
-+            instance = null;
-+        }
-+    }
-+
-+    public static void init(Window window)
-+    {
-+        /* running in java 7 ? */
-+        if (java7 == true)
-+            return;
-+
-+        if (instance == null)
-+            instance = new BDKeyboardFocusManagerPeer();
-+        instance.focusOwner = null;
-+        instance.window = window;
-+
-+        /* replace default keyboard focus manager peer */
-+        Field kbPeer;
-+        try {
-+            Class c = Class.forName("java.awt.KeyboardFocusManager");
-+            kbPeer = c.getDeclaredField("peer");
-+            kbPeer.setAccessible(true);
-+        } catch (ClassNotFoundException e) {
-+            throw new Error("java.awt.KeyboardFocusManager not found");
-+        } catch (SecurityException e) {
-+            throw new Error("java.awt.KeyboardFocusManager not accessible");
-+        } catch (NoSuchFieldException e) {
-+            throw new Error("java.awt.KeyboardFocusManager.peer not found");
-+        }
-+        try {
-+            kbPeer.set(KeyboardFocusManager.getCurrentKeyboardFocusManager(),
-+                       instance);
-+        } catch (java.lang.IllegalAccessException e) {
-+            throw new Error("java.awt.KeyboardFocusManager.peer not accessible:" + e);
-+        }
-+    }
-+
-+    private Component focusOwner = null;
-+    private Window window = null; /* used in java 6 only */
-+    private boolean disposed = false;
-+
-+    public void dispose()
-+    {
-+        focusOwner = null;
-+        window = null;
-+        disposed = true;
-+    }
-+
-+    private BDKeyboardFocusManagerPeer() {
-+    }
-+
-+    public void clearGlobalFocusOwner(Window w) {
-+    }
-+
-+    public Component getCurrentFocusOwner() {
-+        return focusOwner;
-+    }
-+
-+    public void setCurrentFocusOwner(Component c) {
-+        if (!disposed) {
-+            focusOwner = c;
-+        }
-+    }
-+
-+    /* java 6 only */
-+    public void setCurrentFocusedWindow(Window w) {
-+        if (!disposed) {
-+            window = w;
-+        }
-+    }
-+
-+    /* java 6 only */
-+    public Window getCurrentFocusedWindow() {
-+        return window;
-+    }
-+};
-+
-+
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDLightweightComponentPeer.java libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDLightweightComponentPeer.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/java/awt/peer/BDLightweightComponentPeer.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/java/awt/peer/BDLightweightComponentPeer.java	2013-07-26 18:40:43.559129723 +0200
-@@ -0,0 +1,30 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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.peer;
-+
-+import java.awt.Toolkit;
-+import java.awt.Component;
-+
-+public abstract class BDLightweightComponentPeer extends BDComponentPeer implements LightweightPeer
-+{
-+    public BDLightweightComponentPeer(Toolkit toolkit, Component component) {
-+        super(toolkit, component);
-+    }
-+}
-\ Brak znaku nowej linii na ko�cu pliku
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/org/dvb/io/ixc/IxcRegistry.java libbluray/src/libbluray/bdj/java-j2se/org/dvb/io/ixc/IxcRegistry.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/org/dvb/io/ixc/IxcRegistry.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/org/dvb/io/ixc/IxcRegistry.java	2013-07-26 19:56:40.245605159 +0200
-@@ -0,0 +1,204 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2010  William Hahne
-+ *
-+ * 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 org.dvb.io.ixc;
-+
-+import java.rmi.RemoteException;
-+import java.rmi.NotBoundException;
-+import java.rmi.AlreadyBoundException;
-+import java.rmi.Remote;
-+import java.util.ArrayList;
-+import java.util.Collections;
-+import java.util.List;
-+
-+import javax.tv.xlet.XletContext;
-+
-+import org.dvb.application.AppID;
-+import org.dvb.application.AppProxy;
-+import org.dvb.application.AppsDatabase;
-+
-+import org.videolan.BDJXletContext;
-+import org.videolan.Logger;
-+
-+public class IxcRegistry {
-+    public static Remote lookup(XletContext xc, String path) throws NotBoundException, RemoteException {
-+        logger.info("Lookup " + path);
-+        logger.warning("Lookup does not create proxy object !");
-+        int orgid, appid;
-+        int s1, s2;
-+        String name;
-+        logger.info("Lookup " + path);
-+        if (path.charAt(0) != '/')
-+            throw new IllegalArgumentException();
-+        s1 = path.indexOf('/', 1);
-+        if (s1 <= 1)
-+            throw new IllegalArgumentException();
-+        try {
-+            orgid = Integer.parseInt(path.substring(1, s1), 16);
-+        } catch (Exception e) {
-+            throw new IllegalArgumentException();
-+        }
-+        s1++;
-+        s2 = path.indexOf('/', s1);
-+        if (s2 <= s1)
-+            throw new IllegalArgumentException();
-+        try {
-+            appid = Integer.parseInt(path.substring(s1, s2), 16);
-+        } catch (Exception e) {
-+            throw new IllegalArgumentException();
-+        }
-+        name = path.substring(s2 + 1, path.length());
-+        String key = "/" + Integer.toHexString(orgid) +
-+                "/" + Integer.toHexString(appid) +
-+                "/" + name;
-+
-+        logger.info("Lookup " + key + " - path OK");
-+        /*
-+        String[] parts = path.split("/", 3);
-+
-+        if (parts.length != 3)
-+            throw new IllegalArgumentException("Malformed path");
-+
-+        int orgId = Integer.parseInt(parts[0], 16);
-+        short appId = Short.parseShort(parts[1], 16);
-+        String name = parts[2];
-+
-+        for (int i = 0; i < ixcList.size(); i++) {
-+            IxcObject obj = (IxcObject)ixcList.get(i);
-+            if (obj.orgId == orgId && obj.appId == appId && obj.name.equals(name)) {
-+                logger.info("Looked up " + path);
-+                return obj.obj;
-+            }
-+        }
-+        */
-+        logger.warning("Failed to look up " + path);
-+        throw new NotBoundException();
-+    }
-+
-+    public static void bind(XletContext xc, String name, Remote obj) throws AlreadyBoundException {
-+        logger.info("Bind " + name);
-+        if (xc == null || name == null || obj == null)
-+            throw new NullPointerException();
-+
-+        // make sure the xlet is not currently in the destroyed state
-+        String orgid = (String)xc.getXletProperty("dvb.org.id");
-+        String appid = (String)xc.getXletProperty("dvb.app.id");
-+        AppID id = new AppID(Integer.parseInt(orgid, 16), Integer.parseInt(appid, 16));
-+        if (AppsDatabase.getAppsDatabase().getAppProxy(id).getState() == AppProxy.DESTROYED)
-+            return;
-+
-+        int orgId = id.getOID();
-+        int iappId = id.getAID();
-+        int appId = iappId;
-+
-+        IxcObject ixcObj = new IxcObject(orgId, appId, name, obj);
-+
-+        if (ixcList.contains(ixcObj))
-+            throw new AlreadyBoundException();
-+
-+        ixcList.add(ixcObj);
-+
-+        logger.info("Bound /" + orgid + "/" + appid + "/" + name);
-+    }
-+
-+    public static void unbind(XletContext xc, String name) throws NotBoundException {
-+        logger.info("Unbind " + name);
-+        if (xc == null || name == null)
-+            throw new NullPointerException();
-+
-+        String orgid = (String)xc.getXletProperty("dvb.org.id");
-+        String appid = (String)xc.getXletProperty("dvb.app.id");
-+        int orgId = Integer.parseInt(orgid, 16);
-+        int iappId = Integer.parseInt(appid, 16);
-+        short appId = (short)iappId;
-+
-+        IxcObject ixcObj = new IxcObject(orgId, appId, name, null);
-+
-+        if (!ixcList.contains(ixcObj))
-+            throw new NotBoundException();
-+
-+        ixcList.remove(ixcObj);
-+
-+        logger.info("Unbound /" + Integer.toString(orgId, 16) + "/" + Integer.toString(appId, 16) + "/" + name);
-+    }
-+
-+    public static void rebind(XletContext xc, String name, Remote obj) {
-+        try {
-+            unbind(xc, name);
-+        } catch (NotBoundException e) {
-+            // ignore
-+        }
-+
-+        try {
-+            bind(xc, name, obj);
-+        } catch (AlreadyBoundException e) {
-+            logger.warning("rebind should never encounter an AlreadyBoundException, something is wrong here.");
-+            e.printStackTrace();
-+        }
-+    }
-+
-+    public static String[] list(XletContext xc) {
-+        String[] out = new String[ixcList.size()];
-+
-+        for (int i = 0; i < ixcList.size(); i++) {
-+            IxcObject obj = (IxcObject)ixcList.get(i);
-+
-+            out[i] = "/" + Integer.toString(obj.orgId, 16) + "/" + Integer.toString(obj.appId, 16) + "/" + obj.name;
-+        }
-+
-+        return out;
-+    }
-+
-+    private static class IxcObject {
-+        public IxcObject(int orgId, int appId, String name, Remote obj) {
-+            this.orgId = orgId;
-+            this.appId = appId;
-+            this.name = name;
-+            this.obj = obj;
-+        }
-+
-+        public boolean equals(Object obj) {
-+            if (this == obj)
-+                return true;
-+            if (obj == null)
-+                return false;
-+            if (getClass() != obj.getClass())
-+                return false;
-+            IxcObject other = (IxcObject) obj;
-+            if (appId != other.appId)
-+                return false;
-+            if (name == null) {
-+                if (other.name != null)
-+                    return false;
-+            } else if (!name.equals(other.name))
-+                return false;
-+            if (orgId != other.orgId)
-+                return false;
-+            return true;
-+        }
-+
-+        public int orgId;
-+        public int appId;
-+        public String name;
-+        public Remote obj;
-+    }
-+
-+    private static List ixcList = Collections.synchronizedList(new ArrayList());
-+    private static Logger logger = Logger.getLogger(IxcRegistry.class.getName());
-+}
-diff -Nur libbluray/src/libbluray/bdj/java-j2se.orig/org/dvb/ui/DVBGraphicsImpl.java libbluray/src/libbluray/bdj/java-j2se/org/dvb/ui/DVBGraphicsImpl.java
---- libbluray/src/libbluray/bdj/java-j2se.orig/org/dvb/ui/DVBGraphicsImpl.java	1970-01-01 01:00:00.000000000 +0100
-+++ libbluray/src/libbluray/bdj/java-j2se/org/dvb/ui/DVBGraphicsImpl.java	2013-07-26 18:40:43.559129723 +0200
-@@ -0,0 +1,512 @@
-+/*
-+ * This file is part of libbluray
-+ * Copyright (C) 2012  libbluray
-+ *
-+ * 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 org.dvb.ui;
-+
-+import java.awt.Color;
-+import java.awt.Composite;
-+import java.awt.Font;
-+import java.awt.FontMetrics;
-+import java.awt.Graphics;
-+import java.awt.Graphics2D;
-+import java.awt.GraphicsConfiguration;
-+import java.awt.Image;
-+import java.awt.Paint;
-+import java.awt.Polygon;
-+import java.awt.Rectangle;
-+import java.awt.RenderingHints;
-+import java.awt.Shape;
-+import java.awt.Stroke;
-+import java.awt.font.FontRenderContext;
-+import java.awt.font.GlyphVector;
-+import java.awt.geom.AffineTransform;
-+import java.awt.image.BufferedImage;
-+import java.awt.image.BufferedImageOp;
-+import java.awt.image.ImageObserver;
-+import java.awt.image.RenderedImage;
-+import java.awt.image.renderable.RenderableImage;
-+import java.text.AttributedCharacterIterator;
-+import java.util.Map;
-+
-+public class DVBGraphicsImpl extends DVBGraphics {
-+    protected DVBGraphicsImpl(Graphics2D gfx)
-+    {
-+        super(gfx);
-+    }
-+
-+    /*
-+     * Graphics methods
-+     */
-+    public void clearRect(int x, int y, int width, int height)
-+    {
-+        gfx.clearRect(x, y, width, height);
-+    }
-+
-+    public void clipRect(int x, int y, int width, int height)
-+    {
-+        gfx.clipRect(x, y, width, height);
-+    }
-+
-+    public void copyArea(int x, int y, int width, int height, int dx, int dy)
-+    {
-+        gfx.copyArea(x, y, width, height, dx, dy);
-+    }
-+
-+    public Graphics create()
-+    {
-+        return gfx.create();
-+    }
-+
-+    public Graphics create(int x, int y, int width, int height)
-+    {
-+        return gfx.create(x, y, width, height);
-+    }
-+
-+    public void dispose()
-+    {
-+        gfx.dispose();
-+    }
-+
-+    public void draw3DRect(int x, int y, int width, int height, boolean raised)
-+    {
-+        gfx.draw3DRect(x, y, width, height, raised);
-+    }
-+
-+    public void drawArc(int x, int y, int width, int height, int startAngle,
-+            int arcAngle)
-+    {
-+        gfx.drawArc(x, y, width, height, startAngle, arcAngle);
-+    }
-+
-+    public void drawBytes(byte[] data, int offset, int length, int x, int y)
-+    {
-+        gfx.drawBytes(data, offset, length, x, y);
-+    }
-+
-+    public void drawChars(char[] data, int offset, int length, int x, int y)
-+    {
-+        gfx.drawChars(data, offset, length, x, y);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, Color bgcolor,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, int width, int height,
-+            Color bgcolor, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, width, height, bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int x, int y, int width, int height,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, x, y, width, height, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
-+            int sx1, int sy1, int sx2, int sy2, Color bgcolor,
-+            ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
-+                             bgcolor, observer);
-+    }
-+
-+    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
-+            int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
-+    {
-+        return gfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
-+                             observer);
-+    }
<Skipped 527 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/libbluray.git/commitdiff/70fa2b1a399e25dfa1d3e7d8de44bdc19ab7dfeb




More information about the pld-cvs-commit mailing list