Fixed visual artifacts bug in FPanel.

Also, added rendering hints to allow better border drawing.a
This commit is contained in:
Doublestrike
2012-02-13 06:06:37 +00:00
parent 620c4677fb
commit 751ac48f77

View File

@@ -17,7 +17,6 @@
*/ */
package forge.view.toolbox; package forge.view.toolbox;
import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
@@ -30,7 +29,6 @@ import java.awt.geom.RoundRectangle2D;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.RepaintManager;
import javax.swing.border.Border; import javax.swing.border.Border;
import forge.Command; import forge.Command;
@@ -68,7 +66,6 @@ public class FPanel extends JPanel {
private double iar; private double iar;
// Clip rounded corner shape // Clip rounded corner shape
private Area clip; private Area clip;
private final BasicStroke borderStroke = new BasicStroke(2.0f);
/** Core panel used in UI. See class javadoc for more details. */ /** Core panel used in UI. See class javadoc for more details. */
public FPanel() { public FPanel() {
@@ -192,17 +189,12 @@ public class FPanel extends JPanel {
*/ */
@Override @Override
protected void paintComponent(final Graphics graphics0) { protected void paintComponent(final Graphics graphics0) {
super.paintComponent(graphics0);
pnlW = this.getWidth(); pnlW = this.getWidth();
pnlH = this.getHeight(); pnlH = this.getHeight();
final Graphics2D g2d = (Graphics2D) graphics0; final Graphics2D g2d = (Graphics2D) graphics0.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
RepaintManager.currentManager(this).markCompletelyDirty(this);
// Set clip for rounded area
if (cornerDiameter > 0) {
clip = new Area(new RoundRectangle2D.Float(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter));
g2d.setClip(clip);
}
// Draw background as required // Draw background as required
if (foregroundStretch && foregroundImage != null) { if (foregroundStretch && foregroundImage != null) {
@@ -225,8 +217,8 @@ public class FPanel extends JPanel {
} }
// Clear memory // Clear memory
//if (clip != null) { clip.reset(); } if (clip != null) { clip.reset(); }
//g2d.dispose(); g2d.dispose();
} }
//========== Special draw methods //========== Special draw methods
@@ -238,10 +230,13 @@ public class FPanel extends JPanel {
else { g2d0.setColor(getBackground()); } else { g2d0.setColor(getBackground()); }
// Parent must be drawn onto clipped object. // Parent must be drawn onto clipped object.
g2d0.fillRect(0, 0, pnlW, pnlH); g2d0.fillRoundRect(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter);
} }
private void drawBackgroundTexture(final Graphics2D g2d0) { private void drawBackgroundTexture(final Graphics2D g2d0) {
clip = new Area(new RoundRectangle2D.Float(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter));
g2d0.setClip(clip);
this.tempX = 0; this.tempX = 0;
this.tempY = 0; this.tempY = 0;
@@ -257,6 +252,9 @@ public class FPanel extends JPanel {
} }
private void drawForegroundScaled(final Graphics2D g2d0) { private void drawForegroundScaled(final Graphics2D g2d0) {
clip = new Area(new RoundRectangle2D.Float(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter));
g2d0.setClip(clip);
// Scaling 1: First dimension larger than panel // Scaling 1: First dimension larger than panel
if (imgW >= pnlW) { // Image is wider than panel? Shrink to width. if (imgW >= pnlW) { // Image is wider than panel? Shrink to width.
scaledW = pnlW; scaledW = pnlW;
@@ -288,13 +286,14 @@ public class FPanel extends JPanel {
} }
private void drawForegroundStretched(final Graphics2D g2d0) { private void drawForegroundStretched(final Graphics2D g2d0) {
clip = new Area(new RoundRectangle2D.Float(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter));
g2d0.setClip(clip);
g2d0.drawImage(foregroundImage, 0, 0, pnlW, pnlH, 0, 0, imgW, imgH, null); g2d0.drawImage(foregroundImage, 0, 0, pnlW, pnlH, 0, 0, imgW, imgH, null);
} }
private void drawBorder(final Graphics2D g2d0) { private void drawBorder(final Graphics2D g2d0) {
g2d0.setColor(borderColor); g2d0.setColor(borderColor);
g2d0.setStroke(borderStroke); g2d0.drawRoundRect(0, 0, pnlW - 1, pnlH - 1, cornerDiameter, cornerDiameter);
g2d0.drawRoundRect(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter);
} }
/** Improves performance by checking to see if any graphics will cancel /** Improves performance by checking to see if any graphics will cancel