Advertisement
razaron

GUI Library/Layer

Jul 1st, 2013
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.72 KB | None | 0 0
  1.  
  2. public class Layer {
  3.     final String ID;
  4.     int lastEvent; // Last event triggered by an element within this layer
  5.    
  6.     Square geomVisible;
  7.     Square geomActual;
  8.    
  9.     double hMin, hMax, hLength, vMin, vMax, vLength;
  10.    
  11.     Element[] elements;
  12.    
  13.    
  14.     public Layer(String ID, Element[] elements, Square geomVisible, Square geomActual){
  15.         this.ID = ID;
  16.         this.elements = elements;
  17.         this.geomActual = geomActual;
  18.         this.geomVisible = geomVisible;
  19.        
  20.        
  21.        
  22.         hMin = (geomVisible.x1-geomActual.x1) / (geomActual.x2-geomActual.x1);
  23.         hMax = (geomVisible.x2-geomActual.x1) / (geomActual.x2-geomActual.x1);
  24.         vMin = (geomVisible.y1-geomActual.y1) / (geomActual.y2-geomActual.y1);
  25.         vMax = (geomVisible.y2-geomActual.y1) / (geomActual.y2-geomActual.y1);
  26.        
  27.         if(hMin < 0)
  28.             hMin = 0;
  29.         if(hMax > 1)
  30.             hMax = 1;
  31.         if(vMin < 0)
  32.             vMin = 0;
  33.         if(vMax > 1)
  34.             vMax = 1;
  35.        
  36.         hLength = hMax-hMin;
  37.         vLength = vMax-vMin;
  38.     }
  39.    
  40.     // Works out which element has been clicked. A return of elements.length mean no elements were clicked.
  41.     public int computeClickedElement(int mouseX, int mouseY){
  42.         int clickedElement = elements.length;
  43.        
  44.         for(int i=0; i<elements.length; i++){
  45.             if(elements[i].geom.x1+geomActual.x1 < mouseX){
  46.                 if(elements[i].geom.x2+geomActual.x1 > mouseX){
  47.                     if(elements[i].geom.y1+geomActual.y1 < mouseY){
  48.                         if(elements[i].geom.y2+geomActual.y1 > mouseY){
  49.                             clickedElement = i;
  50.                             i = elements.length;
  51.                         }
  52.                     }
  53.                 }
  54.             }
  55.             if(geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMin) < mouseX){
  56.                 if(geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMax) > mouseX){
  57.                     if(geomVisible.y1 <= mouseY){
  58.                         if(geomVisible.y1+10 >= mouseY){
  59.                             clickedElement = elements.length+1;
  60.                             i = elements.length;
  61.                         }
  62.                     }
  63.                 }
  64.             }
  65.             if(geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMin) < mouseY){
  66.                 if(geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMax) > mouseY){
  67.                     if(geomVisible.x2-10 <= mouseX){
  68.                         if(geomVisible.x2 >= mouseX){
  69.                             clickedElement = elements.length+2;
  70.                             i = elements.length;
  71.                         }
  72.                     }
  73.                 }
  74.             }
  75.             if(geomVisible.x2-10 < mouseX){
  76.                 if(geomVisible.x2 > mouseX){
  77.                     if(geomVisible.y2-10 < mouseY){
  78.                         if(geomVisible.y2 > mouseY){
  79.                             clickedElement = elements.length+3;
  80.                             i = elements.length;
  81.                         }
  82.                     }
  83.                 }
  84.             }
  85.         }
  86.        
  87.         return clickedElement;
  88.     }
  89.    
  90.     public void resize(int deltaX, int deltaY){
  91.         geomVisible.x2 += deltaX;
  92.         geomVisible.y2 += deltaY;
  93.        
  94.         hMin = (geomVisible.x1-geomActual.x1) / (geomActual.x2-geomActual.x1);
  95.         hMax = (geomVisible.x2-geomActual.x1) / (geomActual.x2-geomActual.x1);
  96.         vMin = (geomVisible.y1-geomActual.y1) / (geomActual.y2-geomActual.y1);
  97.         vMax = (geomVisible.y2-geomActual.y1) / (geomActual.y2-geomActual.y1);
  98.         hLength = hMax-hMin;
  99.         vLength = vMax-vMin;
  100.        
  101.         update();
  102.         System.out.println(geomActual.y2-geomActual.y1);
  103.     }
  104.    
  105.     public void scroll(int deltaX, int deltaY, int direction){
  106.         double p1 = geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMin);
  107.         double p2 = geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMax);
  108.         double q1 = geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMin);
  109.         double q2 = geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMax);
  110.        
  111.         switch(direction){
  112.         case 1:
  113.             hMin = (p1+deltaX-geomVisible.x1)/(geomVisible.x2-geomVisible.x1);
  114.             hMax = (p2+deltaX-geomVisible.x1)/(geomVisible.x2-geomVisible.x1);
  115.             if(hMin < 0){
  116.                 hMax += 0-hMin;
  117.                 hMin = 0;
  118.             }
  119.             if(hMax > 1){
  120.                 hMin += 1-hMax;
  121.                 hMax = 1;
  122.             }
  123.             break;
  124.         case 2:
  125.             vMin = (q1+deltaY-geomVisible.y1)/(geomVisible.y2-geomVisible.y1);
  126.             vMax = (q2+deltaY-geomVisible.y1)/(geomVisible.y2-geomVisible.y1);
  127.             if(vMin < 0){
  128.                 vMax += 0-vMin;
  129.                 vMin = 0;
  130.             }
  131.             if(vMax > 1){
  132.                 vMin += 1-vMax;
  133.                 vMax = 1;
  134.             }
  135.             break;
  136.         }
  137.        
  138.         update();
  139.     }
  140.    
  141.     public void translate(int deltaX, int deltaY){
  142.         geomActual.x1 += deltaX;
  143.         geomActual.x2 += deltaX;
  144.         geomActual.y1 += deltaY;
  145.         geomActual.y2 += deltaY;
  146.        
  147.         geomVisible.x1 += deltaX;
  148.         geomVisible.x2 += deltaX;
  149.         geomVisible.y1 += deltaY;
  150.         geomVisible.y2 += deltaY;
  151.     }
  152.    
  153.     public void update(){
  154.         if(hMax > 1){
  155.             hMax = 1;
  156.             hMin = 1-hLength;
  157.             if(hMin < 0){
  158.                 hMin = 0;
  159.                 hLength = 1;
  160.             }
  161.         }
  162.         if(vMax > 1){
  163.             vMax = 1;
  164.             vMin = 1-vLength;
  165.             if(vMin < 0){
  166.                 vMin = 0;
  167.                 vLength = 1;
  168.             }
  169.         }
  170.        
  171.        
  172.         double tempX1 = geomActual.x1;
  173.         double tempX2 = geomActual.x2;
  174.         double tempY1 = geomActual.y1;
  175.         double tempY2 = geomActual.y2;
  176.        
  177.         geomActual.x1 = geomVisible.x1-(hMin*(tempX2-tempX1));
  178.         geomActual.x2 = geomActual.x1+tempX2-tempX1;
  179.         geomActual.y1 = geomVisible.y1-(vMin*(tempY2-tempY1));
  180.         geomActual.y2 = geomActual.y1+tempY2-tempY1;
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement