You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/05/25 12:37:51 UTC
svn commit: r1859960 -
/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
Author: tilman
Date: Sat May 25 12:37:51 2019
New Revision: 1859960
URL: http://svn.apache.org/viewvc?rev=1859960&view=rev
Log:
PDFBOX-2941: prevent blurry display of glyph rendering on HiDPI screens, thanks Alexandr Scherbatiy (same as in issue 3665)
Modified:
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
Modified: pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java?rev=1859960&r1=1859959&r2=1859960&view=diff
==============================================================================
--- pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java (original)
+++ pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java Sat May 25 12:37:51 2019
@@ -21,10 +21,12 @@ import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
@@ -37,6 +39,7 @@ import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;
+import org.apache.pdfbox.debugger.ui.HighResolutionImageIcon;
/**
* @author Khyrul Bashar
@@ -47,6 +50,9 @@ class FontEncodingView
{
private JPanel panel;
+ private static final AffineTransform DEFAULT_TRANSFORM = GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform();
+
/**
* Constructor.
* @param tableData Object[][] instance as table data.
@@ -151,7 +157,11 @@ class FontEncodingView
}
Rectangle cellRect = jTable.getCellRect(row, col, false);
BufferedImage bim = renderGlyph(path, bounds2D, cellRect);
- return new JLabel(new ImageIcon(bim));
+ return new JLabel(new HighResolutionImageIcon(
+ bim,
+ (int) Math.ceil(bim.getWidth() / DEFAULT_TRANSFORM.getScaleX()),
+ (int) Math.ceil(bim.getHeight() / DEFAULT_TRANSFORM.getScaleX())),
+ SwingConstants.CENTER);
}
if (o instanceof BufferedImage)
{
@@ -193,7 +203,10 @@ class FontEncodingView
private BufferedImage renderGlyph(GeneralPath path, Rectangle2D bounds2D, Rectangle cellRect)
{
- BufferedImage bim = new BufferedImage((int) cellRect.getWidth(), (int) cellRect.getHeight(), BufferedImage.TYPE_INT_RGB);
+ BufferedImage bim = new BufferedImage(
+ (int) (cellRect.getWidth() * DEFAULT_TRANSFORM.getScaleX()),
+ (int) (cellRect.getHeight() * DEFAULT_TRANSFORM.getScaleY()),
+ BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) bim.getGraphics();
g.setBackground(Color.white);
g.clearRect(0, 0, bim.getWidth(), bim.getHeight());
@@ -205,10 +218,10 @@ class FontEncodingView
g.translate(0, -bim.getHeight());
// horizontal center
- g.translate((cellRect.getWidth() - bounds2D.getWidth() * scale) / 2, 0);
+ g.translate((cellRect.getWidth() - bounds2D.getWidth() * scale) / 2 * DEFAULT_TRANSFORM.getScaleX(), 0);
// scale from the glyph to the cell
- g.scale(scale, scale);
+ g.scale(scale * DEFAULT_TRANSFORM.getScaleX(), scale * DEFAULT_TRANSFORM.getScaleY());
// Adjust for negative y min bound
g.translate(0, -yBounds[0]);