package com.quiltplayer.view.swing.views.impl; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import net.miginfocom.swing.MigLayout; import org.jdesktop.animation.timing.Animator; import org.jdesktop.animation.timing.Animator.RepeatBehavior; import org.jdesktop.animation.timing.interpolation.PropertySetter; import org.jdesktop.animation.timing.interpolation.SplineInterpolator; import org.jdesktop.jxlayer.JXLayer; import org.springframework.beans.factory.annotation.Autowired; import com.quiltplayer.external.covers.model.LocalImage; import com.quiltplayer.external.covers.util.ImageUtils; import com.quiltplayer.model.Album; import com.quiltplayer.view.swing.frame.QuiltPlayerFrame; import com.quiltplayer.view.swing.layers.JScrollPaneLayerUI; import com.quiltplayer.view.swing.panels.QScrollPane; import com.quiltplayer.view.swing.panels.QScrollPane.ScrollDirection; import com.quiltplayer.view.swing.views.View; @org.springframework.stereotype.Component public class AlbumArtView implements View { private JPanel panel; private Album album; private QScrollPane pane; private JXLayer<JScrollPane> jx; @Autowired private QuiltPlayerFrame frame; /* * (non-Javadoc) * * @see org.quiltplayer.view.components.View#getUI() */ @Override public JComponent getUI() { panel = new JPanel(new MigLayout("ins 0 2cm 0 0, fill")) { private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ @Override protected void paintComponent(Graphics g) { /* TODO Repaints the whole background every time? Look for solution */ Graphics2D g2d = (Graphics2D) g; // final Color[] gradient = { ColorConstantsDark.BACKGROUND, new Color(90, 90, 90), new Color(40, 40, // 40), // new Color(20, 20, 20) }; // // final float[] dist = { 0.0f, 0.5f, 0.55f, 1.0f }; // // Point2D start = new Point2D.Float(0, 0); // Point2D end = new Point2D.Float(0, getHeight()); // // LinearGradientPaint p = new LinearGradientPaint(start, end, dist, gradient); // g2d.setPaint(p); // // g2d.fillRect(0, 0, getWidth(), getHeight()); } }; if (album != null && album.getImages().size() > 0) { for (LocalImage localImage : album.getImages()) { ImageIcon icon = new ImageIcon(localImage.getLargeImage().getAbsolutePath()); Double d = frame.getHeight() * 0.60; /* Scale if too large depending on screen */ if (icon.getIconHeight() > d.intValue()) { icon = ImageUtils.scalePicture(icon, d.intValue()); } final JLabel label = new JLabel(icon); label.setBorder(BorderFactory.createLineBorder(Color.WHITE, 20)); panel.add(label, "center, gapx 0.3cm"); } } /* Otherwise gray */ panel.setOpaque(true); panel.setDoubleBuffered(false); pane = new QScrollPane(panel, ScrollDirection.HORIZONTAL); pane.setOpaque(false); jx = new JXLayer<JScrollPane>(pane, new JScrollPaneLayerUI()); jx.setOpaque(false); return jx; } public void animate() { PropertySetter setter = new PropertySetter(pane.getViewport(), "viewPosition", new Point(0, 0), new Point(panel .getWidth(), 0)); Animator animator = new Animator(25000, Animator.INFINITE, RepeatBehavior.REVERSE, setter); animator.setInterpolator(new SplineInterpolator(0f, .02f, 0f, 1f)); animator.start(); } /** * @param album * the album to set */ public final void setAlbum(Album album) { this.album = album; } }