Package org.mt4j.input.gestureAction

Source Code of org.mt4j.input.gestureAction.DefaultButtonClickAction

/***********************************************************************
* mt4j Copyright (c) 2008 - 2009, C.Ruff, Fraunhofer-Gesellschaft All rights reserved.
*   This program is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/
package org.mt4j.input.gestureAction;

import org.mt4j.components.MTComponent;
import org.mt4j.components.TransformSpace;
import org.mt4j.components.interfaces.IclickableButton;
import org.mt4j.components.visibleComponents.shapes.AbstractShape;
import org.mt4j.input.inputProcessors.IGestureEventListener;
import org.mt4j.input.inputProcessors.MTGestureEvent;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapEvent;
import org.mt4j.util.math.Vector3D;


/**
* Default clickgesture action for image buttons.
*
* @author Christopher Ruff
*/
public class DefaultButtonClickAction implements IGestureEventListener  {
 
  /** The poly button. */
  private AbstractShape polyButton;
 
  /** The size change value. */
  private float sizeChangeValue;
 
  /** The width. */
  float width;
 
  /** The height. */
  float height;
 
  /**
   * Instantiates a new default button click action.
   *
   * @param poly the poly
   */
  public DefaultButtonClickAction(AbstractShape poly){
    this.polyButton = poly;
    this.sizeChangeValue = 3;
   
    this.width = polyButton.getWidthXY(TransformSpace.RELATIVE_TO_PARENT);
   
    this.height = polyButton.getHeightXY(TransformSpace.RELATIVE_TO_PARENT);
  }

 
 
  /* (non-Javadoc)
   * @see com.jMT.input.gestureAction.IGestureAction#processGesture(com.jMT.input.inputAnalyzers.GestureEvent)
   */
  public boolean processGestureEvent(MTGestureEvent g) {
//    width = polyButton.getWidthLocal();//
   
    if (g instanceof TapEvent){
      TapEvent clickEvent = (TapEvent)g;
     
     
      if (g.getTargetComponent() instanceof MTComponent){
        MTComponent comp = (MTComponent)g.getTargetComponent();
       
        //Hack for keeping up with the buttons current width if it was changed
        //due to .scale or something sometime
        if (comp instanceof IclickableButton) {
          IclickableButton button = (IclickableButton) comp;
          if (!button.isSelected()){
//            this.width = ((AbstractShape)button).getWidthLocal();
            this.width = getCurrentUnscaledWidth();
           
//            this.getReferenceComp().getWidthVectObjSpace();
//            //TODO aktuelle width holen zu comptoscale relative
//            this.width = this.getReferenceComp().getWidthLocal();
          }
        }
       
        switch (clickEvent.getId()) {
        case MTGestureEvent.GESTURE_DETECTED:
//          if (comp.isGestureAllowed(TapAnalyzer.class)
//            && comp.isVisible()
//          ){
            comp.sendToFront();
//            if ( ((TapEvent)g).getId() == TapEvent.BUTTON_DOWN){
            if ( ((TapEvent)g).getTapID() == TapEvent.BUTTON_DOWN){
             
              //Resize button
//              getCompToResize().setSizeLocal(width-5, width-5);
//              Vector3D centerPoint = this.getRefCompCenterLocal();
//              this.getCompToResize().scale(1/this.getReferenceComp().getWidthLocal(), 1/this.getReferenceComp().getHeightLocal(), 1, centerPoint);
//              this.getCompToResize().scale(width-5, width-5, 1, centerPoint);
             
//              this.resize(width-5, width-5);
             
//              this.shrink(width-shrinkValue, width-shrinkValue);
              this.shrink(width-sizeChangeValue, height-sizeChangeValue);
             
              if (comp instanceof IclickableButton){
                IclickableButton polyButton = (IclickableButton)g.getTargetComponent();
                polyButton.fireActionPerformed((TapEvent)g);
                polyButton.setSelected(true);
              }
            }
//          }
          break;
        case MTGestureEvent.GESTURE_UPDATED:
          //NOTE: usually click gesture analyzers dont send gesture update events
//          if (comp.isGestureAllowed(TapAnalyzer.class)
//              && comp.isVisible()
//            ){
//            if ( ((TapEvent)g).getId() == TapEvent.BUTTON_DOWN){
          if ( ((TapEvent)g).getTapID() == TapEvent.BUTTON_DOWN){
              if (comp instanceof IclickableButton){
                IclickableButton polyButton = (IclickableButton)g.getTargetComponent();
                polyButton.fireActionPerformed((TapEvent)g);
              }
            }
//          }
          break;
        case MTGestureEvent.GESTURE_ENDED:
         
//          if (comp.isGestureAllowed(TapAnalyzer.class)
//              && comp.isVisible()
//            ){
//            if ( ((TapEvent)g).getId() == TapEvent.BUTTON_CLICKED
//              || ((TapEvent)g).getId() == TapEvent.BUTTON_UP
//            ){
            if ( ((TapEvent)g).getTapID() == TapEvent.BUTTON_CLICKED
                || ((TapEvent)g).getTapID() == TapEvent.BUTTON_UP
              ){
              //Resize button
//              polyButton.setSizeLocal(width, width);
//              this.resize(width, width);
             
//              this.enlarge(width, width);
              this.enlarge(width, height);
             
//              Vector3D centerPoint = this.getRefCompCenterLocal();
//              this.getCompToResize().scale(1/this.getReferenceComp().getWidthLocal(), 1/this.getReferenceComp().getHeightLocal(), 1, centerPoint);
//              this.getCompToResize().scale(width, width, 1, centerPoint);
             
              if (comp instanceof IclickableButton){
                IclickableButton polyButton = (IclickableButton)g.getTargetComponent();
                polyButton.fireActionPerformed((TapEvent)g);
                polyButton.setSelected(false);
              }
            }
//          }
          break;
        default:
          break;
        }
      }
    }
    return false;
  }
 
