return window.getApplication().getTheme();
}
+ /**
+ * See if this widget can be drawn onto a screen.
+ *
+ * @return true if this widget is part of the hierarchy that can draw to
+ * a screen
+ */
+ public final boolean isDrawable() {
+ if ((window == null)
+ || (window.getScreen() == null)
+ || (parent == null)
+ ) {
+ return false;
+ }
+ if (parent == this) {
+ return true;
+ }
+ return (parent.isDrawable());
+ }
+
/**
* Draw my specific widget. When called, the screen rectangle I draw
* into is already setup (offset and clipping).
* Called by parent to render to TWindow. Note package private access.
*/
final void drawChildren() {
- if (window == null) {
+ if (!isDrawable()) {
return;
}
// Draw me
draw();
+ if (!isDrawable()) {
+ // An action taken by a draw method unhooked me from the UI.
+ // Bail out.
+ return;
+ }
+
assert (visible == true);
// Continue down the chain. Draw the active child last so that it
for (TWidget widget: children) {
if (widget.isVisible() && (widget != activeChild)) {
widget.drawChildren();
+ if (!isDrawable()) {
+ // An action taken by a draw method unhooked me from the UI.
+ // Bail out.
+ return;
+ }
}
}
if (activeChild != null) {