ScrollbarContainer.java :  » Game » minime » minime » ui » Java Open Source

Java Open Source » Game » minime 
minime » minime » ui » ScrollbarContainer.java
package minime.ui;

import javax.microedition.lcdui.Graphics;

import minime.Drawable;
import minime.Image;
import minime.Logger;
import minime.Portability;
import minime.core.Component;
import minime.core.Event;
import minime.gen.ImageRscId;

public class ScrollbarContainer extends Component{

  static Logger LOG=Logger.getLogger("ScrollBar");
  private Image scrollBgImage;
  private Image scrollImage;
  private ImagePanel scrollBgPanel;
  private ImagePanel scrollPanel;
  
  
  //The actual height of the sliding image
  private int scrollBarHeight;
  //The y-position of the scroll bar
  private int top=0;
  private IScrollObject scrollableObject;
  
  public ScrollbarContainer(IScrollObject scrollableObject)
  {  
    scrollBgImage=new Image(ImageRscId.IM_SCROLL_BACKGROUND);
    scrollImage=new Image(ImageRscId.IM_SCROLL_IMAGE);
    scrollBgPanel=new ImagePanel(scrollBgImage);
    scrollPanel=new ImagePanel(scrollImage);
    this.scrollableObject=scrollableObject;
  }
  
  public void setHeight(int height)
  {
    scrollableObject.setHeight(height);
    super.setHeight(scrollableObject.getHeight());
  }
  
  public void setWidth(int width)
  {
    scrollableObject.setWidth(width-scrollBgPanel.getWidth());
    super.setWidth(width);
  }
  
  /**
   * Scale the scroll bar background image and the sliding image
   */
  private void scaleScrollImages()
  {   
    scrollBarHeight=(int)(scrollableObject.getDisplayPercentage()*getHeight());
    LOG.debug("scroll background image width: "+scrollBgImage.getWidth()+" height:"+getHeight());
    LOG.debug("scroll sliding image width: "+scrollImage.getWidth()+" height:"+scrollBarHeight);
    scrollBgPanel.setImage(scrollBgImage.scaleBresenham(scrollBgImage.getWidth(),getHeight(),true));
    scrollPanel.setImage(scrollImage.scaleBresenham(scrollImage.getWidth(),scrollBarHeight, true));
  }
  
  protected void layoutImp(){
    scrollableObject.setPosition(0,0);
    scrollableObject.layout();
    if(scrollableObject.isScrollable())
    {  
      scaleScrollImages();
      scrollBgPanel.setPosition(getWidth()-scrollBgPanel.getWidth(),scrollableObject.getStartScrollTop());
      scrollPanel.setPosition(getWidth()-scrollPanel.getWidth(),scrollableObject.getStartScrollTop()+top);
      LOG.debug("Scroll panel top: "+scrollPanel.getTop()+" left:"+scrollPanel.getLeft());  
    }
  }
  
  public void renderImpl(Graphics gc) {
    scrollableObject.render(gc);
    if(scrollableObject.isScrollable())
    {   
      scrollBgPanel.render(gc);
      scrollPanel.render(gc);
    }
  }

  public boolean onEvent(Event evt) {
    boolean handled=false;
    handled=scrollableObject.onEvent(evt);
    if(evt.type==Event.KEY_EVENT&&scrollableObject.isScrollable())
    {  
      //Handle the key_up and key_down event
      if(evt.paramB==Portability.KEY_UP_GAME_ACTION||evt.paramB==Portability.KEY_DOWN_GAME_ACTION)
      {
        top=(int)(scrollableObject.getScrollPercentage()*getHeight())+scrollableObject.getStartScrollTop();
        scrollPanel.setTop(top);
        minime.core.Runtime.getInstance().repaint();
      }
    }
    return handled;
  }
  
  public IScrollObject getScrollableObject() {
    return scrollableObject;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.