1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| package com.monsterofcookie.progress;
import javax.jnlp.DownloadServiceListener; import java.awt.Container; import java.net.URL; import java.applet.AppletStub; import java.awt.Canvas; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferStrategy;
public class DownloadProgress implements DownloadServiceListener {
private Container surfaceContainer = null; private AppletStub appletStub = null; private Canvas canvas = null; private BufferStrategy bufferStrategy = null; private final int CANVAS_WIDTH; private final int CANVAS_HEIGHT;
public DownloadProgress(Object surface) { this(surface, null); }
public DownloadProgress(Object surface, Object stub) { this((Container) surface, (AppletStub) stub); }
private DownloadProgress(Container surface, AppletStub stub) { surfaceContainer = (Container) surface; appletStub = (AppletStub) stub; CANVAS_WIDTH = Integer.parseInt(appletStub.getParameter("width")); CANVAS_HEIGHT = Integer.parseInt(appletStub.getParameter("height")); initUI(); }
@Override public void downloadFailed(java.net.URL url, java.lang.String version) { }
@Override public void progress(URL url, String version, long readSoFar, long total, int overallPercent) { updateProgressUI(overallPercent); }
@Override public void upgradingArchive(URL url, String version, int patchPercent, int overallPercent) { updateProgressUI(overallPercent); }
@Override public void validating(URL url, String version, long entry, long total, int overallPercent) { updateProgressUI(overallPercent); }
private void initUI() {
surfaceContainer.setIgnoreRepaint(true); surfaceContainer.setLayout(null); surfaceContainer.setBounds(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); canvas = new Canvas() {
@Override public void addNotify() { super.addNotify(); this.createBufferStrategy(2); bufferStrategy = this.getBufferStrategy(); }
@Override public void removeNotify() { super.removeNotify(); bufferStrategy.dispose(); bufferStrategy = null; } }; surfaceContainer.add(canvas); canvas.setIgnoreRepaint(true); canvas.setSize(CANVAS_WIDTH, CANVAS_HEIGHT); canvas.setLocation(0, 0);
}
private void updateProgressUI(int overallPercentage) { if (bufferStrategy != null) { if (!bufferStrategy.contentsLost()) { bufferStrategy.show(); } Graphics2D graphics2D = getGraphics2D(); if (graphics2D != null) { try {
} finally { graphics2D.dispose(); } } } }
private Graphics2D getGraphics2D() { Graphics2D rtn = null; if (bufferStrategy != null) { rtn = (Graphics2D) bufferStrategy.getDrawGraphics(); rtn.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); rtn.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); rtn.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); rtn.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); rtn.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); rtn.setClip(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); } return rtn; } } |