You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/12/24 16:05:24 UTC
svn commit: r606703 - in
/harmony/enhanced/classlib/trunk/modules/awt/src/main:
java/unix/org/apache/harmony/awt/gl/linux/ native/gl/unix/
native/gl/unix/include/
Author: apavlenko
Date: Mon Dec 24 07:05:23 2007
New Revision: 606703
URL: http://svn.apache.org/viewvc?rev=606703&view=rev
Log:
Patch for HARMONY-5338: [classlib][awt] Performance improvement for XGraphics2D
Added:
harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp (with props)
harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/
harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h (with props)
Modified:
harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt
harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile
Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java?rev=606703&r1=606702&r2=606703&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/unix/org/apache/harmony/awt/gl/linux/XGraphics2D.java Mon Dec 24 07:05:23 2007
@@ -62,10 +62,14 @@
boolean nativeLines = true;
boolean nativePaint = true;
boolean transparentColor = false;
- boolean scalingTransform = false;
boolean simpleComposite = true;
+ boolean xor_mode = false;
boolean indexModel = false;
+
+ static{
+ System.loadLibrary("gl");
+ }
public XGraphics2D(long drawable, int tx, int ty, MultiRectArea clip) {
super(tx, ty, clip);
@@ -125,8 +129,8 @@
return draw;
}
- private static final long createGC(long display, long win) {
- return x11.XCreateGC(display, win, 0, 0);
+ private final long createGC(long display, long win) {
+ return createGC(display, win, 0L, 0L);
}
public GraphicsConfiguration getDeviceConfiguration() {
@@ -138,7 +142,7 @@
x += transform.getTranslateX();
y += transform.getTranslateY();
- x11.XCopyArea(display, drawable, drawable, gc, x, y, width, height, dx+x, dy+y);
+ copyArea(display, drawable, drawable, gc, x, y, width, height, dx+x, dy+y);
}
// Caller should free native pointer to rects after using it
@@ -159,18 +163,6 @@
return x11.createXRectangle(rects);
}
- protected void fillMultiRectAreaColor(MultiRectArea mra) {
- if (transparentColor || !simpleComposite) {
- super.fillMultiRectAreaColor(mra);
- } else {
- int vertices[] = mra.rect;
- int nRects = (vertices[0]-1) >> 2;
- X11.XRectangle xRects = createXRects(vertices);
- x11.XFillRectangles(display, drawable, gc, xRects, nRects);
- xRects.free();
- }
- }
-
public void setPaint(Paint paint) {
if (paint == null)
return;
@@ -211,22 +203,8 @@
argb_val = icm.getRGB(pixel);
}
- short xRed = (short) ((argb_val & 0x00FF0000) >> 8);
- short xGreen = (short) (argb_val & 0x0000FF00);
- short xBlue = (short) ((argb_val & 0x000000FF) << 8);
-
- // Create XColor
- X11.XColor xcolor = x11.createXColor(true);
- xcolor.set_red(xRed);
- xcolor.set_green(xGreen);
- xcolor.set_blue(xBlue);
-
- // Allocate cmap cell
- x11.XAllocColor(display, xConfig.xcolormap, xcolor);
- x11.XSetForeground(display, gc, xcolor.get_pixel());
+ setForeground(display, gc, xConfig.xcolormap, argb_val);
- // Cleanup
- xcolor.free();
}
public void dispose() {
@@ -238,11 +216,11 @@
}
if (gc != 0) {
- x11.XFreeGC(display, gc);
+ freeGC(display, gc);
gc = 0;
}
if (imageGC != 0) {
- x11.XFreeGC(display, imageGC);
+ freeGC(display, imageGC);
imageGC = 0;
}
}
@@ -251,15 +229,14 @@
if (mra == null) {
resetXClip(gc);
} else {
- int nRects = mra.getRectCount();
- X11.XRectangle xrects = createXRects(mra.rect);
- x11.XSetClipRectangles(display, gc, 0, 0, xrects, nRects, X11Defs.Unsorted);
- xrects.free();
+ int vertices[] = mra.rect;
+ int numVert = vertices[0] - 1;
+ setClipRectangles(display, gc, 0, 0, vertices, numVert);
}
}
void resetXClip(long gc) {
- x11.XSetClipMask(display, gc, X11Defs.None);
+ setClipMask(display, gc, X11Defs.None);
}
void setXftClip(MultiRectArea mra) {
@@ -288,10 +265,11 @@
}
void setGCFunction(int func) {
- x11.XSetFunction(display, gc, func);
+ setFunction(display, gc, func);
}
+
void setImageGCFunction(int func) { // Note: works with imageGC
- x11.XSetFunction(display, imageGC, func);
+ setFunction(display, imageGC, func);
}
Surface getSurface() {
@@ -307,51 +285,26 @@
return;
}
- X11.XGCValues gcVals = x11.createXGCValues(true);
- gcVals.set_line_width(Math.round(bs.getLineWidth()));
- gcVals.set_join_style(bs.getLineJoin());
- gcVals.set_cap_style(bs.getEndCap()+1);
- gcVals.set_dash_offset(Math.round(bs.getDashPhase()));
-
- int n = 0;
-
- if (bs.getDashArray() == null) {
- gcVals.set_line_style(X11Defs.LineSolid);
- gcVals.set_dashes((byte)1);
- } else {
- gcVals.set_line_style(X11Defs.LineOnOffDash);
-
- n = bs.getDashArray().length;
+ int line_width = (int)(bs.getLineWidth() + 0.5f);
+ int join_style = bs.getLineJoin();
+ int cap_style = bs.getEndCap()+1;
+ int dash_offset = (int)(bs.getDashPhase() + 0.5f);
+
+ float fdashes[] = bs.getDashArray();
+
+ int len = 0;
+ byte bdashes[] = null;
+
+ if(fdashes != null){
+ len = fdashes.length;
+ bdashes = new byte[len];
- if (n == 1) {
- gcVals.set_dashes((byte)Math.round(bs.getDashArray()[0]));
- } else {
- long dashList = Utils.memaccess.malloc(n);
- float[] dashArray = bs.getDashArray();
- for (int i = 0; i < n; i++) {
- Utils.memaccess.setByte(dashList+i, (byte) Math.round(dashArray[i]));
- }
- x11.XSetDashes(
- display,
- gc,
- Math.round(bs.getDashPhase()),
- dashList,
- bs.getDashArray().length
- );
- Utils.memaccess.free(dashList);
+ for(int i = 0; i < len; i++){
+ bdashes[i] = (byte)(fdashes[i] + 0.5f);
}
}
- x11.XChangeGC(
- display,
- gc,
- X11Defs.GCLineWidth | X11Defs.GCJoinStyle |
- X11Defs.GCCapStyle | X11Defs.GCDashOffset |
- X11Defs.GCLineStyle | (n==1 ? X11Defs.GCDashList : 0),
- gcVals
- );
-
- gcVals.free();
+ setStroke(display, gc, line_width, join_style, cap_style, dash_offset, bdashes, len);
nativeLines = true;
} else {
@@ -361,225 +314,480 @@
public void setTransform(AffineTransform transform) {
super.setTransform(transform);
+ }
+
+ public void drawLine(int x1, int y1, int x2, int y2) {
+ if (
+ nativeLines && nativePaint &&
+ !transparentColor && simpleComposite
+ ) {
+ int type = transform.getType();
+ if (type < 2) {
+
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+
+ x1 += tx;
+ y1 += ty;
+ x2 += tx;
+ y2 += ty;
+
+ drawLine(display, drawable, gc, x1, y1, x2, y2);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ drawLine(display, drawable, gc, x1, y1, x2, y2);
+ xSetForeground(fgColor.getRGB());
+ }
+ } else {
+
+ float points[] = new float[]{x1, y1, x2, y2};
+ transform.transform(points, 0, points, 0, 2);
- if ((transform.getType() & AffineTransform.TYPE_MASK_SCALE) != 0) {
- scalingTransform = true;
+ x1 = (int)points[0];
+ y1 = (int)points[1];
+ x2 = (int)points[2];
+ y2 = (int)points[3];
+
+ drawLine(display, drawable, gc, x1, y1, x2, y2);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ drawLine(display, drawable, gc, x1, y1, x2, y2);
+ xSetForeground(fgColor.getRGB());
+ }
+ }
} else {
- scalingTransform = false;
+ super.drawLine(x1, y1, x2, y2);
}
}
- public void drawLine(int x1, int y1, int x2, int y2) {
+ @Override
+ public void drawPolyline(int[] xpoints, int[] ypoints, int npoints) {
if (
nativeLines && nativePaint &&
- !scalingTransform && !transparentColor &&
- simpleComposite
+ !transparentColor && simpleComposite
) {
- float points[] = new float[]{x1, y1, x2, y2};
- transform.transform(points, 0, points, 0, 2);
- x11.XDrawLine(
- display,
- drawable,
- gc,
- (int) points[0], (int) points[1],
- (int) points[2], (int) points[3]
- );
- if (composite instanceof XORComposite) {
+
+ short points[] = new short[npoints << 1];
+
+ int type = transform.getType();
+ if (type < 2) {
+
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+
+ for (int idx = 0, i = 0; i < npoints; i++){
+ points[idx++] = (short)(xpoints[i] + tx);
+ points[idx++] = (short)(ypoints[i] + ty);
+ }
+
+ drawLines(display, drawable, gc, points, points.length);
+ } else {
+
+ float fpoints[] = new float[npoints << 1];
+
+ for (int idx = 0, i = 0; i < npoints; i++){
+ fpoints[idx++] = xpoints[i];
+ fpoints[idx++] = ypoints[i];
+ }
+
+ transform.transform(fpoints, 0, fpoints, 0, npoints);
+ for (int i = 0; i < fpoints.length; i++)
+ points[i] = (short)(fpoints[i] + 0.5f);
+
+ drawLines(display, drawable, gc, points, points.length);
+ }
+
+ if (xor_mode) {
XORComposite xor = (XORComposite)composite;
Color xorcolor = xor.getXORColor();
xSetForeground(xorcolor.getRGB());
- x11.XDrawLine(
- display,
- drawable,
- gc,
- (int) points[0], (int) points[1],
- (int) points[2], (int) points[3]
- );
+ drawLines(display, drawable, gc, points, points.length);
xSetForeground(fgColor.getRGB());
}
} else {
- super.drawLine(x1, y1, x2, y2);
+ super.drawPolyline(xpoints, ypoints, npoints);
}
}
+ @Override
public void drawPolygon(int[] xpoints, int[] ypoints, int npoints) {
if (
nativeLines && nativePaint &&
- !scalingTransform && !transparentColor &&
- simpleComposite
+ !transparentColor && simpleComposite
) {
- float points[] = new float[npoints<<1];
- int i;
- for (i = 0; i < npoints; i++) {
- points[i<<1] = xpoints[i];
- points[(i<<1) + 1] = ypoints[i];
- }
- transform.transform(points, 0, points, 0, npoints);
-
- // Create XPoint's
- long xPoints = Utils.memaccess.malloc((npoints+1) << 2); // sizeof XPoint = 4
- long ptr = xPoints;
-
- for (i = 0; i < npoints; i++) {
- Utils.memaccess.setShort(ptr, (short) points[i<<1]);
- Utils.memaccess.setShort(ptr+2, (short) points[(i<<1)+1]);
- ptr += 4; // sizeof XPoint = 4
- }
- // Add first point again to close path
- Utils.memaccess.setShort(ptr, (short) points[0]);
- Utils.memaccess.setShort(ptr+2, (short) points[1]);
- x11.XDrawLines(
- display,
- drawable,
- gc,
- xPoints,
- npoints+1,
- X11Defs.CoordModeOrigin
- );
+ short points[] = new short[(npoints << 1) + 2];
- if (composite instanceof XORComposite) {
+ int type = transform.getType();
+ if (type < 2) {
+
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+
+ int idx = 0;
+ for (int i = 0; i < npoints; i++){
+ points[idx++] = (short)(xpoints[i] + tx);
+ points[idx++] = (short)(ypoints[i] + ty);
+ }
+ points[idx++] = (short)(xpoints[0] + tx);
+ points[idx++] = (short)(ypoints[0] + ty);
+
+ drawLines(display, drawable, gc, points, points.length);
+ } else {
+
+ float fpoints[] = new float[npoints << 1];
+
+ for (int idx = 0, i = 0; i < npoints; i++){
+ fpoints[idx++] = xpoints[i];
+ fpoints[idx++] = ypoints[i];
+ }
+
+ transform.transform(fpoints, 0, fpoints, 0, npoints);
+ int i = 0;
+ for (; i < fpoints.length; i++)
+ points[i] = (short)(fpoints[i] + 0.5f);
+ points[i++] = (short)(fpoints[0] + 0.5f);
+ points[i++] = (short)(fpoints[1] + 0.5f);
+
+ drawLines(display, drawable, gc, points, points.length);
+ }
+
+ if (xor_mode) {
XORComposite xor = (XORComposite)composite;
Color xorcolor = xor.getXORColor();
xSetForeground(xorcolor.getRGB());
- x11.XDrawLines(
- display,
- drawable,
- gc,
- xPoints,
- npoints+1,
- X11Defs.CoordModeOrigin
- );
+ drawLines(display, drawable, gc, points, points.length);
xSetForeground(fgColor.getRGB());
}
-
- Utils.memaccess.free(xPoints);
} else {
super.drawPolygon(xpoints, ypoints, npoints);
}
}
+ @Override
public void drawPolygon(Polygon polygon) {
drawPolygon(polygon.xpoints, polygon.ypoints, polygon.npoints);
}
- public void drawPolyline(int[] xpoints, int[] ypoints, int npoints) {
+ @Override
+ public void drawRect(int x, int y, int width, int height) {
if (
nativeLines && nativePaint &&
- !scalingTransform && !transparentColor &&
- simpleComposite
+ !transparentColor && simpleComposite
) {
- float points[] = new float[npoints<<1];
- for (int i = 0; i < npoints; i++) {
- points[i<<1] = xpoints[i];
- points[(i<<1) + 1] = ypoints[i];
- }
- transform.transform(points, 0, points, 0, npoints);
+ int type = transform.getType();
+ if (type < 2) {
+ x += (int)transform.getTranslateX();
+ y += (int)transform.getTranslateY();
+ drawRectangle(display, drawable, gc, x, y, width, height);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ drawRectangle(display, drawable, gc, x, y, width, height);
+ xSetForeground(fgColor.getRGB());
+ }
+
+ } else if (type < 7) {
+ float points[] = new float[]{x, y, x + width - 1, y + height - 1};
+ transform.transform(points, 0, points, 0, 2);
+
+ if (points[0] < points[2]){
+ x = (int)points[0];
+ width = (int)(points[2] - points[0]) + 1;
+ } else {
+ x = (int)points[2];
+ width = (int)(points[0] - points[2]) + 1;
+ }
+
+ if (points[1] < points[3]){
+ y = (int)points[1];
+ height = (int)(points[3] - points[1]) + 1;
+ } else {
+ y = (int)points[3];
+ height = (int)(points[1] - points[3]) + 1;
+ }
- // Create XPoint's
- long xPoints = Utils.memaccess.malloc((npoints) << 2); // sizeof XPoint = 4
- long ptr = xPoints;
+ drawRectangle(display, drawable, gc, x, y, width, height);
- for (int i = 0; i < npoints; i++) {
- Utils.memaccess.setShort(ptr, (short) points[i<<1]);
- Utils.memaccess.setShort(ptr+2, (short) points[(i<<1)+1]);
- ptr += 4; // sizeof XPoint = 4
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ drawRectangle(display, drawable, gc, x, y, width, height);
+ xSetForeground(fgColor.getRGB());
+ }
+ } else {
+ float fpoints[] = new float[]{x, y, x + width - 1, y, x + width - 1, y + height - 1, x, y + height - 1};
+ transform.transform(fpoints, 0, fpoints, 0, 4);
+
+ short points[] = new short[fpoints.length + 2];
+
+ int i = 0;
+ for (; i < fpoints.length; i++)
+ points[i] = (short)(fpoints[i] + 0.5f);
+ points[i++] = (short)(fpoints[0] + 0.5f);
+ points[i++] = (short)(fpoints[1] + 0.5f);
+
+ drawLines(display, drawable, gc, points, points.length);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ drawLines(display, drawable, gc, points, points.length);
+ xSetForeground(fgColor.getRGB());
+ }
}
+ } else {
+ super.drawRect(x, y, width, height);
+ }
+ }
- x11.XDrawLines(
+ @Override
+ public void drawArc(int x, int y, int width, int height, int sa, int ea) {
+ if (
+ nativeLines && nativePaint &&
+ !transparentColor && simpleComposite &&
+ transform.getType() < 2
+ ) {
+ x += (int)transform.getTranslateX();
+ y += (int)transform.getTranslateY();
+ drawArc(
display,
drawable,
gc,
- xPoints,
- npoints,
- X11Defs.CoordModeOrigin
+ x, y,
+ width, height,
+ sa << 6, ea << 6
);
- if (composite instanceof XORComposite) {
+ if (xor_mode) {
XORComposite xor = (XORComposite)composite;
Color xorcolor = xor.getXORColor();
xSetForeground(xorcolor.getRGB());
- x11.XDrawLines(
+ drawArc(
display,
drawable,
gc,
- xPoints,
- npoints,
- X11Defs.CoordModeOrigin
+ x, y,
+ width, height,
+ sa << 6, ea << 6
);
xSetForeground(fgColor.getRGB());
}
+ } else {
+ super.drawArc(x, y, width, height, sa, ea);
+ }
+ }
+
+ @Override
+ public void drawOval(int x, int y, int width, int height) {
+ drawArc(x, y, width, height, 0, 360);
+ }
+
+ @Override
+ public void fillRect(int x, int y, int width, int height) {
+ if (
+ nativeLines && nativePaint &&
+ !transparentColor && simpleComposite
+ ) {
+ int type = transform.getType();
+ if (type < 2) {
+
+ x += (int)transform.getTranslateX();
+ y += (int)transform.getTranslateY();
+ fillRectangle(display, drawable, gc, x, y, width, height);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ fillRectangle(display, drawable, gc, x, y, width, height);
+ xSetForeground(fgColor.getRGB());
+ }
+
+ } else if (type < 7) {
+ float points[] = new float[]{x, y, x + width - 1, y + height - 1};
+ transform.transform(points, 0, points, 0, 2);
+
+ if (points[0] < points[2]){
+ x = (int)points[0];
+ width = (int)(points[2] - points[0]) + 1;
+ } else {
+ x = (int)points[2];
+ width = (int)(points[0] - points[2]) + 1;
+ }
+
+ if (points[1] < points[3]){
+ y = (int)points[1];
+ height = (int)(points[3] - points[1]) + 1;
+ } else {
+ y = (int)points[3];
+ height = (int)(points[1] - points[3]) + 1;
+ }
- Utils.memaccess.free(xPoints);
+ fillRectangle(display, drawable, gc, x, y, width, height);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ fillRectangle(display, drawable, gc, x, y, width, height);
+ xSetForeground(fgColor.getRGB());
+ }
+ } else {
+ float points[] = new float[]{x, y, x + width - 1, y, x + width - 1, y + height - 1, x, y + height - 1};
+ transform.transform(points, 0, points, 0, 4);
+
+ short spoints[] = new short[points.length];
+ for (int i = 0; i < points.length; i++)
+ spoints[i] = (short)(points[i] + 0.5f);
+ fillPolygon(display, drawable, gc, spoints, spoints.length);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ fillPolygon(display, drawable, gc, spoints, spoints.length);
+ xSetForeground(fgColor.getRGB());
+ }
+ }
} else {
- super.drawPolyline(xpoints, ypoints, npoints);
+ super.fill(new Rectangle(x, y, width, height));
}
}
- public void drawRect(int x, int y, int width, int height) {
+ protected void fillMultiRectAreaColor(MultiRectArea mra) {
+ if (
+ nativeLines && nativePaint &&
+ !transparentColor && simpleComposite
+ ) {
+ int vertices[] = mra.rect;
+ int numVert = vertices[0] - 1;
+ fillRectangles(display, drawable, gc, vertices, numVert);
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ fillRectangles(display, drawable, gc, vertices, numVert);
+ xSetForeground(fgColor.getRGB());
+ }
+ } else {
+ super.fillMultiRectAreaColor(mra);
+ }
+ }
+
+ @Override
+ public void fillPolygon(Polygon p) {
+ fillPolygon(p.xpoints, p.ypoints, p.npoints);
+ }
+
+ @Override
+ public void fillPolygon(int[] xpoints, int[] ypoints, int npoints ) {
if (
nativeLines && nativePaint &&
- !transparentColor && simpleComposite &&
- (transform.getType() & AffineTransform.TYPE_TRANSLATION) != 0
+ !transparentColor && simpleComposite
) {
- Point2D rectOrig = new Point2D.Float(x, y);
- transform.transform(rectOrig, rectOrig);
- x11.XDrawRectangle(
- display,
- drawable,
- gc,
- (int) rectOrig.getX(), (int) rectOrig.getY(),
- width, height
- );
+
+ short points[] = new short[npoints << 1];
+
+ int type = transform.getType();
+ if (type < 2) {
+
+ int tx = (int) transform.getTranslateX();
+ int ty = (int) transform.getTranslateY();
+
+ for (int idx = 0, i = 0; i < npoints; i++){
+ points[idx++] = (short)(xpoints[i] + tx);
+ points[idx++] = (short)(ypoints[i] + ty);
+ }
+
+ fillPolygon(display, drawable, gc, points, points.length);
+ } else {
+
+ float fpoints[] = new float[npoints << 1];
+
+ for (int idx = 0, i = 0; i < npoints; i++){
+ fpoints[idx++] = xpoints[i];
+ fpoints[idx++] = ypoints[i];
+
+ }
+ transform.transform(fpoints, 0, fpoints, 0, npoints);
+
+ for (int i = 0; i < fpoints.length; i++)
+ points[i] = (short)(fpoints[i] + 0.5f);
+
+ fillPolygon(display, drawable, gc, points, points.length);
+ }
+
+ if (xor_mode) {
+ XORComposite xor = (XORComposite)composite;
+ Color xorcolor = xor.getXORColor();
+ xSetForeground(xorcolor.getRGB());
+ fillPolygon(display, drawable, gc, points, points.length);
+ xSetForeground(fgColor.getRGB());
+ }
} else {
- super.drawRect(x, y, width, height);
+ super.fillPolygon(xpoints, ypoints, npoints);
}
}
- public void drawArc(int x, int y, int width, int height, int sa, int ea) {
+ @Override
+ public void fillArc(int x, int y, int width, int height, int sa, int ea) {
if (
nativeLines && nativePaint &&
- !scalingTransform && !transparentColor &&
- simpleComposite
+ !transparentColor && simpleComposite &&
+ transform.getType() < 2
) {
- Point2D orig = new Point2D.Float(x, y);
- transform.transform(orig, orig);
- x11.XDrawArc(
+ x += (int)transform.getTranslateX();
+ y += (int)transform.getTranslateY();
+ fillArc(
display,
drawable,
gc,
- (int) orig.getX(), (int) orig.getY(),
+ x, y,
width, height,
sa << 6, ea << 6
);
- if (composite instanceof XORComposite) {
+ if (xor_mode) {
XORComposite xor = (XORComposite)composite;
Color xorcolor = xor.getXORColor();
xSetForeground(xorcolor.getRGB());
- x11.XDrawArc(
+ fillArc(
display,
drawable,
gc,
- (int) orig.getX(), (int) orig.getY(),
+ x, y,
width, height,
sa << 6, ea << 6
);
xSetForeground(fgColor.getRGB());
}
} else {
- super.drawArc(x, y, width, height, sa, ea);
+ super.fillArc(x, y, width, height, sa, ea);
}
}
- public void drawOval(int x, int y, int width, int height) {
- drawArc(x, y, width, height, 0, 360);
+ @Override
+ public void fillOval(int x, int y, int width, int height) {
+ fillArc(x, y, width, height, 0, 360);
}
@Override
public void setXORMode(Color color) {
super.setXORMode(color);
- x11.XSetFunction(display, gc, X11Defs.GXxor);
+ setFunction(display, gc, X11Defs.GXxor);
+ xor_mode = true;
simpleComposite = true;
}
@@ -590,6 +798,7 @@
public void setComposite(Composite composite) {
super.setComposite(composite);
+ xor_mode = false;
if (composite instanceof AlphaComposite) {
AlphaComposite acomp = (AlphaComposite) composite;
int rule = acomp.getRule();
@@ -598,26 +807,26 @@
switch(rule){
case AlphaComposite.CLEAR:
case AlphaComposite.SRC_OUT:
- x11.XSetFunction(display, gc, X11Defs.GXclear);
+ setFunction(display, gc, X11Defs.GXclear);
simpleComposite = true;
break;
case AlphaComposite.SRC:
case AlphaComposite.SRC_IN:
- if(srca == 0.0f) x11.XSetFunction(display, gc, X11Defs.GXclear);
- else x11.XSetFunction(display, gc, X11Defs.GXcopy);
+ if(srca == 0.0f) setFunction(display, gc, X11Defs.GXclear);
+ else setFunction(display, gc, X11Defs.GXcopy);
simpleComposite = true;
break;
case AlphaComposite.DST:
case AlphaComposite.DST_OVER:
- x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ setFunction(display, gc, X11Defs.GXnoop);
simpleComposite = true;
break;
case AlphaComposite.SRC_ATOP:
case AlphaComposite.SRC_OVER:
- x11.XSetFunction(display, gc, X11Defs.GXcopy);
+ setFunction(display, gc, X11Defs.GXcopy);
if(srca == 1.0f){
simpleComposite = true;
}else{
@@ -628,9 +837,9 @@
case AlphaComposite.DST_IN:
case AlphaComposite.DST_ATOP:
if(srca != 0.0f){
- x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ setFunction(display, gc, X11Defs.GXnoop);
} else {
- x11.XSetFunction(display, gc, X11Defs.GXclear);
+ setFunction(display, gc, X11Defs.GXclear);
}
simpleComposite = true;
break;
@@ -638,9 +847,9 @@
case AlphaComposite.DST_OUT:
case AlphaComposite.XOR:
if(srca != 1.0f){
- x11.XSetFunction(display, gc, X11Defs.GXnoop);
+ setFunction(display, gc, X11Defs.GXnoop);
} else {
- x11.XSetFunction(display, gc, X11Defs.GXclear);
+ setFunction(display, gc, X11Defs.GXclear);
}
simpleComposite = true;
break;
@@ -706,4 +915,41 @@
this.fill(sh);
}
+
+ // Native methods
+
+ // GC methods
+ // Creating and Releasing
+ private native long createGC(long display, long drawable, long valuemask, long values);
+ private native int freeGC(long display, long gc);
+
+ // Setting GC function
+ private native int setFunction(long display, long gc, int func);
+
+ // Stroke (line attributes)
+ private native int setStroke(long display, long gc, int line_width, int join_style, int cap_style, int dash_offset, byte dashes[], int len);
+
+ // Foreground
+ private native int setForeground(long display, long gc, long colormap, int argb_val);
+
+ // Clipping
+ private native int setClipMask(long display, long gc, long pixmap);
+ private native int setClipRectangles(long display, long gc, int clip_x_origin, int clip_y_origin, int clip_rects[], int num_rects);
+
+ // Drawing methods
+
+ private native int drawArc(long display, long drawable, long gc, int x, int y, int width, int height, int startAngle, int angle);
+ private native int drawLine(long display, long drawable, long gc, int x1, int y1, int x2, int y2);
+ private native int drawLines(long display, long drawable, long gc, short points[], int numPoints);
+ private native int drawRectangle(long display, long drawable, long gc, int x, int y, int width, int height);
+
+ // Filling methods
+
+ private native int fillRectangles(long display, long drawable, long gc, int vertices[], int numVert);
+ private native int fillRectangle(long display, long drawable, long gc, int x, int y, int width, int height);
+ private native int fillPolygon(long display, long drawable, long gc, short points[], int numPoints);
+ private native int fillArc(long display, long drawable, long gc, int x, int y, int width, int height, int startAngle, int angle);
+
+ private native int copyArea(long display, long src, long dst, long gc, int src_x, int src_y, int width, int height, int dst_x, int dst_y);
+
}
Added: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp?rev=606703&view=auto
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp (added)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp Mon Dec 24 07:05:23 2007
@@ -0,0 +1,246 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @author Igor V. Stolyarov
+ * @version $Revision$
+ */
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xos.h>
+
+#include "org_apache_harmony_awt_gl_linux_XGraphics2D.h"
+
+JNIEXPORT jlong JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_createGC(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong valuemask, jlong values)
+{
+ return (jlong)XCreateGC((Display *)display, (Drawable)drawable, (unsigned long)valuemask, (XGCValues *)values);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_freeGC
+(JNIEnv *env, jobject obj, jlong display, jlong gc)
+{
+ return (jint)XFreeGC((Display *)display, (GC)gc);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setFunction
+(JNIEnv *env, jobject obj, jlong display, jlong gc, jint function)
+{
+ return (jint)XSetFunction((Display *)display, (GC)gc, function);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setForeground
+(JNIEnv *env, jobject obj, jlong display, jlong gc, jlong colormap, jint argb_val)
+{
+ XColor *color = (XColor *)malloc(sizeof(XColor));
+ color->red = (unsigned short) ((argb_val & 0x00FF0000) >> 8);
+ color->green = (unsigned short) (argb_val & 0x0000FF00);
+ color->blue = (unsigned short) ((argb_val & 0x000000FF) << 8);
+
+ int ret = XAllocColor((Display *)display, (Colormap)colormap, color);
+
+ if(!ret) return ret;
+
+ ret = XSetForeground((Display *)display, (GC)gc, color->pixel);
+ free(color);
+
+ return ret;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_copyArea
+(JNIEnv *env, jobject obj, jlong display, jlong src, jlong dst, jlong gc, jint src_x, jint src_y,
+jint width, jint height, jint dst_x, jint dst_y)
+{
+ return XCopyArea((Display *)display, (Drawable)src, (Drawable)dst, (GC)gc, src_x, src_y, width, height, dst_x, dst_y);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipMask
+(JNIEnv *env, jobject obj, jlong display, jlong gc, jlong pixmap)
+{
+ return XSetClipMask((Display *)display, (GC)gc, (Pixmap)pixmap);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipRectangles
+(JNIEnv *env, jobject obj, jlong display, jlong gc, jint clip_x_origin, jint clip_y_origin,
+jintArray vertices, jint num_verts)
+{
+ jint *verts = NULL;
+ XRectangle *rects = NULL;
+ int num_rects = 0;
+
+ if(num_verts > 0){
+ verts = (jint *)malloc(sizeof(jint)*num_verts);
+ env->GetIntArrayRegion(vertices, 1, num_verts, verts);
+
+ num_rects = num_verts >> 2;
+ rects = (XRectangle *)malloc(sizeof(XRectangle) * num_rects);
+
+ for (int i = 0, j = 0; i < num_verts; i += 4, j++) {
+ rects[j].x = (short)verts[i];
+ rects[j].y = (short)verts[i + 1];
+ rects[j].width = (unsigned short)(verts[i+2]-verts[i]+1);
+ rects[j].height = (unsigned short)(verts[i+3]-verts[i+1]+1);
+ }
+ }
+
+ int ret = XSetClipRectangles((Display *)display, (GC)gc, clip_x_origin, clip_y_origin, rects, num_rects, Unsorted);
+ if(verts) free(verts);
+ if(rects) free(rects);
+ return ret;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawArc
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jint x, jint y, jint width, jint height, jint startAngle, jint angle)
+{
+ return XDrawArc((Display *)display, (Drawable)drawable, (GC)gc, x ,y, width, height, startAngle, angle);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLine
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jint x1, jint y1, jint x2, jint y2)
+{
+ return XDrawLine((Display *)display, (Drawable)drawable, (GC)gc, x1, y1, x2, y2);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLines
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jshortArray points, jint num_points)
+{
+ jshort *verts = (jshort *)malloc(sizeof(jshort) * num_points);
+ env->GetShortArrayRegion(points, 0, num_points, verts);
+
+ int ret = XDrawLines((Display *)display, (Drawable)drawable, (GC)gc, (XPoint *)verts, num_points >> 1, CoordModeOrigin);
+ if(verts) free(verts);
+ return ret;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawRectangle
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jint x, jint y, jint width, jint height)
+{
+ return XDrawRectangle((Display *)display, (Drawable)drawable, (GC)gc, x, y, width, height);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangles
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jintArray vertices, jint num_verts)
+{
+ jint *verts = NULL;
+ XRectangle *rects = NULL;
+ int num_rects = 0;
+
+ if(num_verts > 0){
+ verts = (jint *)malloc(sizeof(jint)*num_verts);
+ env->GetIntArrayRegion(vertices, 1, num_verts, verts);
+
+ num_rects = num_verts >> 2;
+ rects = (XRectangle *)malloc(sizeof(XRectangle) * num_rects);
+
+ for (int i = 0, j = 0; i < num_verts; i += 4, j++) {
+ rects[j].x = (short)verts[i];
+ rects[j].y = (short)verts[i + 1];
+ rects[j].width = (unsigned short)(verts[i+2]-verts[i]+1);
+ rects[j].height = (unsigned short)(verts[i+3]-verts[i+1]+1);
+ }
+
+ }
+ int ret = XFillRectangles((Display *)display, (Drawable)drawable, (GC)gc, rects, num_rects);
+ if(verts) free(verts);
+ if(rects) free(rects);
+ return ret;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangle
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jint x, jint y, jint width, jint height)
+{
+ return XFillRectangle((Display *)display, (Drawable)drawable, (GC)gc, x, y, width, height);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillPolygon
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jshortArray points, jint num_points)
+{
+ jshort *verts = (jshort *)malloc(sizeof(jshort) * num_points);
+ env->GetShortArrayRegion(points, 0, num_points, verts);
+
+ int ret = XFillPolygon((Display *)display, (Drawable)drawable, (GC)gc, (XPoint *)verts, num_points >> 1, Nonconvex, CoordModeOrigin);
+ if(verts) free(verts);
+ return ret;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillArc
+(JNIEnv *env, jobject obj, jlong display, jlong drawable, jlong gc, jint x, jint y, jint width, jint height, jint startAngle, jint angle)
+{
+ return XFillArc((Display *)display, (Drawable)drawable, (GC)gc, x ,y, width, height, startAngle, angle);
+}
+
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setStroke
+(JNIEnv *env, jobject obj, jlong display, jlong gc, jint line_width, jint join_style, jint cap_style,
+jint dash_offset, jbyteArray dashes, jint len)
+{
+ jbyte *dash_list = NULL;
+ XGCValues *values = (XGCValues *)malloc(sizeof(XGCValues));
+
+ values->line_width = line_width;
+ values->join_style = join_style;
+ values->cap_style = cap_style;
+ values->dash_offset = dash_offset;
+
+ unsigned long mask = GCLineWidth | GCJoinStyle | GCCapStyle | GCDashOffset | GCLineStyle;
+ if(!len){
+ values->line_style = LineSolid;
+ } else {
+ dash_list = (jbyte *)malloc(len);
+ env->GetByteArrayRegion(dashes, 0, len, dash_list);
+ values->line_style = LineOnOffDash;
+ }
+
+ if(len == 1){
+ values->dashes = *dash_list;
+ mask |= GCDashList;
+ }
+
+ int ret = XChangeGC((Display *)display, (GC)gc, mask, values);
+
+ if(!ret){
+ if(dash_list) free(dash_list);
+ }
+
+ free(values);
+
+ if(len > 1){
+ ret = XSetDashes((Display *)display, (GC)gc, dash_offset, (char *)dash_list, len);
+ free(dash_list);
+ }
+
+ return ret;
+}
+
+
Propchange: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/XGraphics2D.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt?rev=606703&r1=606702&r2=606703&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/exports.txt Mon Dec 24 07:05:23 2007
@@ -16,3 +16,19 @@
Java_org_apache_harmony_awt_gl_render_NativeImageBlitter_xor
Java_org_apache_harmony_awt_gl_ImageSurface_updateCache
Java_org_apache_harmony_awt_gl_Surface_initIDs
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_copyArea
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_createGC
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawArc
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLine
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLines
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawRectangle
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillArc
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillPolygon
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangle
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangles
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_freeGC
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipMask
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipRectangles
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setForeground
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setFunction
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setStroke
Added: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h?rev=606703&view=auto
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h (added)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h Mon Dec 24 07:05:23 2007
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @author Igor V. Stolyarov
+ * @version $Revision$
+ */
+/*
+ * THE FILE HAS BEEN AUTOGENERATED BY INTEL IJH TOOL.
+ * Please be aware that all changes made to this file manually
+ * will be overwritten by the tool if it runs again.
+ */
+
+#include <jni.h>
+
+
+/* Header for class org.apache.harmony.awt.gl.linux.XGraphics2D */
+
+#ifndef _ORG_APACHE_HARMONY_AWT_GL_LINUX_XGRAPHICS2D
+#define _ORG_APACHE_HARMONY_AWT_GL_LINUX_XGRAPHICS2D
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Native methods */
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.createGC(JJJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_createGC(JNIEnv *, jobject,
+ jlong, jlong, jlong, jlong);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.freeGC(JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_freeGC(JNIEnv *, jobject,
+ jlong, jlong);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.setFunction(JJI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setFunction(JNIEnv *, jobject,
+ jlong, jlong, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.setForeground(JJJI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setForeground(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.copyArea(JJJJIIIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_copyArea(JNIEnv *, jobject,
+ jlong, jlong, jlong, jlong, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.setClipMask(JJJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipMask(JNIEnv *, jobject,
+ jlong, jlong, jlong);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.setClipRectangles(JJII[III)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setClipRectangles(JNIEnv *, jobject,
+ jlong, jlong, jint, jint, jintArray, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.drawArc(JJJIIIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawArc(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.drawLine(JJJIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLine(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.drawLines(JJJ[SI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawLines(JNIEnv *, jobject,
+ jlong, jlong, jlong, jshortArray, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.drawRectangle(JJJIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawRectangle(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.drawPolygon(JJJ[SI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_drawPolygon(JNIEnv *, jobject,
+ jlong, jlong, jlong, jshortArray, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.fillArc(JJJIIIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillArc(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.fillRectangles(JJJ[II)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangles(JNIEnv *, jobject,
+ jlong, jlong, jlong, jintArray, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.fillRectangle(JJJIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillRectangle(JNIEnv *, jobject,
+ jlong, jlong, jlong, jint, jint, jint, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.fillPolygon(JJJ[SI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_fillPolygon(JNIEnv *, jobject,
+ jlong, jlong, jlong, jshortArray, jint);
+
+/*
+ * Method: org.apache.harmony.awt.gl.linux.XGraphics2D.setStroke(JJIIII[BI)I
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_awt_gl_linux_XGraphics2D_setStroke(JNIEnv *, jobject,
+ jlong, jlong, jint, jint, jint, jint, jbyteArray, jint);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ORG_APACHE_HARMONY_AWT_GL_LINUX_XGRAPHICS2D */
Propchange: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/include/org_apache_harmony_awt_gl_linux_XGraphics2D.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile?rev=606703&r1=606702&r2=606703&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/unix/makefile Mon Dec 24 07:05:23 2007
@@ -17,7 +17,7 @@
PNG_DIR=$(HY_HDK)/../depends/libs/build/png
-INCLUDES += -I$(SHARED)common -I$(SHAREDSUB)/include -I$(PNG_DIR)
+INCLUDES += -I$(SHARED)common -I$(SHAREDSUB)/include -I$(PNG_DIR) -I/usr/X11R6/include -I/usr/include -Iinclude
BUILDFILES = \
$(SHAREDSUB)/blitter.o \
@@ -25,6 +25,7 @@
$(SHAREDSUB)/LUTTables.o \
$(SHAREDSUB)/pngdecoder.o \
$(SHAREDSUB)/SurfaceDataStructure.o \
+ XGraphics2D.o \
libpng.a
ifneq ($(HY_ZIP_API),true)