From bff1b670d544e924a54e59b0cd1715a44f49b199 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 22 Mar 2020 12:13:43 +0100 Subject: [PATCH] rework splash screen --- diylc/diylc-swing/DIYLCStarter.launch | 2 +- diylc/diylc-swing/library/main.jar | Bin 625277 -> 625277 bytes .../src/org/diylc/DIYLCSplash.java | 190 ++++++++++-------- .../src/org/diylc/DIYLCStarter.java | 17 +- diylc/diylc-swing/src/org/diylc/splash.png | Bin 12796 -> 0 bytes 5 files changed, 109 insertions(+), 100 deletions(-) delete mode 100644 diylc/diylc-swing/src/org/diylc/splash.png diff --git a/diylc/diylc-swing/DIYLCStarter.launch b/diylc/diylc-swing/DIYLCStarter.launch index aff8a7cb..8833c28d 100644 --- a/diylc/diylc-swing/DIYLCStarter.launch +++ b/diylc/diylc-swing/DIYLCStarter.launch @@ -11,5 +11,5 @@ - + diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 6f8ef872f0cdbeb245ae938941625e7fe8d6321d..08a0179a2d708557aa5cacdc283ad2eecfcd3e6c 100644 GIT binary patch delta 6128 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 Jc)vr&{|`qdSgrs7 delta 6128 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 0; i--) { - if (!splash.isVisible()) - return; - final int frame = i; - SwingUtilities.invokeLater(new Runnable() { + private int pxPerFrame = 3; - @Override - public void run() { - renderSplashFrame(splash, g, frame); - splash.update(); - } - }); - try { - Thread.sleep(10); - } catch (InterruptedException e) { - } - } - } - }); - } - - public void start() { - if (t != null) - t.start(); - } + public DIYLCSplash() { + setPreferredSize(new Dimension(getSplash().getIconWidth(), getSplash().getIconHeight())); + setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); + setUndecorated(true); + pack(); + setLocationRelativeTo(null); + setVisible(true); + setAlwaysOnTop(true); + repaint(); - private ImageIcon resistor = null; + t = new Thread(new Runnable() { - public ImageIcon getResistor() { - if (resistor == null) { - resistor = (ImageIcon) IconLoader.SplashResistor.getIcon(); - } - return resistor; - } + @Override + public void run() { + for (int i = 90; i >= 0; i--) { + if (!isVisible()) + return; + frameNumber = i; + SwingUtilities.invokeLater(new Runnable() { - private ImageIcon film = null; + @Override + public void run() { + repaint(); + } + }); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + } + } + }); + t.start(); + } + + @Override + public void paint(Graphics g) { + Graphics2D g2d = (Graphics2D)g; + g2d.setComposite(AlphaComposite.SrcOver); + getSplash().paintIcon(null, g, 0, 0); + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f - frameNumber * 0.007f)); + getResistor().paintIcon(null, g, resistorTarget.x - pxPerFrame * frameNumber, resistorTarget.y); + getFilm().paintIcon(null, g, filmTarget.x, filmTarget.y + pxPerFrame * frameNumber); + getElectrolytic().paintIcon(null, g, electrolyticTarget.x, electrolyticTarget.y - pxPerFrame * frameNumber); + getCeramic().paintIcon(null, g, ceramicTarget.x + pxPerFrame * frameNumber, ceramicTarget.y); + } - public ImageIcon getFilm() { - if (film == null) { - film = (ImageIcon) IconLoader.SplashFilm.getIcon(); - } - return film; - } + public void start() { + if (t != null) + t.start(); + } - private ImageIcon ceramic = null; + private ImageIcon resistor = null; - public ImageIcon getCeramic() { - if (ceramic == null) { - ceramic = (ImageIcon) IconLoader.SplashCeramic.getIcon(); - } - return ceramic; - } + public ImageIcon getResistor() { + if (resistor == null) { + resistor = (ImageIcon) IconLoader.SplashResistor.getIcon(); + } + return resistor; + } - private ImageIcon electrolytic = null; + private ImageIcon film = null; - public ImageIcon getElectrolytic() { - if (electrolytic == null) { - electrolytic = (ImageIcon) IconLoader.SplashElectrolytic.getIcon(); - } - return electrolytic; - } + public ImageIcon getFilm() { + if (film == null) { + film = (ImageIcon) IconLoader.SplashFilm.getIcon(); + } + return film; + } - private ImageIcon splash = null; + private ImageIcon ceramic = null; - public ImageIcon getSplash() { - if (splash == null) { - splash = (ImageIcon) IconLoader.Splash.getIcon(); - } - return splash; - } + public ImageIcon getCeramic() { + if (ceramic == null) { + ceramic = (ImageIcon) IconLoader.SplashCeramic.getIcon(); + } + return ceramic; + } - private Point resistorTarget = new Point(112, 114); - private Point filmTarget = new Point(233, 113); - private Point electrolyticTarget = new Point(261, 23); - private Point ceramicTarget = new Point(352, 22); + private ImageIcon electrolytic = null; - private int pxPerFrame = 3; + public ImageIcon getElectrolytic() { + if (electrolytic == null) { + electrolytic = (ImageIcon) IconLoader.SplashElectrolytic.getIcon(); + } + return electrolytic; + } - public void renderSplashFrame(SplashScreen splash, Graphics2D g, int frame) { - g.setComposite(AlphaComposite.Clear); - getSplash().paintIcon(null, g, 0, 0); - g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f - frame * 0.007f)); - getResistor().paintIcon(null, g, resistorTarget.x - pxPerFrame * frame, resistorTarget.y); - getFilm().paintIcon(null, g, filmTarget.x, filmTarget.y + pxPerFrame * frame); - getElectrolytic().paintIcon(null, g, electrolyticTarget.x, electrolyticTarget.y - pxPerFrame * frame); - getCeramic().paintIcon(null, g, ceramicTarget.x + pxPerFrame * frame, ceramicTarget.y); - } + private ImageIcon splash = null; + + public ImageIcon getSplash() { + if (splash == null) { + splash = (ImageIcon) IconLoader.Splash.getIcon(); + } + return splash; + } } diff --git a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java index 3bc5ae43..712b611b 100644 --- a/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java +++ b/diylc/diylc-swing/src/org/diylc/DIYLCStarter.java @@ -20,9 +20,7 @@ package org.diylc; import java.awt.Font; import java.awt.FontFormatException; import java.awt.GraphicsEnvironment; -import java.awt.SplashScreen; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.Properties; @@ -60,16 +58,7 @@ public class DIYLCStarter { */ public static void main(String[] args) { // Initialize splash screen - final SplashScreen splash = SplashScreen.getSplashScreen(); - URL splashUrl = Presenter.class.getClassLoader().getResource("org/diylc/splash.png"); - if (splash != null) { - try { - splash.setImageURL(splashUrl); - new DIYLCSplash(splash).start(); - } catch (NullPointerException | IllegalStateException | IOException e1) { - LOG.error("Could not initialize splash screen", e1); - } - } + DIYLCSplash splash = new DIYLCSplash(); URL url = DIYLCStarter.class.getResource("log4j.properties"); Properties properties = new Properties(); @@ -140,6 +129,10 @@ public class DIYLCStarter { MainFrame mainFrame = new MainFrame(); mainFrame.setLocationRelativeTo(null); + + splash.setVisible(false); + splash.dispose(); + mainFrame.setVisible(true); if (args.length > 0) { mainFrame.getPresenter().loadProjectFromFile(args[0]); diff --git a/diylc/diylc-swing/src/org/diylc/splash.png b/diylc/diylc-swing/src/org/diylc/splash.png deleted file mode 100644 index d326e7e142acb63615bc8e9eca362ad4e90faf73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12796 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