Flows.hx 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  1. import h2d.Tile;
  2. import hxd.Key;
  3. import h2d.Flow;
  4. import h2d.Object;
  5. import h2d.Text.Align;
  6. class Flows extends hxd.App {
  7. // for animation
  8. var hAligns = [FlowAlign.Left, FlowAlign.Middle, FlowAlign.Right];
  9. var vAligns = [FlowAlign.Top, FlowAlign.Middle, FlowAlign.Bottom];
  10. var movingFlow : Flow;
  11. var reversedFlow : Array<Flow> = [];
  12. var vAlignChildFlow : Array<Flow> = [];
  13. var hAlignChildFlow : Array<Flow> = [];
  14. // for screens
  15. var idxFctDisplayed = 9; // also the first screen displayed
  16. var fctGenerationScreen : Array<Void -> Void> = []; // list of functions generating screen
  17. var currentFlows : Array<Flow> = []; // removed when switching screen
  18. var event = new hxd.WaitEvent();
  19. override function init() {
  20. var font = hxd.res.DefaultFont.get();
  21. var colors = [0xff0000, 0x00ffff, 0xffffff, 0x00ff00, 0x0080ff, 0xff8000, 0x7000ff, 0xff00ff, 0x0000ff, 0xff007f, 0x808080, 0xe0e0e0];
  22. var spaceX = 10.0;
  23. var spaceY = 10.0;
  24. // Flows
  25. function createText(parent:Object, color : Int, text : String) {
  26. var flow = new Flow(parent);
  27. flow.backgroundTile = Tile.fromColor(colors[color]);
  28. flow.padding = 5;
  29. flow.horizontalSpacing = 15;
  30. flow.verticalSpacing = 15;
  31. var tf = new h2d.Text(font, flow);
  32. tf.textColor = 0x000000;
  33. tf.textAlign = Align.Left;
  34. tf.text = text;
  35. currentFlows.push(flow);
  36. return flow;
  37. }
  38. function createTitle(text : String) {
  39. return createText(s2d, 11, text + " - Use LEFT and RIGHT ARROWS to switch screen");
  40. }
  41. function createFlowSimple(parent:Object, x : Float, y : Float, size = 75) {
  42. var flow = new Flow(parent);
  43. flow.debug = true;
  44. flow.horizontalSpacing = 15;
  45. flow.verticalSpacing = 15;
  46. flow.padding = 10;
  47. flow.minHeight = Math.ceil(.5 * size);
  48. flow.minWidth = size;
  49. flow.backgroundTile = Tile.fromColor(0xaaaaaa);
  50. flow.x = x;
  51. flow.y = y;
  52. return flow;
  53. }
  54. function createFlow(parent:Object, color : Int, text : String, vAlign:FlowAlign, hAlign:FlowAlign, size = 100) {
  55. var flow = new Flow(parent);
  56. flow.debug = true;
  57. flow.horizontalAlign = hAlign;
  58. flow.verticalAlign = vAlign;
  59. flow.horizontalSpacing = 15;
  60. flow.verticalSpacing = 15;
  61. flow.padding = 5;
  62. flow.minHeight = Math.ceil(.5 * size);
  63. flow.minWidth = size;
  64. flow.backgroundTile = Tile.fromColor(0x888888);
  65. createText(flow, color, text);
  66. return flow;
  67. }
  68. function createFlowWithText(parent:Object, size : Int, vAlign: FlowAlign, hAlign : FlowAlign, text : String) {
  69. var flow = new Flow(parent);
  70. flow.debug = true;
  71. flow.verticalAlign = vAlign;
  72. flow.horizontalAlign = hAlign;
  73. flow.horizontalSpacing = 15;
  74. flow.verticalSpacing = 15;
  75. flow.padding = 10;
  76. flow.minHeight = Math.ceil(.5 * size);
  77. flow.minWidth = size;
  78. flow.backgroundTile = Tile.fromColor(0x888888);
  79. var tf = new h2d.Text(font, flow);
  80. tf.textColor = 0x000000;
  81. tf.textAlign = Align.Left;
  82. tf.text = text;
  83. return flow;
  84. }
  85. function screen0() : Void {
  86. var title = createTitle("0°) 9 flows with text inline");
  87. var yoffset = title.getBounds().height + spaceY;
  88. var xoffset = spaceX;
  89. var flow;
  90. flow = createFlowSimple(s2d, xoffset, yoffset);
  91. createFlow(flow, 1, "TopLeft", FlowAlign.Top, FlowAlign.Left);
  92. createFlow(flow, 2, "TopMiddle", FlowAlign.Top, FlowAlign.Middle);
  93. createFlow(flow, 3, "TopRight", FlowAlign.Top, FlowAlign.Right);
  94. createFlow(flow, 4, "CentLeft", FlowAlign.Middle, FlowAlign.Left);
  95. createFlow(flow, 5, "CentMiddle", FlowAlign.Middle, FlowAlign.Middle);
  96. createFlow(flow, 6, "CentRight", FlowAlign.Middle, FlowAlign.Right);
  97. createFlow(flow, 7, "BotLeft", FlowAlign.Bottom, FlowAlign.Left);
  98. createFlow(flow, 8, "BotMiddle", FlowAlign.Bottom, FlowAlign.Middle);
  99. createFlow(flow, 9, "BotRight", FlowAlign.Bottom, FlowAlign.Right);
  100. currentFlows.push(flow);
  101. }
  102. function screen1() : Void {
  103. var title = createTitle("1°) 3 flows with text inline in 3 flows inline");
  104. var yoffset = title.getBounds().height + spaceY;
  105. var xoffset = spaceX;
  106. var flow;
  107. var subFlow;
  108. flow = createFlowSimple(s2d, xoffset, yoffset);
  109. subFlow = createFlowSimple(flow, 0, 0);
  110. createFlow(subFlow, 1, "TopLeft", FlowAlign.Top, FlowAlign.Left);
  111. createFlow(subFlow, 2, "TopMiddle", FlowAlign.Top, FlowAlign.Middle);
  112. createFlow(subFlow, 3, "TopRight", FlowAlign.Top, FlowAlign.Right);
  113. subFlow = createFlowSimple(flow, 0, 0);
  114. createFlow(subFlow, 1, "CentLeft", FlowAlign.Middle, FlowAlign.Left);
  115. createFlow(subFlow, 2, "CentMiddle", FlowAlign.Middle, FlowAlign.Middle);
  116. createFlow(subFlow, 3, "CentRight", FlowAlign.Middle, FlowAlign.Right);
  117. subFlow = createFlowSimple(flow, 0, 0);
  118. createFlow(subFlow, 1, "BotLeft", FlowAlign.Bottom, FlowAlign.Left);
  119. createFlow(subFlow, 2, "BotMiddle", FlowAlign.Bottom, FlowAlign.Middle);
  120. createFlow(subFlow, 3, "BotRight", FlowAlign.Bottom, FlowAlign.Right);
  121. currentFlows.push(flow);
  122. }
  123. function screen2() : Void {
  124. var title = createTitle("2°) 1 flow with text in 1 flow in 1 flow : all alignments");
  125. var yoffset = title.getBounds().height + spaceY;
  126. var xoffset = spaceX;
  127. var flow = createFlowSimple(s2d, xoffset, yoffset);
  128. flow.minHeight = 200;
  129. flow.minWidth = 400;
  130. flow.verticalAlign = FlowAlign.Top;
  131. flow.horizontalAlign = FlowAlign.Left;
  132. flow.layout = Vertical;
  133. var subFlow = createFlowSimple(flow, 0, 0);
  134. subFlow.minHeight = 100;
  135. subFlow.minWidth = 200;
  136. subFlow.verticalAlign = FlowAlign.Top;
  137. subFlow.horizontalAlign = FlowAlign.Left;
  138. movingFlow = createFlow(subFlow, 1, "Text", FlowAlign.Top, FlowAlign.Left);
  139. currentFlows.push(flow);
  140. }
  141. function screen3() : Void {
  142. var title = createTitle("3°) 3 flows with text inline inside 3 flows in column");
  143. var yoffset = title.getBounds().height + spaceY;
  144. var xoffset = spaceX;
  145. var flow;
  146. var subFlow;
  147. flow = createFlowSimple(s2d, xoffset, yoffset);
  148. flow.layout = Vertical;
  149. subFlow = createFlowSimple(flow, 0, 0);
  150. createFlow(subFlow, 1, "TopLeft", FlowAlign.Top, FlowAlign.Left);
  151. createFlow(subFlow, 2, "TopMiddle", FlowAlign.Top, FlowAlign.Middle);
  152. createFlow(subFlow, 3, "TopRight", FlowAlign.Top, FlowAlign.Right);
  153. subFlow = createFlowSimple(flow, 0, 0);
  154. createFlow(subFlow, 4, "CentLeft", FlowAlign.Middle, FlowAlign.Left);
  155. createFlow(subFlow, 5, "CentMiddle", FlowAlign.Middle, FlowAlign.Middle);
  156. createFlow(subFlow, 6, "CentRight", FlowAlign.Middle, FlowAlign.Right);
  157. subFlow = createFlowSimple(flow, 0, 0);
  158. createFlow(subFlow, 7, "BotLeft", FlowAlign.Bottom, FlowAlign.Left);
  159. createFlow(subFlow, 8, "BotMiddle", FlowAlign.Bottom, FlowAlign.Middle);
  160. createFlow(subFlow, 9, "BotRight", FlowAlign.Bottom, FlowAlign.Right);
  161. currentFlows.push(flow);
  162. }
  163. function screen4() : Void {
  164. var title = createTitle("4°) Reversing");
  165. var yoffset = title.getBounds().height + spaceY;
  166. var xoffset = spaceX;
  167. var flow;
  168. function generateFlowsWithThreeFlowsWithThreeChilds(vAlign : FlowAlign, layout) {
  169. function generateFlowThreeChilds(hAlign: FlowAlign) : Flow {
  170. var flow = createFlowSimple(s2d, xoffset, yoffset);
  171. flow.verticalAlign = vAlign;
  172. flow.horizontalAlign = hAlign;
  173. flow.layout = layout;
  174. createFlow(flow, 0, "A", FlowAlign.Middle, FlowAlign.Middle, 50);
  175. createFlow(flow, 3, "B", FlowAlign.Middle, FlowAlign.Middle, 50);
  176. createFlow(flow, 8, "C", FlowAlign.Middle, FlowAlign.Middle, 50);
  177. flow.minHeight = Math.ceil(flow.innerHeight + spaceY*5);
  178. flow.minWidth = Math.ceil(flow.innerWidth + spaceX*5);
  179. return flow;
  180. }
  181. while (reversedFlow.pop() != null) {};
  182. var flow = generateFlowThreeChilds(FlowAlign.Left);
  183. reversedFlow.push(flow);
  184. currentFlows.push(flow);
  185. xoffset += flow.getBounds().width + spaceX;
  186. flow = generateFlowThreeChilds(FlowAlign.Middle);
  187. reversedFlow.push(flow);
  188. currentFlows.push(flow);
  189. xoffset += flow.getBounds().width + spaceX;
  190. flow = generateFlowThreeChilds(FlowAlign.Right);
  191. reversedFlow.push(flow);
  192. currentFlows.push(flow);
  193. return flow;
  194. }
  195. // Are Not Vertical
  196. flow = generateFlowsWithThreeFlowsWithThreeChilds(Top, Horizontal);
  197. yoffset += flow.getBounds().height + spaceY;
  198. flow = generateFlowsWithThreeFlowsWithThreeChilds(Middle, Horizontal);
  199. yoffset += flow.getBounds().height + spaceY;
  200. flow = generateFlowsWithThreeFlowsWithThreeChilds(Bottom, Horizontal);
  201. // Are Vertical
  202. yoffset += flow.getBounds().height + spaceY;
  203. xoffset = spaceX;
  204. flow = generateFlowsWithThreeFlowsWithThreeChilds(Top, Vertical);
  205. yoffset += flow.getBounds().height + spaceY;
  206. flow = generateFlowsWithThreeFlowsWithThreeChilds(Middle, Vertical);
  207. yoffset += flow.getBounds().height + spaceY;
  208. flow = generateFlowsWithThreeFlowsWithThreeChilds(Bottom, Vertical);
  209. }
  210. function screen5() : Void {
  211. var title = createTitle("5°) Multiline + MaxWidth reached | Multiline + MaxHeight reached");
  212. var yoffset = title.getBounds().height + spaceY;
  213. var xoffset = spaceX;
  214. var flow = createFlowSimple(s2d, xoffset, yoffset);
  215. flow.maxWidth = 400;
  216. flow.multiline = true;
  217. createFlow(flow, 1, "A", FlowAlign.Middle, FlowAlign.Middle);
  218. createFlow(flow, 2, "B", FlowAlign.Middle, FlowAlign.Middle);
  219. createFlow(flow, 3, "C", FlowAlign.Middle, FlowAlign.Middle);
  220. createFlow(flow, 4, "D", FlowAlign.Middle, FlowAlign.Middle);
  221. createFlow(flow, 5, "E", FlowAlign.Middle, FlowAlign.Middle);
  222. createFlow(flow, 6, "F", FlowAlign.Middle, FlowAlign.Middle);
  223. createFlow(flow, 7, "G", FlowAlign.Middle, FlowAlign.Middle);
  224. createFlow(flow, 8, "H", FlowAlign.Middle, FlowAlign.Middle);
  225. currentFlows.push(flow);
  226. xoffset += flow.getSize().width + spaceX;
  227. flow = createFlowSimple(s2d, xoffset, yoffset);
  228. flow.maxHeight = 200;
  229. flow.layout = Vertical;
  230. flow.multiline = true;
  231. createFlow(flow, 1, "A", FlowAlign.Middle, FlowAlign.Middle);
  232. createFlow(flow, 2, "B", FlowAlign.Middle, FlowAlign.Middle);
  233. createFlow(flow, 3, "C", FlowAlign.Middle, FlowAlign.Middle);
  234. createFlow(flow, 4, "D", FlowAlign.Middle, FlowAlign.Middle);
  235. createFlow(flow, 5, "E", FlowAlign.Middle, FlowAlign.Middle);
  236. createFlow(flow, 6, "F", FlowAlign.Middle, FlowAlign.Middle);
  237. createFlow(flow, 7, "G", FlowAlign.Middle, FlowAlign.Middle);
  238. createFlow(flow, 8, "H", FlowAlign.Middle, FlowAlign.Middle);
  239. currentFlows.push(flow);
  240. }
  241. function screen6() : Void {
  242. var title = createTitle("6°) Child Properties");
  243. var yoffset = title.getBounds().height + spaceY;
  244. var xoffset = spaceX;
  245. var flow = createFlowSimple(s2d, xoffset, yoffset);
  246. flow.minHeight = 150;
  247. currentFlows.push(flow);
  248. while (vAlignChildFlow.pop() != null) {};
  249. vAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, "v"));
  250. vAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, "v"));
  251. vAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, "v"));
  252. flow.getProperties(vAlignChildFlow[0]).verticalAlign = Top;
  253. flow.getProperties(vAlignChildFlow[1]).verticalAlign = Middle;
  254. flow.getProperties(vAlignChildFlow[2]).verticalAlign = Bottom;
  255. xoffset += flow.getSize().width + 15*spaceX;
  256. flow = createFlowSimple(s2d, xoffset, yoffset);
  257. flow.minWidth = 150;
  258. flow.layout = Vertical;
  259. currentFlows.push(flow);
  260. while (hAlignChildFlow.pop() != null) {};
  261. hAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, ">"));
  262. hAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, ">"));
  263. hAlignChildFlow.push(createFlowWithText(flow, 1, FlowAlign.Middle, null, ">"));
  264. flow.getProperties(hAlignChildFlow[0]).horizontalAlign = Left;
  265. flow.getProperties(hAlignChildFlow[1]).horizontalAlign = Middle;
  266. flow.getProperties(hAlignChildFlow[2]).horizontalAlign = Right;
  267. }
  268. function screen7() : Void {
  269. var title = createTitle("7°) Stack layout");
  270. var yoffset = title.getBounds().height + spaceY;
  271. var xoffset = spaceX;
  272. var flow = createFlowSimple(s2d, xoffset, yoffset);
  273. flow.minHeight = 350;
  274. flow.minWidth = 350;
  275. flow.layout = Stack;
  276. currentFlows.push(flow);
  277. var subFlow;
  278. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "S");
  279. flow.getProperties(subFlow).verticalAlign = FlowAlign.Bottom;
  280. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Middle;
  281. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "SE");
  282. flow.getProperties(subFlow).verticalAlign = FlowAlign.Bottom;
  283. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Right;
  284. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "NO");
  285. flow.getProperties(subFlow).verticalAlign = FlowAlign.Top;
  286. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Left;
  287. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "N");
  288. flow.getProperties(subFlow).verticalAlign = FlowAlign.Top;
  289. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Middle;
  290. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "NE");
  291. flow.getProperties(subFlow).verticalAlign = FlowAlign.Top;
  292. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Right;
  293. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "O");
  294. flow.getProperties(subFlow).verticalAlign = FlowAlign.Middle;
  295. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Left;
  296. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "x");
  297. flow.getProperties(subFlow).verticalAlign = FlowAlign.Middle;
  298. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Middle;
  299. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "E");
  300. flow.getProperties(subFlow).verticalAlign = FlowAlign.Middle;
  301. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Right;
  302. subFlow = createFlowWithText(flow, 1, FlowAlign.Middle, null, "SO");
  303. flow.getProperties(subFlow).verticalAlign = FlowAlign.Bottom;
  304. flow.getProperties(subFlow).horizontalAlign = FlowAlign.Left;
  305. }
  306. function screen8() : Void {
  307. var title = createTitle("8°) Flow + text resize");
  308. var yoffset = title.getBounds().height + spaceY;
  309. var xoffset = spaceX;
  310. var flow = createFlowSimple(s2d, xoffset, yoffset);
  311. flow.minHeight = 350;
  312. flow.minWidth = 350;
  313. flow.layout = Stack;
  314. currentFlows.push(flow);
  315. var sub = new h2d.Flow(flow);
  316. sub.layout = Stack;
  317. sub.fillWidth = true;
  318. sub.fillHeight = true;
  319. sub.debug = true;
  320. var tf = new h2d.Text(font, sub);
  321. tf.textColor = 0x000000;
  322. tf.text = "Example text";
  323. sub.getProperties(tf).align(Top, Middle);
  324. event.waitUntil(function (dt) {
  325. flow.minWidth = flow.maxWidth = 140 + Math.floor(Math.sin(hxd.Timer.lastTimeStamp) * 130);
  326. return idxFctDisplayed != 8;
  327. });
  328. }
  329. function screen9() : Void {
  330. var title = createTitle("9°) Overflow");
  331. var yoffset = title.getBounds().height + spaceY;
  332. var xoffset = spaceX;
  333. var flow = createFlowSimple(s2d, xoffset, yoffset);
  334. flow.maxWidth = 350;
  335. flow.minHeight = flow.maxHeight = 350;
  336. flow.layout = Stack;
  337. flow.overflow = Limit;
  338. currentFlows.push(flow);
  339. var sub = new h2d.Flow(flow);
  340. flow.getProperties(sub).align(Top, Left);
  341. sub.minHeight = 500;
  342. sub.minWidth = 10;
  343. sub.backgroundTile = Tile.fromColor(0x00ff00);
  344. var sub = new h2d.Flow(flow);
  345. flow.getProperties(sub).align(Bottom, Right);
  346. sub.minHeight = 10;
  347. sub.minWidth = 10;
  348. sub.backgroundTile = Tile.fromColor(0xff0000);
  349. // var tf = new h2d.Text(font, sub);
  350. // tf.textColor = 0x000000;
  351. // tf.textAlign = Center;
  352. // tf.text = "Long long long long long long overflowing text";
  353. // sub.getProperties(tf).align(Top, Middle);
  354. event.waitUntil(function (dt) {
  355. flow.minWidth = flow.maxWidth = 180 + Math.floor(Math.sin(hxd.Timer.lastTimeStamp) * 130);
  356. return idxFctDisplayed != 9;
  357. });
  358. }
  359. fctGenerationScreen.push(screen0);
  360. fctGenerationScreen.push(screen1);
  361. fctGenerationScreen.push(screen2);
  362. fctGenerationScreen.push(screen3);
  363. fctGenerationScreen.push(screen4);
  364. fctGenerationScreen.push(screen5);
  365. fctGenerationScreen.push(screen6);
  366. fctGenerationScreen.push(screen7);
  367. fctGenerationScreen.push(screen8);
  368. fctGenerationScreen.push(screen9);
  369. fctGenerationScreen[idxFctDisplayed]();
  370. onResize();
  371. }
  372. var lastUpdate = 0.5;
  373. override function update(dt:Float) {
  374. event.update(dt);
  375. var screenSwitched = false;
  376. if (Key.isPressed(Key.LEFT)) {
  377. idxFctDisplayed -= 1;
  378. screenSwitched = true;
  379. }
  380. if (Key.isPressed(Key.RIGHT)) {
  381. idxFctDisplayed += 1;
  382. screenSwitched = true;
  383. }
  384. if (screenSwitched) {
  385. if (idxFctDisplayed < 0) {
  386. idxFctDisplayed = fctGenerationScreen.length-1;
  387. } else {
  388. idxFctDisplayed = idxFctDisplayed%(fctGenerationScreen.length);
  389. }
  390. for (f in currentFlows) {
  391. f.remove();
  392. }
  393. while (currentFlows.pop() != null) {};
  394. fctGenerationScreen[idxFctDisplayed]();
  395. }
  396. lastUpdate -= dt;
  397. switch (idxFctDisplayed) {
  398. case 2:
  399. if (lastUpdate < 0) {
  400. lastUpdate = .2;
  401. movingFlow.horizontalAlign = hAligns[(hAligns.indexOf(movingFlow.horizontalAlign)+1)%3];
  402. if (movingFlow.horizontalAlign == hAligns[0]) {
  403. movingFlow.verticalAlign = vAligns[(vAligns.indexOf(movingFlow.verticalAlign)+1)%3];
  404. if (movingFlow.verticalAlign == vAligns[0]) {
  405. var parent = hxd.impl.Api.downcast(movingFlow.parent, Flow);
  406. parent.horizontalAlign = hAligns[(hAligns.indexOf(parent.horizontalAlign)+1)%3];
  407. if (parent.horizontalAlign == hAligns[0]) {
  408. parent.verticalAlign = vAligns[(vAligns.indexOf(parent.verticalAlign)+1)%3];
  409. if (parent.verticalAlign == vAligns[0]) {
  410. var parent = hxd.impl.Api.downcast(parent.parent, Flow);
  411. parent.horizontalAlign = hAligns[(hAligns.indexOf(parent.horizontalAlign)+1)%3];
  412. if (parent.horizontalAlign == hAligns[0]) {
  413. parent.verticalAlign = vAligns[(vAligns.indexOf(parent.verticalAlign)+1)%3];
  414. }
  415. }
  416. }
  417. }
  418. }
  419. }
  420. case 4:
  421. if (lastUpdate < 0) {
  422. lastUpdate = 0.5;
  423. for (f in reversedFlow) {
  424. f.reverse = !f.reverse;
  425. }
  426. }
  427. case 6 :
  428. if (lastUpdate < 0) {
  429. lastUpdate = 0.5;
  430. for (f in vAlignChildFlow) {
  431. var prop = currentFlows[1].getProperties(f);
  432. prop.verticalAlign = vAligns[(vAligns.indexOf(prop.verticalAlign)+1)%3];
  433. }
  434. for (f in hAlignChildFlow) {
  435. var prop = currentFlows[2].getProperties(f);
  436. prop.horizontalAlign = hAligns[(hAligns.indexOf(prop.horizontalAlign)+1)%3];
  437. }
  438. }
  439. default:
  440. }
  441. }
  442. static function main() {
  443. hxd.Res.initEmbed();
  444. new Flows();
  445. }
  446. }