/* 
* 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;

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;

public class GeneradorRotulo {

   static final Font fntBase = new Font("Arial", Font.BOLD | Font.ITALIC, 24);
   public static float fontSize = 0f;

   public static Image generaRotulo(String texto, javax.swing.JLabel rotulo) {
      int ancho = rotulo.getWidth() -10 ;
      int alto = rotulo.getHeight() - 1;
      Font fuente;
      BufferedImage bmp = new BufferedImage(ancho, alto, BufferedImage.TYPE_INT_RGB);
      Graphics2D g2 = (Graphics2D) bmp.getGraphics();
      g2.setBackground(rotulo.getBackground());
      g2.clearRect(0, 0, ancho, alto);
      RenderingHints rhints = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
      rhints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      rhints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
      g2.addRenderingHints(rhints);
      FontRenderContext frc = g2.getFontRenderContext();
      TextLayout tly = null;
      if (fontSize == 0) {
         while (true) {
            fuente = fntBase.deriveFont(fontSize);
            tly = new TextLayout(texto, fuente, frc);
            Rectangle2D rec = tly.getBounds();
            if (rec.getHeight() < (alto-2) & rec.getWidth() < ancho -10) {
       
               fontSize += 2f;
            } else {
               fontSize -= 2f;
               break;
            }
         }
      }
      fuente = fntBase.deriveFont(fontSize);
      tly = new TextLayout(texto, fuente, frc);
      AffineTransform at = new AffineTransform();
      at.translate(1, alto - tly.getDescent() - 2);
      Shape contorno = tly.getOutline(at);
      g2.setColor(Configuracion.instanciaUnica().rotuloClaro);
      g2.fill(contorno);
      g2.setColor(Configuracion.instanciaUnica().rotuloOscuro);
      g2.draw(contorno);
      return bmp;
   }
}
