CaRMtl/eric/JLogoWindow.java

232 lines
7.4 KiB
Java

/*
Copyright 2006 Eric Hakenholz
This file is part of C.a.R. software.
C.a.R. is a free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
C.a.R. is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eric;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import rene.gui.Global;
public class JLogoWindow extends JFrame {
private static int W=300, H=150;
private static myBar Bar=null;
private static int BW=280, BH=7, BY=110;// ProgressBar dimensions
private static volatile int BStep=0;
private static final double BStepMax=1996;
/**
*
*/
private static final long serialVersionUID=1L;
private final ImageIcon backimage=new ImageIcon(getClass().getResource("/rene/zirkel/logowindow.jpg"));
public JLogoWindow(final boolean aboutBox) {
final Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
setSize(W, H);
this.setLocation((dim.width-W)/2, (dim.height-H)/2);
this.setUndecorated(true);
setAlwaysOnTop(true);
setPreferredSize(new java.awt.Dimension(W, H));
setResizable(false);
setContentPane(new myPanel());
if (!aboutBox) {
Bar=new myBar();
getContentPane().add(Bar);
}
}
static public JLogoWindow JLW;
static public void progress(String message) {
// System.out.print(BStep+": "+message);
//
// int p=(int) Math.round((BW/BStepMax)*BStep);
// System.out.println(" : "+p);
if (Bar!=null) {
BStep++;
Bar.repaint();
}
}
static public void ShowLogoWindow(final boolean aboutBox) {
Thread logothread=new Thread() {
@Override
public void run() {
JLW=new JLogoWindow(aboutBox);
if (aboutBox) {
JLW.addWindowListener(new WindowAdapter() {
@Override
public void windowDeactivated(WindowEvent e) {
DisposeLogoWindow();
}
});
JLW.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
DisposeLogoWindow();
}
});
}
JLW.setVisible(true);
// DrawString est extrêmement lent sur certaines machines virtuelles...
// Cela oblige à certaines contorsions si on veut que le dialogue
// apparaisse immédiatement avec l'image de fond, en attendant le texte...
JLW.repaint();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JLW.repaint();
}
});
}
};
logothread.setPriority(Thread.MAX_PRIORITY);
logothread.start();
}
static public void DisposeLogoWindow() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (JLW!=null) {
JLW.dispose();
JLW=null;
Bar=null;
BStep=0;
}
}
});
}
class myBar extends javax.swing.JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2=(Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_PURE);
Dimension d=getSize();
g2.setColor(new Color(255, 255, 255, 230));
int p=(int) Math.round(((BW-4)/BStepMax)*BStep);
g2.fillRect(2, 2, p, BH-4);
g2.setColor(Color.white);
g2.drawRect(0, 0, BW, BH);
}
public myBar() {
setBounds((W-BW)/2, BY, BW, BH);
setOpaque(false);
}
}
class myPanel extends javax.swing.JPanel {
private boolean firstPaint=true;
public myPanel() {
super();
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
final Graphics2D g2=(Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_PURE);
final java.awt.Dimension d=this.getSize();
g2.drawImage(backimage.getImage(), 0, 0, d.width, d.height, this);
if (firstPaint) {
firstPaint=false;
} else {
paintStrings(g2);
}
}
public void paintStrings(final Graphics2D g2) {
try {
g2.setFont(new Font("Dialog", Font.ITALIC, 13));
FontMetrics fm=g2.getFontMetrics();
String s=Global.Loc("splash.message");
g2.setColor(new Color(191, 215, 255));
int w=fm.stringWidth(s);
g2.drawString(s, (W-w)/2, 60);
g2.setFont(new Font("Dialog", Font.PLAIN, 12));
fm=g2.getFontMetrics();
s=Global.name("version")+" "+Global.name("program.version");
g2.setColor(Color.white);
w=fm.stringWidth(s);
g2.drawString(s, (W-w)/2, 85);
s="Java : "+System.getProperty("java.version");
g2.setColor(Color.white);
w=fm.stringWidth(s);
g2.drawString(s, (W-w)/2, 100);
} catch (Exception e) {
}
}
}
}