Package ch.sahits.game.graphic.layout

Source Code of ch.sahits.game.graphic.layout.Spinner

package ch.sahits.game.graphic.layout;

import java.awt.Dimension;
import java.awt.FontFormatException;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.font.GlyphVector;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import ch.sahits.game.graphic.image.ImagesLoader;

public class Spinner extends AbstractMultiselectableComponent<String> {
 
  private Rectangle upSpinner= new Rectangle();
  private Rectangle downSpinner= new Rectangle();
  private final FontMetrics metric;

  private final int TEXT_INSET = 5;

  public Spinner(FontMetrics fm){
    metric = fm;
  }

  @Override
  public void paint(Graphics g) {
    Rectangle rect = getBounds();
    BufferedImage img = painter.createScaledPlank(rect.width, rect.height);
    g.drawImage(img, rect.x, rect.y, img.getWidth(), img.getHeight(), null);
    String s = getSelected();
    if (s!=null && s.length()>0){
      try {
        GlyphVector gv = painter.createGlyphVector(s, getFont().getSize());
        Insets insets = getInsets();
        int x = rect.x+insets.left;
        int y = rect.y+insets.top+rect.height;//
        int descent = metric.getDescent();
        int textHeight = descent+metric.getAscent();
        int space = (rect.height-textHeight)/2;
        // TODO compute the center:
        ((Graphics2D)g).drawGlyphVector(gv, x, y-descent-space); // (x,y) denotes the baseline of the leftmost character
      } catch (FontFormatException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    // Draw spinner buttons
    int xSpaceing = img.getWidth();
      ImagesLoader loader = new ImagesLoader();
      BufferedImage icon = loader.loadImage("SlabUp.png");
    int h = icon.getHeight();
    g.drawImage( icon, rect.x+xSpaceing,rect.y,null);
    upSpinner = new Rectangle(rect.x+xSpaceing, rect.y, icon.getWidth(), icon.getHeight());
      icon = loader.loadImage("SlabDown.png");
    g.drawImage(icon, rect.x+xSpaceing,rect.y+h,null);
    downSpinner = new Rectangle(rect.x+xSpaceing,rect.y+h, icon.getWidth(), icon.getHeight());
   
  }

  @Override
  public Dimension getPreferredSize() {
    int maxSize = 0;
    for (String s : selectables) {
      if (maxSize<s.length()){
        maxSize = s.length();
      }
    }
    final int widthSpinner = 11;
    final int heightSpinner = 14+19;
    final String wString = "m";
    Dimension dim = new Dimension();
    Insets insets = getInsets();
    Rectangle2D rect = createVisualBounds(wString);
    if (rect!=null){
      dim.width=maxSize*(int) Math.rint(rect.getWidth())+insets.right+insets.left+widthSpinner;
    }
    dim.height=heightSpinner;
    return dim;
  }

  public void testClick(MouseEvent e) {
    if (upSpinner.contains(e.getPoint())){
      decSelection();
      gameUpdate();
    } else if (downSpinner.contains(e.getPoint())){
      incSelection();
      gameUpdate();
    }
   
  }
  @Override
  public void testClick(Point p) {
    if (upSpinner.contains(p)){
      decSelection();
      gameUpdate();
    } else if (downSpinner.contains(p)){
      incSelection();
      gameUpdate();
    }
   
  }
//  @Override
//  public void testMouseReleased(MouseEvent e) {
//    // not handled
//  }
//  @Override
//  public void testMouseDrag(MouseEvent e) {
//    // not handled
//  }

}
TOP

Related Classes of ch.sahits.game.graphic.layout.Spinner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.