/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.components; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JInternalFrame; import javax.swing.JInternalFrame.JDesktopIcon; import org.imgscalr.Scalr; import webcamstudio.mixers.MasterMixer; import webcamstudio.streams.SourceDVB; import webcamstudio.streams.SourceText; import webcamstudio.streams.SourceURL; import webcamstudio.streams.Stream; /** * * @author patrick */ public class DesktopIcon extends JDesktopIcon { Stream stream = null; Viewer viewer = null; JInternalFrame frameDesktop = null; BufferedImage imgBtn; public DesktopIcon(JInternalFrame f, Stream s) { super(f); frameDesktop = f; stream = s; this.removeAll(); this.setLayout(new BorderLayout()); viewer = new Viewer(); ImageIcon pauseIcon = new ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-playback-play.png")); imgBtn = new BufferedImage(pauseIcon.getIconWidth(), pauseIcon.getIconHeight(), BufferedImage.TYPE_INT_RGB); pauseIcon.paintIcon(null, imgBtn.getGraphics(), 0, 0); final int mW = MasterMixer.getInstance().getWidth()/3; final int mH = MasterMixer.getInstance().getHeight()/3; imgBtn = Scalr.resize(imgBtn, Scalr.Mode.FIT_EXACT, mW, mH); // System.out.println("Pause W:"+sW+" - Pause H:"+sH); add(viewer, BorderLayout.CENTER); this.setToolTipText("Stream: " + s.getName() + " | Layer: " + s.getZOrder()); this.setVisible(true); this.setSize(64, 64); new Thread(new Runnable() { @Override public void run() { while (!frameDesktop.isClosed()) { try { if (frameDesktop.isIcon()) { BufferedImage img = stream.getPreview(); if (stream.isPlaying()) { if (img != null){ int ImgHeight = img.getHeight(); int ImgWidth = img.getWidth(); BufferedImage newImg = new BufferedImage(ImgWidth,ImgHeight, BufferedImage.TYPE_INT_RGB); Graphics2D gr = newImg.createGraphics(); gr.setRenderingHint(java.awt.RenderingHints.KEY_INTERPOLATION, java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR); gr.setRenderingHint(java.awt.RenderingHints.KEY_RENDERING, java.awt.RenderingHints.VALUE_RENDER_SPEED); gr.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_OFF); gr.setRenderingHint(java.awt.RenderingHints.KEY_TEXT_ANTIALIASING, java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); gr.setRenderingHint(java.awt.RenderingHints.KEY_FRACTIONALMETRICS, java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_OFF); gr.setRenderingHint(java.awt.RenderingHints.KEY_COLOR_RENDERING, java.awt.RenderingHints.VALUE_COLOR_RENDER_SPEED); gr.setRenderingHint(java.awt.RenderingHints.KEY_DITHERING, java.awt.RenderingHints.VALUE_DITHER_DISABLE); gr.setColor(Color.green); gr.fillRect(0,0,newImg.getWidth(),newImg.getHeight()); gr.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER, 75 / 100F)); gr.drawImage(img,0,0,null); if (stream.getisPaused()) { gr.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER, 100 / 100F)); gr.drawImage(imgBtn,mW,mH,null); } img = newImg; } } else { if (img != null){ BufferedImage stopImg = stream.getPreview(); img=stopImg; } } viewer.setImage(img); viewer.setAudioLevel(stream.getAudioLevelLeft(), stream.getAudioLevelRight()); viewer.repaint(); String sTip = null; if (stream instanceof SourceText){ SourceText sc = (SourceText)stream; sTip = sc.getContent(); if (sTip.length() > 10) { setToolTipText("Text: " + sTip.substring(0, 10) + "..." + " | Layer: " + sc.getZOrder()); } else { setToolTipText("Text: " + sTip + " | Layer: " + sc.getZOrder()); } }else if (stream instanceof SourceDVB){ SourceDVB sD = (SourceDVB)stream; setToolTipText("DVB: " + sD.getChName() + " | Layer: " + sD.getZOrder()); } else if (stream instanceof SourceURL){ SourceURL sU = (SourceURL)stream; sTip = sU.getWebURL(); if (sTip.length() > 10) { setToolTipText("Text: " + sTip.substring(0, 10) + "..." + " | Layer: " + sU.getZOrder()); } else { setToolTipText("Text: " + sTip + " | Layer: " + sU.getZOrder()); } setToolTipText("URL: " + sTip.substring(0, 10) + "..." + " | Layer: " + sU.getZOrder()); } else { setToolTipText("Stream: " + stream.getName() + " | Layer: " + stream.getZOrder()); } } Thread.sleep(200); } catch (InterruptedException ex) { Logger.getLogger(DesktopIcon.class.getName()).log(Level.SEVERE, null, ex); } } } }).start(); } }