compositor for 2d glitch effects
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

secondapplet.pde 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. //contains the GUI (ie CP5) in the secondapplet. also contains 3 classes: shaderManager, Brick and Slider
  2. /* todo: implement "solo" and "only up till here" button on bricks */
  3. PImage bin;
  4. int maxSurfaceHeight = 500;
  5. int nativeResoX, nativeResoY;
  6. boolean renderSizeChanged = true;
  7. public class SecondApplet extends PApplet {
  8. ControlP5 cp5;
  9. shaderManager shaderManager = new shaderManager();
  10. ArrayList<Shader> shaderList = new ArrayList<Shader>();
  11. ArrayList<Brick> bricks = new ArrayList<Brick>();
  12. ArrayList<Slider> slider = new ArrayList<Slider>(); //brick
  13. int binX, binY, binS;
  14. public void settings() {
  15. size(275, 120);
  16. }
  17. public void setup() {
  18. surface.setLocation(285, 240);
  19. List l = Arrays.asList(availableFx);
  20. cp5 = new ControlP5(this);
  21. cp5.addScrollableList("")
  22. .setPosition(10, height-110)
  23. .setSize(80, 100)
  24. .setBarHeight(0)
  25. .setItemHeight(20)
  26. .plugTo(this, "CP5_listActions")
  27. .addItems(l)
  28. .setType(ControlP5.LIST);
  29. Toggle rec = cp5.addToggle("record")
  30. .setPosition(100, height-105)
  31. .setSize(15, 15)
  32. .plugTo(this, "CP5_recordAction");
  33. rec.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  34. Toggle auto = cp5.addToggle("spawn playing")
  35. .setPosition(100, height-85)
  36. .setSize(15, 15)
  37. .setValue(true)
  38. .plugTo(this, "CP5_spawnPlayingAction");
  39. auto.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  40. Bang pauseAll = cp5.addBang("pause all")
  41. .setPosition(100, height-65)
  42. .setSize(15, 15)
  43. .plugTo(this, "CP5_pauseAllAction");
  44. pauseAll.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  45. Bang nativeReso = cp5.addBang("native reso")
  46. .setPosition(220, height-35)
  47. .setSize(15, 15)
  48. .plugTo(this, "CP5_nativeResoAction");
  49. //nativeReso.getCaptionLabel().getStyle().setMargin(-17,0,0,20);
  50. /*
  51. Toggle saveParams = cp5.addToggle("save parameters")
  52. .setPosition(100, height-45)
  53. .setSize(15, 15)
  54. .plugTo(this, "CP5_saveParamsAction");
  55. saveParams.getCaptionLabel().getStyle().setMargin(-17,0,0,20);
  56. */
  57. binX = width-55;
  58. binY = height-85;
  59. binS = 40;
  60. }
  61. void CP5_nativeResoAction() {
  62. renderSize = max(nativeResoX, nativeResoY);
  63. //renderer.setSize(nativeResoX, nativeResoY);
  64. }
  65. void CP5_recordAction() {
  66. recording = !recording;
  67. }
  68. void CP5_spawnPlayingAction() {
  69. spawnPlaying = !spawnPlaying;
  70. }
  71. void CP5_pauseAllAction() {
  72. for (int i = 0; i < bricks.size(); i++) {
  73. if (!bricks.get(i).paused) bricks.get(i).playPause();
  74. }
  75. }
  76. int totalBrickHeight;
  77. public void draw() {
  78. background(68, 68, 68);
  79. pushMatrix();
  80. if (heightOverLimit) {
  81. translate(0, scrollAmount);
  82. }
  83. totalBrickHeight = 0;
  84. for (int i = 0; i < shaderList.size(); i++) {
  85. bricks.get(i).update();
  86. bricks.get(i).display();
  87. //bricks.get(i).y = totalBrickHeight; ????? what was that for
  88. totalBrickHeight+= bricks.get(i).h;
  89. }
  90. popMatrix();
  91. if (heightOverLimit) {
  92. strokeWeight(3);
  93. fill(255);
  94. line(width-5, -scrollAmount+4, width-5, height-120+(maxSurfaceHeight-120-totalBrickHeight)-scrollAmount-4);
  95. //-scrollAmount + (-1*(maxSurfaceHeight-120-totalBrickHeight)));
  96. }
  97. fill(68, 68, 68);
  98. noStroke();
  99. rect(0, height-120, width, 120);
  100. image(bin, binX, binY, binS, binS);
  101. stroke(255);
  102. strokeWeight(1);
  103. textSize(25);
  104. fill(255);
  105. text(renderer.width + "x" + renderer.height, 100, height-18);
  106. textSize(10);
  107. line(0, height-120, width, height-120);
  108. if (pressedBrick != -1) {
  109. fill(255);
  110. noStroke();
  111. rect(mouseX, mouseY, 35, 15);
  112. }
  113. }
  114. boolean heightOverLimit;
  115. void refreshSurface(int mode) {
  116. int currentBrickHeight = 0;
  117. if (shaderList.size() > 0) {
  118. if (mode == 0) {
  119. currentBrickHeight = totalBrickHeight + bricks.get(shaderList.size()-1).h;
  120. surface.setSize(width, height+bricks.get(shaderList.size()-1).h);
  121. } else if (mode == 1) {
  122. currentBrickHeight = totalBrickHeight - bricks.get(pressedBrick).h;
  123. if (heightOverLimit) {
  124. surface.setSize(width, currentBrickHeight+120);
  125. } else {
  126. surface.setSize(width, height-bricks.get(pressedBrick).h);
  127. }
  128. }
  129. } else {
  130. surface.setSize(width, 120);
  131. }
  132. if (currentBrickHeight + 120 > maxSurfaceHeight) {
  133. surface.setSize(width, maxSurfaceHeight);
  134. heightOverLimit = true;
  135. } else {
  136. heightOverLimit = false;
  137. scrollAmount = 0;
  138. }
  139. cp5.setPosition(0, height-120);
  140. binY = height-87;
  141. }
  142. class shaderManager {
  143. void addShader(Shader shader) {
  144. shaderList.add(shader);
  145. shader.pos = shaderList.size()-1;
  146. bricks.add(new Brick(shaderList.size()-1, shaderList.get(shaderList.size()-1).params, shader.name));
  147. refreshSurface(0);
  148. //if (!spawnPlaying) bricks.get(shaderList.size()-1).pauseAllSliders();
  149. println("Added " + shader + " to fxList at spot. List length: " + shaderList.size());
  150. }
  151. void swapShader(int pos1, int pos2) {
  152. Collections.swap(shaderList, pos1, pos2);
  153. Collections.swap(bricks, pos1, pos2);
  154. shaderList.get(pos1).pos = pos1;
  155. shaderList.get(pos2).pos = pos2;
  156. bricks.get(pos1).setPos(pos1);
  157. bricks.get(pos2).setPos(pos2);
  158. for (int i = 0; i < bricks.size(); i++) {
  159. bricks.get(i).updateSliderPos();
  160. }
  161. for (int i = min(pos1, pos2); i < shaderList.size(); i++) {
  162. //println(i);
  163. //shaderList.get(i).change = true;
  164. }
  165. }
  166. void moveShader(int pos1, int pos2) {
  167. if (pos2 > pos1) {
  168. pos2 -=1;
  169. for (int i = pos1; i < pos2; i++) {
  170. swapShader(i, i+1);
  171. }
  172. } else {
  173. for (int i = pos1; i > pos2; i--) {
  174. swapShader(i, i-1);
  175. }
  176. }
  177. for (int i = max(pos1, pos2); i > 0; i--) {
  178. //println(i);
  179. //shaderList.get(i).change = true;
  180. }
  181. }
  182. void removeShader(int pos) {
  183. if (pos >= 0 && shaderList.size() > pos) {
  184. refreshSurface(1);
  185. shaderList.remove(pos);
  186. bricks.remove(pos);
  187. for (int i = shaderList.size()-1; i > -1; i--) {
  188. bricks.get(i).setPos(i);
  189. bricks.get(i).updateSliderPos();
  190. shaderList.get(i).pos = i;
  191. }
  192. }
  193. for (int i = pos; i < shaderList.size(); i++) {
  194. //shaderList.get(i).change = true;
  195. }
  196. }
  197. int previousRenderSize = renderSize;
  198. void applyShader() {
  199. renderSizeChanged = true;
  200. if (previousRenderSize != renderSize)
  201. previousRenderSize = renderSize;
  202. else
  203. renderSizeChanged = false;
  204. for (int i = 0; i < shaderList.size(); i++) {
  205. try {
  206. shaderList.get(i).getValuesFromGUI();
  207. if (bricks.get(i).active) {
  208. //shaderList.get(i).getValuesFromGUI();
  209. shaderList.get(i).shade();
  210. }
  211. }
  212. catch(Exception e) {
  213. println("Warning: Brick not yet loaded");
  214. }
  215. if (i > maxFx) break;
  216. }
  217. }
  218. }
  219. int pressedBrick = -1;
  220. class Brick {
  221. ArrayList<Slider> slider = new ArrayList<Slider>();
  222. ArrayList<Param> params = new ArrayList<Param>();
  223. boolean active, paused, dragging, dragHovering, hovering, hoveringLineAbove, hoveringLineBelow, hoverActiveButton, hoverPauseButton;
  224. boolean[] pauseStates;
  225. color brickBGcol;
  226. int pos;
  227. int h, y;
  228. String name;
  229. Brick(int pos_, ArrayList params_, String name_) {
  230. name = name_;
  231. pos = pos_;
  232. params = params_;
  233. active = true;
  234. y = totalBrickHeight;
  235. h = 20 + params.size() * 20;
  236. for (int i = 0; i < params.size(); i++) {
  237. slider.add(new Slider(10, 20+(20*i)+y, 230, 12, params.get(i).minValue, params.get(i).maxValue, params.get(i).name, params.get(i).type, params.get(i).osciModes)); //add possible waves to slider
  238. }
  239. pauseStates = new boolean[slider.size()];
  240. for (int i = 0; i < pauseStates.length; i++) {
  241. pauseStates[i] = false;
  242. }
  243. if (!spawnPlaying) {
  244. playPause();
  245. }
  246. }
  247. void setPos(int pos_) {
  248. pos = pos_;
  249. }
  250. void updateSliderPos() {
  251. y = 0;
  252. for (int i = 0; i < pos; i++) {
  253. y += bricks.get(i).h;
  254. }
  255. for (int i = 0; i < slider.size(); i++) {
  256. slider.get(i).y = 20+(20*i)+y;
  257. }
  258. }
  259. void exchangeSlider(int sliderNo, Param param) {
  260. slider.get(sliderNo).setMinMax(param.minValue, param.maxValue);
  261. slider.get(sliderNo).setMode(param.type);
  262. slider.get(sliderNo).setLabel(param.name);
  263. }
  264. void playPause() {
  265. paused = !paused;
  266. if (paused) {
  267. pauseAllSliders();
  268. } else {
  269. resumeAllSliders();
  270. }
  271. }
  272. void toggleActive() {
  273. active = !active;
  274. //for (int i = pos; i < shaderList.size(); i++) {
  275. // shaderList.get(i).change = true;
  276. //}
  277. }
  278. void pauseAllSliders() {
  279. for (int i = 0; i < slider.size(); i++) {
  280. pauseStates[i] = slider.get(i).animated;
  281. slider.get(i).animated = false;
  282. }
  283. }
  284. void resumeAllSliders() {
  285. for (int i = 0; i < slider.size(); i++) {
  286. slider.get(i).animated = pauseStates[i];
  287. }
  288. }
  289. void update() {
  290. boolean sliderHover = false;
  291. for (int i = 0; i < slider.size(); i++) {
  292. if (slider.get(i).hovering || slider.get(i).hovering_anim_btn) sliderHover = true;
  293. if (paused && slider.get(i).animated) paused = false;
  294. }
  295. if (mouseX > 10 && mouseX < 22 && mouseY > 4+totalBrickHeight+scrollAmount && mouseY < 4+totalBrickHeight+13+scrollAmount) {
  296. hoverActiveButton = true;
  297. } else {
  298. hoverActiveButton = false;
  299. }
  300. if (mouseX > 25 && mouseX < 37 && mouseY > 4+totalBrickHeight+scrollAmount && mouseY < 4+totalBrickHeight+13+scrollAmount) {
  301. hoverPauseButton = true;
  302. } else {
  303. hoverPauseButton = false;
  304. }
  305. if (mouseY > y-5+scrollAmount && mouseY < y+5+scrollAmount && pressedBrick != -1) {
  306. hoveringLineAbove = true;
  307. if (pos > 0) {
  308. bricks.get(pos-1).hovering = false;
  309. }
  310. } else if (pos == bricks.size()-1 && mouseY > y+h-5+scrollAmount && mouseY < y+h+5+scrollAmount && pressedBrick != -1) {
  311. hoveringLineBelow = true;
  312. } else {
  313. hoveringLineBelow = false;
  314. hoveringLineAbove = false;
  315. if (mouseY > totalBrickHeight+scrollAmount && mouseY < totalBrickHeight+h+scrollAmount && !sliderHover && !hoverActiveButton && !hoverPauseButton) {
  316. hovering = true;
  317. } else {
  318. hovering = false;
  319. }
  320. }
  321. for (int i = 0; i < slider.size(); i++) {
  322. slider.get(i).update();
  323. params.get(i).value = slider.get(i).value;
  324. }
  325. brickBGcol = color(85, 85, 85);
  326. }
  327. void press() {
  328. pressedBrick = pos;
  329. }
  330. void display() {
  331. noStroke();
  332. if (active) {
  333. if (dragging) brickBGcol = color(51, 51, 51);
  334. else if (dragHovering && !hoveringLineBelow && !hoveringLineAbove) brickBGcol= color (105, 105, 105);
  335. else brickBGcol = color(85, 85, 85);
  336. } else {
  337. brickBGcol = color(0);
  338. }
  339. fill(brickBGcol);
  340. rect(0, totalBrickHeight, width, h);
  341. fill(255);
  342. text(name, 40, 13+totalBrickHeight, 10);
  343. stroke(255);
  344. strokeWeight(1);
  345. if (active) fill(185);
  346. else noFill();
  347. rect(10, 4+totalBrickHeight, 10, 10);
  348. if (paused) fill(185);
  349. else noFill();
  350. rect(25, 4+totalBrickHeight, 10, 10);
  351. for (int i = 0; i < slider.size(); i++) {
  352. slider.get(i).display();
  353. }
  354. stroke(150);
  355. strokeWeight(1);
  356. line(0, totalBrickHeight+h-1, width, totalBrickHeight+h-1);
  357. if (hoveringLineAbove) {
  358. stroke(200);
  359. strokeWeight(5);
  360. line(0, y, width, y);
  361. }
  362. if (hoveringLineBelow) {
  363. stroke(200);
  364. strokeWeight(5);
  365. line(0, y+h, width, y+h);
  366. }
  367. }
  368. }
  369. int pressedSlider = -1;
  370. //class Slider extends Brick{
  371. class Slider {
  372. int x, y, w, h, mode;
  373. int[] osciModes;
  374. float minVal, maxVal, value; //should be private but doesnt work lol
  375. boolean hovering, hovering_anim_btn, animated;
  376. String label;
  377. Oscillator osci;
  378. Slider(int x_, int y_, int w_, int h_, float minVal_, float maxVal_, String label_, int mode_, int[] osciModes_) {
  379. x = x_;
  380. y = y_;
  381. w = w_;
  382. h = h_;
  383. minVal = minVal_;
  384. maxVal = maxVal_;
  385. mode = mode_;
  386. label = label_ + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  387. osciModes = osciModes_;
  388. osci = new Oscillator(int(random(2, 5)), osciModes);
  389. osci.amplitude(minVal, maxVal);
  390. osci.update();
  391. setValue(osci.value);
  392. animated = true;
  393. slider.add(this);
  394. }
  395. void setPosX(int x_) {
  396. x = x_;
  397. }
  398. void setMinMax(float min, float max) {
  399. float cval = map(value, minVal, maxVal, 0, 10000);
  400. minVal = min;
  401. maxVal = max;
  402. osci.amplitude(minVal, maxVal);
  403. setValue(map(cval, 0, 10000, minVal, maxVal));
  404. }
  405. void setLabel(String lab) {
  406. label = lab + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  407. }
  408. void setMode(int mode_) {
  409. mode = mode_;
  410. }
  411. void press(int myId_) {
  412. pressedSlider = myId_;
  413. animated = false;
  414. setValue(map(mouseX, x, x+w, minVal, maxVal));
  415. }
  416. void setValue(float value_) {
  417. value = value_;
  418. value = constrain(value, minVal, maxVal);
  419. if (mode == INTVAL) value = int(round(value));
  420. }
  421. float getValue() {
  422. return(value);
  423. }
  424. void update() {
  425. osci.update();
  426. if (animated) {
  427. setValue(osci.value);
  428. }
  429. if (mouseX >= x && mouseX <= x+w && mouseY >= y+scrollAmount && mouseY <= y+h+scrollAmount) {
  430. hovering = true;
  431. } else {
  432. hovering = false;
  433. }
  434. if (mouseX >= x+w+5 && mouseX <= x+w+5+15 && mouseY >= y+scrollAmount && mouseY <= y+h+scrollAmount) {
  435. hovering_anim_btn = true;
  436. } else {
  437. hovering_anim_btn = false;
  438. }
  439. }
  440. void display() {
  441. stroke(255);
  442. strokeWeight(1);
  443. fill(100+(40*int(hovering)));
  444. rect(x, y, w, h);
  445. fill(185+(40*int(hovering)));
  446. rect(x, y, map(value, minVal, maxVal, 0, w), h);
  447. fill(255);
  448. text(label, x+5, y+10);
  449. if (animated) {
  450. fill(185+(40*int(hovering_anim_btn)));
  451. } else {
  452. fill(100+(40*int(hovering_anim_btn)));
  453. }
  454. rect(x+w+5, y, h, h);
  455. }
  456. }
  457. //CP5
  458. void CP5_listActions(int n) {
  459. if (shaderList.size() < maxFx) {
  460. switch(n) {
  461. case(0):
  462. shaderManager.addShader(new ASDFPIXELSORT());
  463. break;
  464. case(1):
  465. shaderManager.addShader(new DISTORTER());
  466. break;
  467. case(2):
  468. shaderManager.addShader(new FM());
  469. break;
  470. case(3):
  471. shaderManager.addShader(new WZIP());
  472. break;
  473. case(4):
  474. shaderManager.addShader(new AUECHO());
  475. break;
  476. case(5):
  477. shaderManager.addShader(new SLITSCAN());
  478. break;
  479. case(6):
  480. shaderManager.addShader(new WAHWAH());
  481. break;
  482. case(7):
  483. shaderManager.addShader(new PHASER());
  484. break;
  485. case(8):
  486. shaderManager.addShader(new ECHO());
  487. break;
  488. case(9):
  489. shaderManager.addShader(new DARKER());
  490. break;
  491. case(10):
  492. shaderManager.addShader(new BRIGHTER());
  493. break;
  494. case(11):
  495. shaderManager.addShader(new AMPLIFY());
  496. break;
  497. case(12):
  498. shaderManager.addShader(new BROKENCOLORROT());
  499. break;
  500. case(13):
  501. shaderManager.addShader(new POSTER());
  502. break;
  503. case(14):
  504. shaderManager.addShader(new DUAL());
  505. break;
  506. case(15):
  507. shaderManager.addShader(new GRAUZONE());
  508. break;
  509. case(16):
  510. shaderManager.addShader(new COPYZOOM());
  511. break;
  512. case(17):
  513. shaderManager.addShader(new SUBTLESORT());
  514. break;
  515. case(18):
  516. shaderManager.addShader(new SCANKER());
  517. break;
  518. case(19):
  519. shaderManager.addShader(new MASK());
  520. break;
  521. case(20):
  522. shaderManager.addShader(new DRAWSTROKES());
  523. break;
  524. case(21):
  525. shaderManager.addShader(new DRAWGENERATIVE());
  526. break;
  527. case(22):
  528. shaderManager.addShader(new PIXELDRIFTER());
  529. break;
  530. case(23):
  531. shaderManager.addShader(new DRIPDRIP());
  532. break;
  533. case(24):
  534. shaderManager.addShader(new WRONGQSORT());
  535. break;
  536. case(25):
  537. shaderManager.addShader(new VHS());
  538. break;
  539. case(26):
  540. shaderManager.addShader(new LZ7());
  541. break;
  542. case(27):
  543. shaderManager.addShader(new LENS());
  544. break;
  545. case(28):
  546. shaderManager.addShader(new SLICER());
  547. break;
  548. /*
  549. case(4):
  550. shaderManager.addShader(new AUECHO());
  551. break;
  552. */
  553. default:
  554. break;
  555. }
  556. }
  557. }
  558. void mousePressed() {
  559. for (int i = slider.size()-1; i >= 0; i--) {
  560. Slider s = slider.get(i);
  561. if (s.hovering) s.press(i);
  562. if (s.hovering_anim_btn) s.animated = !s.animated;
  563. }
  564. for (int i = bricks.size()-1; i >= 0; i--) {
  565. if (bricks.get(i).hovering) {
  566. bricks.get(i).press();
  567. }
  568. if (bricks.get(i).hoverActiveButton)
  569. {
  570. bricks.get(i).toggleActive();
  571. }
  572. if (bricks.get(i).hoverPauseButton) bricks.get(i).playPause();
  573. }
  574. }
  575. void mouseDragged() {
  576. if (pressedSlider != -1) {
  577. Slider s = slider.get(pressedSlider);
  578. s.setValue(map(mouseX, s.x, s.x+s.w, s.minVal, s.maxVal));
  579. }
  580. if (pressedBrick != -1) {
  581. bricks.get(pressedBrick).dragging = true;
  582. for (int i = 0; i < bricks.size(); i++) {
  583. if (pressedBrick != i && bricks.get(i).hovering) {
  584. bricks.get(i).dragHovering = true;
  585. } else {
  586. bricks.get(i).dragHovering = false;
  587. }
  588. }
  589. }
  590. }
  591. void mouseReleased() {
  592. if (pressedBrick != -1) {
  593. bricks.get(pressedBrick).dragging = false;
  594. for (int i = 0; i < bricks.size(); i++) {
  595. bricks.get(i).dragHovering = false;
  596. if (pressedBrick != i) {
  597. if (bricks.get(i).hovering && !bricks.get(i).hoveringLineAbove && !bricks.get(i).hoveringLineBelow) {
  598. shaderManager.swapShader(pressedBrick, i);
  599. }
  600. if (pressedBrick != i-1 && bricks.get(i).hoveringLineAbove) {
  601. shaderManager.moveShader(pressedBrick, i);
  602. break;
  603. }
  604. if (bricks.get(i).hoveringLineBelow) {
  605. shaderManager.moveShader(pressedBrick, bricks.size()); //move to last
  606. }
  607. }
  608. }
  609. if (mouseX > binX && mouseX < binX+binS && mouseY > binY && mouseY < binY+binS) {
  610. println("removing");
  611. shaderManager.removeShader(pressedBrick);
  612. }
  613. }
  614. pressedSlider = -1;
  615. pressedBrick = -1;
  616. }
  617. int scrollAmount;
  618. void mouseWheel(MouseEvent event) {
  619. textSize(25);
  620. if (mouseX > 100 && mouseX < textWidth(str(renderer.width) + "x" + str(renderer.height)) + 100 && mouseY > height - 40 && mouseY < height) {
  621. if (event.getCount() < 0) renderSize += 8;
  622. else renderSize -= 8;
  623. renderSize = constrain(renderSize, 8, 15000);
  624. }
  625. if (heightOverLimit && mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height-120) {
  626. for (int i = 0; i < bricks.size(); i++) {
  627. scrollAmount -= event.getCount();
  628. scrollAmount = constrain(scrollAmount, maxSurfaceHeight-120-totalBrickHeight, 0);
  629. //bricks.get(i).y += event.getCount();
  630. //bricks.get(i).updateSliderPos();
  631. }
  632. }
  633. textSize(10);
  634. }
  635. }