Guest User

Untitled

a guest
May 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. class Position { int x = 0; int y = 0; }
  2. class Delta { int dx = 0; int dy = 0; }
  3.  
  4. class RectArea
  5. {
  6. Position position = new Position();
  7. Delta delta = new Delta();
  8. color fillColor;
  9. int opacity;
  10.  
  11. RectArea(color fillColor, int opacity)
  12. {
  13. this.fillColor = fillColor;
  14. this.opacity = opacity;
  15. }
  16.  
  17. void setSize(int dx, int dy)
  18. {
  19. delta.dx = dx;
  20. delta.dy = dy;
  21. }
  22.  
  23. boolean hitTest(int posX, int posY)
  24. {
  25. return posX >= position.x && posX <= (position.x + delta.dx) &&
  26. posY >= position.y && posY <= (position.y + delta.dy);
  27. }
  28.  
  29. void initialize() { placeAtCenter(this); }
  30. void setX(int x) { position.x = x; }
  31. void moveX(int dx) { position.x += dx; }
  32. int maybeMoveX(int dx) { return position.x + dx; }
  33.  
  34. void paint()
  35. {
  36. fill(fillColor, opacity);
  37. rect(position.x, position.y, delta.dx, delta.dy);
  38. }
  39. }
  40.  
  41. void placeAtCenter(RectArea area)
  42. {
  43. area.position.x = height / 2 - area.delta.dx / 2;
  44. area.position.y = width / 2 - area.delta.dy / 2;
  45. }
  46.  
  47. boolean drag = false;
  48. boolean inDrag = false;
  49.  
  50. int lastMouseX = 0;
  51.  
  52. int canvasX = 400;
  53. int canvasY = 400;
  54.  
  55. RectArea viewableArea = new RectArea(#93BAF7, 200);
  56. RectArea backgroundArea = new RectArea(#CE7BCE, 255);
  57.  
  58. int scaleBy = 0;
  59. int excessXs = 0;
  60.  
  61. int scrollEdgeX1_b = 0;
  62. int scrollEdgeX2_b = 0;
  63. int scrollEdgeX1_v = 0;
  64. int scrollEdgeX2_v = 0;
  65.  
  66. void setup()
  67. {
  68. size(canvasX, canvasY);
  69. background(0);
  70. noStroke();
  71.  
  72. frameRate(25);
  73. lastMouseX = mouseX;
  74.  
  75. viewableArea.setSize(100, 200);
  76. backgroundArea.setSize(250, 200);
  77.  
  78. backgroundArea.initialize();
  79. backgroundArea.paint();
  80.  
  81. viewableArea.initialize();
  82. viewableArea.paint();
  83.  
  84. float vdx = viewableArea.delta.dx;
  85. float bdx = backgroundArea.delta.dx;
  86. int slack = (int)((3*vdx - bdx)/2);
  87. scaleBy = (int)(vdx / slack);
  88.  
  89. println(scaleBy);
  90.  
  91. scrollEdgeX1_v = viewableArea.position.x - viewableArea.delta.dx;
  92. scrollEdgeX2_v = viewableArea.position.x + viewableArea.delta.dx;
  93. scrollEdgeX1_b = scrollEdgeX1_v;
  94. scrollEdgeX2_b = backgroundArea.position.x + slack;
  95. }
  96.  
  97. void putAtEdge(RectArea r, int x)
  98. {
  99. r.setX(x);
  100. inDrag = false;
  101. }
  102.  
  103. void draw()
  104. {
  105. if (drag)
  106. {
  107. background(0);
  108. backgroundArea.paint();
  109.  
  110. int dx = -1 * (lastMouseX - mouseX);
  111. boolean resetDrag = false;
  112.  
  113. if ( viewableArea.maybeMoveX(dx) < scrollEdgeX1_v )
  114. {
  115. putAtEdge(viewableArea, scrollEdgeX1_v);
  116. putAtEdge(backgroundArea, scrollEdgeX1_b);
  117. }
  118. else if ( viewableArea.maybeMoveX(dx) > scrollEdgeX2_v )
  119. {
  120. putAtEdge(viewableArea, scrollEdgeX2_v);
  121. putAtEdge(backgroundArea, scrollEdgeX2_b);
  122. }
  123. else
  124. {
  125. viewableArea.moveX(dx);
  126. backgroundArea.moveX((dx + excessXs) / scaleBy);
  127. excessXs = (dx + excessXs) % scaleBy;
  128. }
  129.  
  130. viewableArea.paint();
  131. }
  132.  
  133. lastMouseX = mouseX;
  134. }
  135.  
  136. void mouseDragged()
  137. {
  138. if (inDrag)
  139. return;
  140.  
  141. drag = viewableArea.hitTest(mouseX, mouseY);
  142. if (drag)
  143. inDrag = true;
  144. }
  145.  
  146. void mouseReleased()
  147. {
  148. inDrag = false;
  149. drag = false;
  150. }
Add Comment
Please, Sign In to add comment