< prev index next >
src/java.desktop/macosx/classes/sun/java2d/OSXSurfaceData.java
Print this page
@@ -72,12 +72,17 @@
this.fGraphicsStates = getBufferOfSize(kSizeOfParameters);
this.fGraphicsStatesInt = this.fGraphicsStates.asIntBuffer();
this.fGraphicsStatesFloat = this.fGraphicsStates.asFloatBuffer();
this.fGraphicsStatesLong = this.fGraphicsStates.asLongBuffer();
- this.fGraphicsStatesObject = new Object[6]; // clip coordinates + clip types + texture paint image + stroke dash
- // array + font + font paint
+ this.fGraphicsStatesObject = new Object[8]; // clip coordinates +
+ // clip types +
+ // texture paint image +
+ // stroke dash array +
+ // font + font paint +
+ // linear gradient color +
+ // linear gradient fractions
// NOTE: All access to the DrawingQueue comes through this OSXSurfaceData instance. Therefore
// every instance method of OSXSurfaceData that accesses the fDrawingQueue is synchronized.
// Thread.dumpStack();
@@ -302,10 +307,12 @@
@Native static final int kClipTypesIndex = 1;
@Native static final int kTextureImageIndex = 2;
@Native static final int kStrokeDashArrayIndex = 3;
@Native static final int kFontIndex = 4;
@Native static final int kFontPaintIndex = 5;
+ @Native static final int kColorArrayIndex = 6;
+ @Native static final int kFractionsArrayIndex = 7;
// possible state changes
@Native static final int kBoundsChangedBit = 1 << 0;
@Native static final int kBoundsNotChangedBit = ~kBoundsChangedBit;
@Native static final int kClipChangedBit = 1 << 1;
@@ -327,10 +334,11 @@
// possible color states
@Native static final int kColorSimple = 0;
@Native static final int kColorSystem = 1;
@Native static final int kColorGradient = 2;
@Native static final int kColorTexture = 3;
+ @Native static final int kColorLinearOrRadialGradient = 4;
// possible gradient color states
@Native static final int kColorNonCyclic = 0;
@Native static final int kColorCyclic = 1;
@@ -565,10 +573,40 @@
this.fChangeFlag = (this.fChangeFlag | kColorChangedBit);
} else {
this.fChangeFlag = (this.fChangeFlag & kColorNotChangedBit);
}
+ } else if (sg2d.paint instanceof LinearGradientPaint) {
+ if ((this.fGraphicsStatesInt.get(kColorStateIndex) != kColorGradient) || (lastPaint != sg2d.paint)) {
+ LinearGradientPaint color = (LinearGradientPaint) sg2d.paint;
+ this.fGraphicsStatesInt.put(kColorStateIndex, kColorLinearOrRadialGradient);
+ int numColor = color.getColors().length;
+ int colorArray[] = new int[numColor];
+ for (int i = 0; i < numColor; i++) {
+ colorArray[i] = color.getColors()[i].getRGB();
+ }
+ this.fGraphicsStatesObject[kColorArrayIndex] = colorArray;
+
+ int numFractions = color.getFractions().length;
+ float fractionArray[] = new float[numFractions];
+ for (int i = 0; i < numFractions; i++) {
+ fractionArray[i] = color.getFractions()[i];
+ }
+ this.fGraphicsStatesObject[kFractionsArrayIndex] = color.getFractions();
+
+ this.fGraphicsStatesInt.put(kColorIsCyclicIndex, (color.getCycleMethod() == LinearGradientPaint.CycleMethod.NO_CYCLE) ? kColorNonCyclic : kColorCyclic);
+ Point2D p = color.getStartPoint();
+ this.fGraphicsStatesFloat.put(kColorx1Index, (float) p.getX());
+ this.fGraphicsStatesFloat.put(kColory1Index, (float) p.getY());
+ p = color.getEndPoint();
+ this.fGraphicsStatesFloat.put(kColorx2Index, (float) p.getX());
+ this.fGraphicsStatesFloat.put(kColory2Index, (float) p.getY());
+
+ this.fChangeFlag = (this.fChangeFlag | kColorChangedBit);
+ } else {
+ this.fChangeFlag = (this.fChangeFlag & kColorNotChangedBit);
+ }
} else if (sg2d.paint instanceof TexturePaint) {
if ((this.fGraphicsStatesInt.get(kColorStateIndex) != kColorTexture) || (lastPaint != sg2d.paint)) {
TexturePaint color = (TexturePaint) sg2d.paint;
this.fGraphicsStatesInt.put(kColorStateIndex, kColorTexture);
texturePaintImage = color.getImage();
< prev index next >