From 4a2b261f195c73aa3cd731d93d3b7778ce985269 Mon Sep 17 00:00:00 2001 From: fredrossperry Date: Wed, 6 Jul 2016 14:28:27 -0700 Subject: Java desktop example: detect retina and scale accordingly also: zoom in/out buttons --- platform/java/example/PageCanvas.java | 41 ++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'platform/java/example/PageCanvas.java') diff --git a/platform/java/example/PageCanvas.java b/platform/java/example/PageCanvas.java index ffe3efc2..bfeca21b 100644 --- a/platform/java/example/PageCanvas.java +++ b/platform/java/example/PageCanvas.java @@ -9,6 +9,9 @@ public class PageCanvas extends java.awt.Canvas protected Page page; protected BufferedImage image; + protected float mScale = 1.0f; + private float mRetinaScale = 1.0f; + public static BufferedImage imageFromPixmap(Pixmap pixmap) { int w = pixmap.getWidth(); int h = pixmap.getHeight(); @@ -23,7 +26,7 @@ public class PageCanvas extends java.awt.Canvas Pixmap pixmap = new Pixmap(ColorSpace.DeviceBGR, bbox); pixmap.clear(255); DrawDevice dev = new DrawDevice(pixmap); - page.run(dev, new Matrix()); + page.run(dev, ctm); dev.destroy(); BufferedImage image = imageFromPixmap(pixmap); pixmap.destroy(); @@ -37,9 +40,19 @@ public class PageCanvas extends java.awt.Canvas return image; } - public PageCanvas(Page page_) { + public PageCanvas(Page page_, float nativeScale) { + mRetinaScale = nativeScale; + mScale = mRetinaScale; this.page = page_; - image = imageFromPage(page, new Matrix()); + run(); + } + + private void run() + { + Matrix ctm = new Matrix(); + ctm.scale(mScale); + image = imageFromPage(page, ctm); + repaint(); } public Dimension getPreferredSize() { @@ -54,7 +67,25 @@ public class PageCanvas extends java.awt.Canvas return getPreferredSize(); } - public void paint(Graphics g) { - g.drawImage(image, 0, 0, null); + public void zoomIn() { + mScale += 0.25f; + run(); + } + + public void zoomOut() { + mScale -= 0.25f; + run(); } + + public void paint(Graphics g) + { + float scale = 1.0f; + scale = 1/mRetinaScale; + + final Graphics2D g2d = (Graphics2D)g.create(0, 0, image.getWidth(), image.getHeight()); + g2d.scale(scale, scale); + g2d.drawImage(image, 0, 0, null); + g2d.dispose(); + } + } -- cgit v1.2.3