!7 static JTextField tf; static SingleComponentPanel scp; static Canvas canvas; static Q q; // action queue static volatile bool boss; // boss mode (after pressing Escape) static L aiConcepts; !include #1007377 // traits for CirclesAndLines p-substance-thread { aiEnhancements(); aiConcepts = loadAIConcepts(); //final S word = getString(random(aiConcepts), /*"name"*/"globalID"); final S word = "vjyukwvgqzhfcxme HELLO"; swing { q = new Q(true); JFrame frame = showFrame(northAndCenter(tf = setTextFieldFontSize(jCenteredTextField(word), 20), scp = new SingleComponentPanel)); registerEscape(frame, r { boss = true; tf.setText(""); scp.noComponent(); }); centerFrame(frameInnerSize(frame, 600, 600)); addMenu(frame, "Menu!", "Show AI Concepts", r { startOrActivate(#1006463) }); onEnterAndNow(tf, r { boss = false; awt { tf.selectAll(); } final S text = getTextTrim(tf); q.add(r { if (boss) ret; long time = sysNow(); loading { final CirclesAndLines cal = renderText(text); if (boss) ret; awt { scp.setComponent(centerAndSouth(cal.makeCanvas(), setFont(sansSerifBold(20), jcenteredlabel(text)))); } } sleepUntilSys(time+1000); // min display time }); }); hideConsole(); } } static CirclesAndLines renderText(S s) { new Matches m; new CirclesAndLines cal; if "vjyukwvgqzhfcxme *" cal.circle(unquote($1), 0.5, 0.5); ret cal; }