Package com.pointcliki.ui

Source Code of com.pointcliki.ui.ScrollBar

package com.pointcliki.ui;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.geom.Vector2f;

import com.pointcliki.core.Viewport;
import com.pointcliki.event.Minion;
import com.pointcliki.input.MouseEvent;

public class ScrollBar extends UIEntity {

  /**
   * Serial key
   */
  private static final long serialVersionUID = -4347179484068445655L;
 
  protected Minion<SelectionEvent> fMonitor;
  protected boolean fVertical;
  protected int fTicks = 1;
  protected int fBarSpan = 1;
  protected int fValue = 0;
  protected Vector2f fStart;
  protected int fPrev;
 
  public ScrollBar(Minion<SelectionEvent> monitor, boolean vertical) {
    fMonitor = monitor;
    fVertical = vertical;
    fSpan = new Rectangle(0, 0, 200, 12);
  }
 
  public void ticks(int value) {
    fTicks = value;
  }
  public void barSpan(int value) {
    fBarSpan = value;
  }
  public void value(int val) {
    fValue = Math.max(0, Math.min(fTicks - fBarSpan, val));
  }
 
  public int value() {
    return fValue;
  }

  public void handleUIMouseEvent(String type, Vector2f local, MouseEvent event) {
    fDispatcher.dispatchEvent(type, event);
   
    if (type.equals("mouse.down")) {
      fStart = new Vector2f(event.x(), event.y());
      fPrev = fValue;
    } else if (type.equals("mouse.drag")) {
      // Position
      float offset = 0;
      if (fVertical) offset = event.y() - fStart.y;
      else offset = event.x() - fStart.x;
     
      if (fVertical) offset /= fSpan.getHeight() / fTicks;
      else offset /= fSpan.getWidth() / fTicks;
     
      int prevValue = fValue;
      value((int) offset + fPrev);
     
      if (prevValue != fValue) fMonitor.run(null, "scroll", new SelectionEvent(fValue));
    }
  }
 
  @Override
  public void render(Graphics graphics, Viewport view, long currentTime) {
    super.render(graphics, view, currentTime);
    graphics.setColor(Color.white);
    graphics.fillRect(0, 0, fSpan.getWidth(), fSpan.getHeight());
    if (fHovering) graphics.setColor(new Color(180, 180, 180));
    else graphics.setColor(Color.gray);
    try {
      if (fVertical)
        graphics.fillRect(0, fSpan.getHeight() * ((float) fValue / (float) fTicks), fSpan.getWidth(), fSpan.getHeight() * ((float) fBarSpan / (float) fTicks))
      else
        graphics.fillRect(fSpan.getWidth() * ((float) fValue / (float) fTicks), 0, fSpan.getWidth() * ((float) fBarSpan / (float) fTicks), fSpan.getHeight());
    } catch (Exception e) {
      // Ensure doesn't crash if div by 0
    }
  }
 
  @Override
  public String toString() {
    return "[Scrollbar #" + fID + "]";
  }
}
TOP

Related Classes of com.pointcliki.ui.ScrollBar

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.