  /**
   * Gets the current unscaled width.
   *
   * @return the current unscaled width
   */
  public float getCurrentUnscaledWidth(){
    return this.getReferenceComp().getWidthXY(TransformSpace.RELATIVE_TO_PARENT);
  }
 
  /**
   * Gets the comp to resize.
   *
   * @return the comp to resize
   */
  public MTComponent getCompToResize(){
    return this.polyButton;
  }
 
  /**
   * Gets the reference comp.
   *
   * @return the reference comp
   */
  protected AbstractShape getReferenceComp(){
    return this.polyButton;
  }
 
  /**
   * Gets the ref comp center local.
   *
   * @return the ref comp center local
   */
  protected Vector3D getRefCompCenterLocal(){
    Vector3D centerPoint;
    if (this.getReferenceComp().hasBounds()){
      centerPoint = this.getReferenceComp().getBounds().getCenterPointLocal();
      centerPoint.transform(this.getReferenceComp().getLocalMatrix()); //macht den punkt in self space
    }else{
      centerPoint = this.getReferenceComp().getCenterPointGlobal();
      centerPoint.transform(this.getReferenceComp().getGlobalInverseMatrix());
      centerPoint.transform(this.getReferenceComp().getLocalMatrix());
    }
    return centerPoint;
   
    //TODO wieder auf localobj space center umstellen?
//    Vector3D centerPoint;
//    if (this.getReferenceComp().isBoundingShapeSet()){
//      centerPoint = this.getReferenceComp().getBoundingShape().getCenterPointObjSpace();
////      centerPoint.transform(this.getReferenceComp().getLocalBasisMatrix()); //macht den punkt in self space
//    }else{
//      centerPoint = this.getReferenceComp().getCenterPointGlobal();
//      centerPoint.transform(this.getReferenceComp().getAbsoluteWorldToLocalMatrix());
////      centerPoint.transform(this.getReferenceComp().getLocalBasisMatrix());
//    }
//    return centerPoint;
  }
 
 
  /**
   * Shrink.
   *
   * @param width the width
   * @param height the height
   */
  protected void shrink(float width, float height){
    this.resize(width,height);
  }
 
  /**
   * Enlarge.
   *
   * @param width the width
   * @param height the height
   */
  protected void enlarge(float width, float height){
//    this.resize(width, width);
    this.resize(width, height);
  }
 
  //TODO besser nur uniform scalen! nur width nehmen zb!
  /**
   * Resize.
   *
   * @param width the width
   * @param height the height
   */
  protected void resize(float width, float height){
    Vector3D centerPoint = this.getRefCompCenterLocal();
    this.getCompToResize().scale(1/this.getReferenceComp().getWidthXY(TransformSpace.RELATIVE_TO_PARENT), 1/this.getReferenceComp().getWidthXY(TransformSpace.RELATIVE_TO_PARENT), 1, centerPoint);
    this.getCompToResize().scale(width, width, 1, centerPoint);
   
    //this uses the obj space - better?
//    Vector3D centerPoint = this.getRefCompCenterLocal();
//    this.getCompToResize().scale(1/this.getReferenceComp().getWidthXY(TransformSpace.RELATIVE_TO_PARENT), 1/this.getReferenceComp().getWidthXY(TransformSpace.RELATIVE_TO_PARENT), 1, centerPoint, TransformSpace.RELATIVE_TO_SELF);
//    this.getCompToResize().scale(width, width, 1, centerPoint, TransformSpace.RELATIVE_TO_SELF);
  }

  /**
   * Gets the size change value.
   *
   * @return the size change value
   */
  public float getSizeChangeValue() {
    return sizeChangeValue;
  }

  /**
   * Sets the size change value.
   *
   * @param shrinkValue the new size change value
   */
  public void setSizeChangeValue(float shrinkValue) {
    this.sizeChangeValue = shrinkValue;
  }
 
 
}
TOP

Related Classes of org.mt4j.input.gestureAction.DefaultButtonClickAction

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.