mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Fixed visual artifacts bug in FPanel.
Also, added rendering hints to allow better border drawing.a
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user