X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FCakeLight.java;h=2f77a1477c6ac50f381e9a9a337e4588111a2ff1;hb=HEAD;hp=0c1aa1ac5be2caa68d15c8a598c51389f0f955f1;hpb=fc040bcb6270ff0a4bfaab6cfeaad60edef2a11c;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/CakeLight.java b/src/kaka/cakelight/CakeLight.java index 0c1aa1a..2f77a14 100644 --- a/src/kaka/cakelight/CakeLight.java +++ b/src/kaka/cakelight/CakeLight.java @@ -28,29 +28,27 @@ public class CakeLight { } public void cleanup() { - while (popMode()); + while (popMode() != null); } public void pushMode(Mode mode) { Objects.requireNonNull(mode); if (!modes.isEmpty()) { - stopMode(modes.peek()); + pauseMode(modes.peek()); } modes.push(mode); startMode(mode); // TODO: create a composite fading mode of top of stack and new mode } - public boolean popMode() { - if (!modes.isEmpty()) { + public Mode popMode() { + if (modes.size() > 1) { Mode mode = modes.pop(); stopMode(mode); - if (!modes.isEmpty()) { - startMode(modes.peek()); - } - return true; + resumeMode(modes.peek()); + return mode; } - return false; + return null; // TODO: create a composite fading mode of popped mode and top of stack, unless doing cleanup } @@ -59,6 +57,14 @@ public class CakeLight { mode.enter(config); } + private void pauseMode(Mode mode) { + mode.pause(); + } + + private void resumeMode(Mode mode) { + mode.resume(); + } + private void stopMode(Mode mode) { mode.setFrameListener(ledFrame -> {}); // To avoid any frame being sent to the controller while the thread is exiting mode.exit();