/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package gestor.utiles;

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public final class SalvaPantalla extends javax.swing.JDialog {

   String textoAviso;
   Timer timer;
   boolean comenzado = false;
   int ancho, alto;
   int anchoPan, altoPan;

   public SalvaPantalla() {
      super(Global.panel, true);
      initComponents();
      textoAviso = Global.trad.valor("toqueLaPantalla");
      if (textoAviso == null || textoAviso.trim().length() == 0) {
         textoAviso = "<html><center>toque la pantalla<br>para activarla</center></html>";
      }
      label.setText(textoAviso);
      fondo.setBounds(this.getBounds());
      fondo.setBackground(Color.BLACK);
      timer = new Timer(1000, (java.awt.event.ActionEvent e) -> {
          ticktimer();
      });
   }

   public void activar() {
      try {
         Robot robot = new Robot();
         BufferedImage imgFondo = robot.createScreenCapture(this.getBounds());
         BufferedImage img = new BufferedImage(imgFondo.getWidth(), imgFondo.getHeight(), BufferedImage.TYPE_INT_ARGB);
         Graphics2D g = (Graphics2D) img.getGraphics();
         g.drawImage(imgFondo, 0, 0, null);
         float[] s1 = {1f, 1f, 1f, gestor.Configuracion.instanciaUnica().factorSalvaPantalla};
         float[] s2 = new float[4];
         RescaleOp rop = new RescaleOp(s1, s2, null);
         rop.filter(img, img);
         fondo.setIcon(new ImageIcon(img));
      } catch (Exception exc) {
      }
      anchoPan = this.getWidth();
      altoPan = this.getHeight();
      timer.start();
      setVisible(true);
   }
   int c = 25;
   int deltaHor = c;
   int deltaVer = c;

   void ticktimer() {
      comenzado = true;
      java.awt.Point p = label.getLocation();
      int x = p.x;
      int y = p.y;
      if (x + ancho > anchoPan) {
         deltaHor = -c;
      } else if (x < 0) {
         deltaHor = c;
         x = -deltaHor;
      }
      x += deltaHor;
      if (y + alto > altoPan) {
         deltaVer = -c;
      } else if (y < 0) {
         deltaVer = c;
         y = -deltaVer;
      }
      y += deltaVer;
      label.setLocation(x, y);
   }

   void desactivar() {
      comenzado = false;
      timer.stop();
      setVisible(false);
   }

   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        label = new SmoothLabel();
        fondo = new javax.swing.JLabel();

        setBackground(new java.awt.Color(0, 0, 0));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setForeground(new java.awt.Color(0, 0, 0));
        setResizable(false);
        setUndecorated(true);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                formMousePressed(evt);
            }
        });

        jPanel1.setBackground(new java.awt.Color(0, 0, 0));
        label.setFont(new java.awt.Font("Tahoma", 0, 80));
        label.setForeground(new java.awt.Color(102, 102, 102));
        label.setText("jLabel1");
        label.setDoubleBuffered(true);
        jPanel1.add(label);

        fondo.setText("jLabel1");
        jPanel1.add(fondo);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void formKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyPressed
       evt.consume();
       if (comenzado) {
          desactivar();
       }
    }//GEN-LAST:event_formKeyPressed

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
       ancho = label.getWidth();
       alto = label.getHeight();
       fondo.setLocation(0, 0);        
    }//GEN-LAST:event_formComponentShown

    private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed
       evt.consume();
       if (comenzado) {
          desactivar();
       }
    }//GEN-LAST:event_formMousePressed

    private void formMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseMoved
       if (comenzado) {
          desactivar();
       }
    }//GEN-LAST:event_formMouseMoved
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel fondo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel label;
    // End of variables declaration//GEN-END:variables
}
