Package ModalGUI

Source Code of ModalGUI.ModalGUI

/*******************************************************************************
* This is part of SketchChair, an open-source tool for designing your own furniture.
*     www.sketchchair.cc
*    
*     Copyright (C) 2012, Diatom Studio ltd.  Contact: hello@diatom.cc
*
*     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 ModalGUI;

import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.IntBuffer;

import javax.media.opengl.GL;
import javax.media.opengl.GLCapabilities;

//import codeanticode.glgraphics.GLGraphics;

import cc.sketchchair.core.GLOBAL;
import cc.sketchchair.sketch.LOGGER;

import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PFont;
import processing.core.PGraphics;
import processing.core.PImage;

public class ModalGUI implements MouseWheelListener {
  public static PApplet applet;
  public static PApplet appletStatic;
  boolean clickStartedOn = false;
  public boolean renderOnUpdate = true; //only render components when they're updated or mouse is over.
  public boolean rebuildStencilBuffer = true;
  public static PImage makeImgDown(float w, float h, PImage img) {

    PGraphics pg = appletStatic.createGraphics((int) w, (int) h,
        PApplet.JAVA2D);
    pg.smooth();
    pg.beginDraw();
   
    pg.noStroke();
    pg.background(255);
    pg.rect(0,0,w,h);
   
   
    pg.smooth();
    pg.stroke(200, 200, 200);
    pg.fill(194, 217, 216);

    pg.strokeWeight(1);

    roundrect(pg, 0, 0, w + 4, h + 4, 4);

    //pg.strokeWeight(2);
    //pg.stroke(100, 100, 100);

    //roundrectLeft(pg, 2, 2, w - 4, h - 4, 4);

    int offsetX = (int) ((w - img.width) / 2);
    int offsetY = (int) ((h - img.height) / 2);
    pg.image(img, (int)offsetX, (int)offsetY);
    pg.endDraw();
    return pg;

  }

  public static PImage makeImgDown(PImage img) {
    return makeImgDown(img.width, img.height, img);
  }

  public static PImage makeImgOver(int w, int h, PImage img) {

    PGraphics pg = appletStatic.createGraphics(w, h, PApplet.JAVA2D);
    pg.smooth();
    pg.beginDraw();
   
    pg.noStroke();

    pg.smooth();
    pg.strokeWeight(1);
    pg.stroke(200, 200, 200);
    pg.noFill();

    roundrect(pg, 0, 0, w + 4, h + 4, 4); //right bottom border off texture
    int offsetX = (int) ((w - img.width) / 2);
    int offsetY = (int) ((h - img.height) / 2);
    pg.image(img, (int)offsetX, (int)offsetY);
    pg.endDraw();
    return pg;

  }

  public static PImage makeImgOver(PImage img) {
    return makeImgOver(img.width, img.height, img);
  }

  public static PImage makeImgUp(float w, float h, PImage img) {

    PGraphics pg = appletStatic.createGraphics((int) w, (int) h,
        PApplet.JAVA2D );
    pg.smooth();
    pg.beginDraw();
    pg.smooth();
   
    pg.noStroke();

    pg.stroke(200, 200, 200);
    pg.fill(255, 255, 255);

    int offsetX = (int) ((w - img.width) / 2);
    int offsetY = (int) ((h - img.height) / 2);
    pg.image(img, (int)offsetX, (int)offsetY);
    pg.endDraw();
    return pg;

  }

  static void roundrect(PGraphics g, float x, float y, float w, float h,
      float r) {
/*
*http://quasipartikel.at/2010/01/07/quadratic-bezier-curves-for-processingjs/
    g.beginShape();
    g.vertex(x+r, y);
    g.vertex(x+w-r, y);
    quadraticBezierVertex(g,x+w, y, x+w, y+r,x+w-r,y);
    g.vertex(x+w, y+h-r);
      quadraticBezierVertex(g,x+w, y+h, x+w-r, y+h,x+w, y+h-r);
      g.vertex(x+r, y+h);
      quadraticBezierVertex(g,x, y+h, x, y+h-r,x+r, y+h);
      g.vertex(x, y+r);
      quadraticBezierVertex(g,x, y, x+r, y,x, y+r);
      g.endShape();
     
    */
    g.beginShape();
    g.vertex(x + r, y);
    g.vertex(x + w - r, y);
    g.bezierVertex(x + w, y, x + w, y + r, x + w, y + r);

    g.vertex(x + w, y + r);
    g.vertex(x + w, y + h - r);
    g.bezierVertex(x + w, y + h, x + w - r, y + h, x + w - r, y + h);

    g.vertex(x + w - r, y + h);
    g.vertex(x + r, y + h);
    g.bezierVertex(x, y + h, x, y + h - r, x, y + h - r);

    g.vertex(x, y + h - r);
    g.vertex(x, y + r);
    g.bezierVertex(x, y, x + r, y, x + r, y);
    g.endShape();

    /*
    //line 1
    g.vertex(x, y+h-r);
    g.vertex(x, y+r);
    g.bezierVertex(x, y, x+r, y, x+r, y);
   
   
    //line 1
    g.vertex(x+r, y);
    g.vertex(x+w-r, y);
   
    g.bezierVertex(x+w, y,x+w, y+r, x+w, y+r);
   
   
    //line 1
    g.vertex(x+w, y+r);
    g.vertex(x+w, y+h-r);
   
    g.bezierVertex(x+w, y+h, x+w-r, y+h, x+w-r, y+h);
   
   
    //line 1
    g.vertex(x+w-r, y+h);
    g.vertex(x+r, y+h);
   
   
    g.bezierVertex(x, y+h, x, y+h-r, x, y+h-r);
    */

    g.endShape(g.CLOSE);

  }
 
  static void quadraticBezierVertex(PGraphics g, float cpx, float cpy, float x, float y, float prevX ,float prevY) {
      float cp1x = (float) (prevX + 2.0/3.0*(cpx - prevX));
      float cp1y = (float) (prevY + 2.0/3.0*(cpy - prevY));
      float cp2x = (float) (cp1x + (x - prevX)/3.0);
      float cp2y = (float) (cp1y + (y - prevY)/3.0);

      // finally call cubic Bezier curve function
      g.bezierVertex(cp1x, cp1y, cp2x, cp2y, x, y);
    };
   
   

  static void roundrectLeft(PGraphics g, float x, float y, float w, float h,
      float r) {

    g.beginShape();

    g.vertex(x + r, y + h);
    g.bezierVertex(x, y + h, x, y + h - r, x, y + h - r);

    g.vertex(x, y + h - r);
    g.vertex(x, y + r);
    g.bezierVertex(x, y, x + r, y, x + r, y);

    g.endShape(g.OPEN);

  }

  public GUIComponents components = new GUIComponents();
  public PFont myFontMedium = null;

  public boolean performanceMode = true;

  public boolean physics_on = false;

  public boolean useAlphaMouseOver = false;

  private boolean registeredEvent = false;

  public float labelSize = 12;

  public ModalGUI() {

  }

  public ModalGUI(PApplet main) {
    this.setup(main);

  }

  public void add(GUIComponent component) {
    component.setController(this);
    components.add(component);
  }

  public boolean hasFocus() {
    return components.hasFocus();

  }

  public void keyEvent(KeyEvent keyevent) {
    this.components.keyEvent(keyevent);

  }

  public void mouseEvent(MouseEvent e) {
    this.components.mouseEvent(e);
    if (e.getID() == 501) {
     
      reRender();

     
      if (overComponent())
        clickStartedOn = true;
     
    } else if (e.getID() == 502) {
      reRender();

        clickStartedOn = false;
    }
   
   
  }
 
  @Override
  public void mouseWheelMoved(MouseWheelEvent e) {
    this.components.mouseWheelMoved(e);

  }
 
 

  public boolean overComponent() {
    return components.overComponent();
  }

 
  public boolean clickStartedOn() {
    return clickStartedOn;
  }

  public void reload() {
    this.setup(this.applet);
  }

  public void render(PGraphics g) {
   

    components.render(g);
    /*

    if(rebuildStencilBuffer && renderOnUpdate){
      rebuildStencilBuffer= false;
     
      GL gl = (g);
        GLCapabilities capabilities = new GLCapabilities();
        int bits = capabilities.getStencilBits();
        capabilities.setStencilBits(8);
        bits = capabilities.getStencilBits();
        IntBuffer i = IntBuffer.allocate(100);

       
        gl.glClearStencil(0x0); 
        gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        gl.glClear( GL.GL_STENCIL_BUFFER_BIT);
        gl.glDisable(GL.GL_DEPTH_TEST);

        gl.glGetIntegerv(GL.GL_STENCIL_BITS, i);
        gl.glColorMask(false, false, false, false);

       
          gl.glEnable(GL.GL_STENCIL_TEST);
        gl.glStencilFunc(GL.GL_ALWAYS, 1, 1);                     // Always Passes, 1 Bit Plane, 1 As Mask
        gl.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_REPLACE);
          gl.glDisable(GL.GL_DEPTH_TEST);
         
          components.reRender();
          components.render(g);
          components.reRender();
        gl.glStencilFunc(GL.GL_EQUAL,1, 0xFFFFFFFF);     // mask 

     
    }
  */
  }
 
  public void reRender(){

    components.reRender();
  }

  public void reBuildStencilBuffer(){
    rebuildStencilBuffer = true;
  }
 
  public void reset() {
   
    this.components.reset();
     this.reBuildStencilBuffer();

  }

  public void setup(PApplet main) {
    this.applet = main;
    this.appletStatic = main;

    components = new GUIComponents();
    //  URL res = cl.getResource("data/TrebuchetMS-12.vlw");
    /*
    try {
      //InputStream stream = res.openStream();
     
      //InputStream input = new FileInputStream(res.getPath());
      InputStream input = cl.getResourceAsStream("data/HelveticaNeueLT-Medium-48.vlw");
         // String cn = input.getClass().getName();
          //System.out.println(cn);
         
          DataInputStream is = new DataInputStream(input);

      this.myFontMedium =  new PFont(input);
     
      //if(stream.available() > 0){
        //this.myFont =  new PFont(stream);
      //}
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    */

    //applet.textMode(PApplet.SCREEN);

    if (!registeredEvent) {
     
      applet.registerMouseEvent(this);
      applet.registerKeyEvent(this);
      applet.addMouseWheelListener(this);
      registeredEvent = true;
   

    }
  }

  public boolean textfieldHasFocus() {
    return components.textfieldHasFocus();
  }

  public void update() {
    this.components.update();
  }

  public static String loadedCursor = null;
  public static void setCursor(PApplet applet, PImage _cursorImg){

    if(loadedCursor == null || !loadedCursor.equals(_cursorImg.toString()) ){
      loadedCursor = _cursorImg.toString();
      applet.cursor(_cursorImg,(int)(_cursorImg.width/2),(int)(_cursorImg.height/2));
    }
  }
 
  public static void setCursor(PApplet applet, PImage _cursorImg, int _x, int _y){

    if(loadedCursor == null || !loadedCursor.equals(_cursorImg.toString()) ){
      loadedCursor = _cursorImg.toString();
      applet.cursor(_cursorImg,_x,_y);
    }
  }


}
TOP

Related Classes of ModalGUI.ModalGUI

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.