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:55 UTC

svn commit: r1859961 - /pdfbox/branches/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

Author: tilman
Date: Sat May 25 12:37:55 2019
New Revision: 1859961

URL: http://svn.apache.org/viewvc?rev=1859961&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/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

Modified: pdfbox/branches/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java?rev=1859961&r1=1859960&r2=1859961&view=diff
==============================================================================
--- pdfbox/branches/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java (original)
+++ pdfbox/branches/issue45/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java Sat May 25 12:37:55 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]);