src/share/classes/sun/java2d/SunGraphics2D.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 80,97 ****
import sun.java2d.loops.RenderLoops;
import sun.java2d.loops.CompositeType;
import sun.java2d.loops.SurfaceType;
import sun.java2d.loops.Blit;
import sun.java2d.loops.MaskFill;
- import sun.font.FontManager;
import java.awt.font.FontRenderContext;
import sun.java2d.loops.XORComposite;
import sun.awt.ConstrainableGraphics;
import sun.awt.SunHints;
import java.util.Map;
import java.util.Iterator;
- import sun.java2d.DestSurfaceProvider;
import sun.misc.PerformanceLogger;
import javax.tools.annotation.GenerateNativeHeader;
/**
--- 80,95 ----
*** 1747,1776 ****
r = null;
} else if (transformState <= TRANSFORM_INT_TRANSLATE) {
if (usrClip instanceof Rectangle) {
r = new Rectangle((Rectangle) usrClip);
} else {
! r = usrClip.getBounds();
}
r.translate(-transX, -transY);
} else {
! r = getClip().getBounds();
}
return r;
}
public Rectangle getClipBounds(Rectangle r) {
if (clipState != CLIP_DEVICE) {
if (transformState <= TRANSFORM_INT_TRANSLATE) {
if (usrClip instanceof Rectangle) {
r.setBounds((Rectangle) usrClip);
} else {
! r.setBounds(usrClip.getBounds());
}
r.translate(-transX, -transY);
} else {
! r.setBounds(getClip().getBounds());
}
} else if (r == null) {
throw new NullPointerException("null rectangle parameter");
}
return r;
--- 1745,1776 ----
r = null;
} else if (transformState <= TRANSFORM_INT_TRANSLATE) {
if (usrClip instanceof Rectangle) {
r = new Rectangle((Rectangle) usrClip);
} else {
! r = new Rectangle();
! r.setFrame(usrClip.getBounds2D());
}
r.translate(-transX, -transY);
} else {
! r = new Rectangle();
! r.setFrame(getClip().getBounds2D());
}
return r;
}
public Rectangle getClipBounds(Rectangle r) {
if (clipState != CLIP_DEVICE) {
if (transformState <= TRANSFORM_INT_TRANSLATE) {
if (usrClip instanceof Rectangle) {
r.setBounds((Rectangle) usrClip);
} else {
! r.setFrame(usrClip.getBounds2D());
}
r.translate(-transX, -transY);
} else {
! r.setFrame(getClip().getBounds2D());
}
} else if (r == null) {
throw new NullPointerException("null rectangle parameter");
}
return r;
*** 1941,1963 ****
matrix[0] = rect.getX();
matrix[1] = rect.getY();
matrix[2] = matrix[0] + rect.getWidth();
matrix[3] = matrix[1] + rect.getHeight();
tx.transform(matrix, 0, matrix, 0, 2);
! rect = new Rectangle2D.Float();
! rect.setFrameFromDiagonal(matrix[0], matrix[1],
! matrix[2], matrix[3]);
! return rect;
}
if (tx.isIdentity()) {
return cloneShape(clip);
}
return tx.createTransformedShape(clip);
}
public void clipRect(int x, int y, int w, int h) {
clip(new Rectangle(x, y, w, h));
}
public void setClip(int x, int y, int w, int h) {
--- 1941,1979 ----
matrix[0] = rect.getX();
matrix[1] = rect.getY();
matrix[2] = matrix[0] + rect.getWidth();
matrix[3] = matrix[1] + rect.getHeight();
tx.transform(matrix, 0, matrix, 0, 2);
! fixRectangleOrientation(matrix, rect);
! return new Rectangle2D.Double(matrix[0], matrix[1],
! matrix[2] - matrix[0],
! matrix[3] - matrix[1]);
}
if (tx.isIdentity()) {
return cloneShape(clip);
}
return tx.createTransformedShape(clip);
}
+ /**
+ * Sets orientation of the rectangle according to the clip.
+ */
+ private static void fixRectangleOrientation(double[] m, Rectangle2D clip) {
+ if (clip.getWidth() > 0 != (m[2] - m[0] > 0)) {
+ double t = m[0];
+ m[0] = m[2];
+ m[2] = t;
+ }
+ if (clip.getHeight() > 0 != (m[3] - m[1] > 0)) {
+ double t = m[1];
+ m[1] = m[3];
+ m[3] = t;
+ }
+ }
+
public void clipRect(int x, int y, int w, int h) {
clip(new Rectangle(x, y, w, h));
}
public void setClip(int x, int y, int w, int h) {