libbluray | branch: master | Ian Curtis <[email protected]> | Wed Mar 26 00:41:48 2014 +0200| [6a297cc4ecaad5808b68efac53866753f015159f] | committer: hpi1
BDGraphics: Improved drawOval() and fillOval() > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=6a297cc4ecaad5808b68efac53866753f015159f --- .../bdj/java-j2me/java/awt/BDGraphics.java | 76 ++++++++++++++++---- .../bdj/java-j2se/java/awt/BDGraphics.java | 76 ++++++++++++++++---- 2 files changed, 122 insertions(+), 30 deletions(-) diff --git a/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java b/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java index a2c2530..e5c4f9f 100644 --- a/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java +++ b/src/libbluray/bdj/java-j2me/java/awt/BDGraphics.java @@ -630,31 +630,77 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics { /** Draws an oval to fit in the given rectangle */ public void drawOval(int x, int y, int w, int h) { - float angleIncriment = 180 / h; - int rgb = foreground.getRGB(); + int startX; + int endX; + int offset; + int[] xList; + int[] yList; + int numPoints; + int count; + float as; + float bs; + + if (w <= 0 || h <=0 ) { + return; + } - for (int i = 0; i < h; i++) { - int offset = (int) (w/2 * Math.sin(angleIncriment*i)); - int startX = x + w/2 - offset; - int endX = x + w/2 + offset; + count = 0; + numPoints = ((h/2) + (h/2) + 1) * 2; + numPoints += 1; // to close + xList = new int[numPoints]; + yList = new int[numPoints]; + + as = (w/2.0f) * (w/2.0f); + bs = (h/2.0f) * (h/2.0f); + + for (int i = -h/2; i <= h/2; i++) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + startX = x - offset + w/2; + + xList[count] = startX; + yList[count] = y + i + h/2; + count++; + } + + for (int i = h/2; i >= -h/2; i--) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + endX = x + offset + w/2; - drawPoint(startX, y + i, rgb); - drawPoint(endX, y + i, rgb); + xList[count] = endX; + yList[count] = y + i + h/2; + count++; } + + xList[count] = xList[0]; // close the loop + yList[count] = yList[0]; // close the loop + + drawPolyline(xList, yList, numPoints); } /** Fills an oval to fit in the given rectangle */ public void fillOval(int x, int y, int w, int h) { - float angleIncriment = angleIncriment = 180 / h; - int rgb = foreground.getRGB(); + int startX; + int endX; + int offset; + int colour; + float as; + float bs; - for (int i = 0; i < h; i++) { - int offset = (int) (w/2 * Math.sin(angleIncriment*i)); - int startX = x + w/2 - offset; - int endX = x + w/2 + offset; + if (w <= 0 || h <= 0) { + return; + } + + as = (w/2.0f) * (w/2.0f); + bs = (h/2.0f) * (h/2.0f); + colour = foreground.getRGB(); + + for(int i=-h/2; i<=h/2; i++) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + startX = x - offset + w/2; + endX = x + offset + w/2; - drawSpan(startX, y + i, endX - startX, rgb); + drawSpan(startX, y + i + h/2, endX - startX + 1, colour); } } diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java index bc1016b..2056dc5 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java +++ b/src/libbluray/bdj/java-j2se/java/awt/BDGraphics.java @@ -713,31 +713,77 @@ class BDGraphics extends Graphics2D implements ConstrainableGraphics { /** Draws an oval to fit in the given rectangle */ public void drawOval(int x, int y, int w, int h) { - float angleIncriment = 180 / h; - int rgb = foreground.getRGB(); + int startX; + int endX; + int offset; + int[] xList; + int[] yList; + int numPoints; + int count; + float as; + float bs; + + if (w <= 0 || h <=0 ) { + return; + } - for (int i = 0; i < h; i++) { - int offset = (int) (w/2 * Math.sin(angleIncriment*i)); - int startX = x + w/2 - offset; - int endX = x + w/2 + offset; + count = 0; + numPoints = ((h/2) + (h/2) + 1) * 2; + numPoints += 1; // to close + xList = new int[numPoints]; + yList = new int[numPoints]; + + as = (w/2.0f) * (w/2.0f); + bs = (h/2.0f) * (h/2.0f); + + for (int i = -h/2; i <= h/2; i++) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + startX = x - offset + w/2; + + xList[count] = startX; + yList[count] = y + i + h/2; + count++; + } + + for (int i = h/2; i >= -h/2; i--) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + endX = x + offset + w/2; - drawPoint(startX, y + i, rgb); - drawPoint(endX, y + i, rgb); + xList[count] = endX; + yList[count] = y + i + h/2; + count++; } + + xList[count] = xList[0]; // close the loop + yList[count] = yList[0]; // close the loop + + drawPolyline(xList, yList, numPoints); } /** Fills an oval to fit in the given rectangle */ public void fillOval(int x, int y, int w, int h) { - float angleIncriment = angleIncriment = 180 / h; - int rgb = foreground.getRGB(); + int startX; + int endX; + int offset; + int colour; + float as; + float bs; - for (int i = 0; i < h; i++) { - int offset = (int) (w/2 * Math.sin(angleIncriment*i)); - int startX = x + w/2 - offset; - int endX = x + w/2 + offset; + if (w <= 0 || h <= 0) { + return; + } + + as = (w/2.0f) * (w/2.0f); + bs = (h/2.0f) * (h/2.0f); + colour = foreground.getRGB(); + + for(int i=-h/2; i<=h/2; i++) { + offset = (int) Math.sqrt( (1.0 - ((i*i)/bs)) * as ); + startX = x - offset + w/2; + endX = x + offset + w/2; - drawSpan(startX, y + i, endX - startX, rgb); + drawSpan(startX, y + i + h/2, endX - startX + 1, colour); } } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
