# HG changeset patch # User Matti Hamalainen # Date 1489653774 -7200 # Node ID 55ea5821c802289569246ad9f57a904d9fbf61d7 # Parent 92df534806c4dc1a8e3d5c34e58f9dbb838210c5 Implement "real" widget modality. diff -r 92df534806c4 -r 55ea5821c802 game/Engine.java --- a/game/Engine.java Mon Mar 06 11:55:40 2017 +0200 +++ b/game/Engine.java Thu Mar 16 10:42:54 2017 +0200 @@ -700,18 +700,12 @@ public void mousePressed(MouseEvent e) { - if (widgets.containsObject(aboutBox)) - aboutBox.mousePressed(e); - else - widgets.mousePressed(e); + widgets.mousePressed(e); } public void mouseReleased(MouseEvent e) { - if (widgets.containsObject(aboutBox)) - aboutBox.mouseReleased(e); - else - widgets.mouseReleased(e); + widgets.mouseReleased(e); } public void mouseClicked(MouseEvent e) @@ -725,7 +719,8 @@ public void mouseWheelMoved(MouseWheelEvent e) { - lauta.mouseWheelMoved(e); + if (widgets.getActiveModalWidget() == null) + lauta.mouseWheelMoved(e); } public void keyTyped(KeyEvent e) { } @@ -733,13 +728,7 @@ public void keyPressed(KeyEvent e) { - // Handle keyboard input - - // About box is modal, so pass key events to it when active - if (widgets.containsObject(aboutBox)) - aboutBox.keyPressed(e); - else - widgets.keyPressed(e); + widgets.keyPressed(e); } public void run() diff -r 92df534806c4 -r 55ea5821c802 game/IDMContainer.java --- a/game/IDMContainer.java Mon Mar 06 11:55:40 2017 +0200 +++ b/game/IDMContainer.java Thu Mar 16 10:42:54 2017 +0200 @@ -83,6 +83,10 @@ synchronized public boolean mousePressed(MouseEvent e) { + IDMWidget modal = getActiveModalWidget(); + if (modal != null) + return modal.mousePressed(e); + try { beginIteration(); for (IDMWidget widget : children) @@ -100,6 +104,10 @@ synchronized public boolean mouseReleased(MouseEvent e) { + IDMWidget modal = getActiveModalWidget(); + if (modal != null) + return modal.mouseReleased(e); + try { beginIteration(); for (IDMWidget widget : children) @@ -114,6 +122,10 @@ synchronized public boolean mouseExited(MouseEvent e) { + IDMWidget modal = getActiveModalWidget(); + if (modal != null) + return modal.mouseExited(e); + try { beginIteration(); for (IDMWidget widget : children) @@ -128,6 +140,10 @@ synchronized public boolean mouseEntered(MouseEvent e) { + IDMWidget modal = getActiveModalWidget(); + if (modal != null) + return modal.mouseEntered(e); + try { beginIteration(); for (IDMWidget widget : children) @@ -145,6 +161,10 @@ synchronized public boolean keyPressed(KeyEvent e) { + IDMWidget modal = getActiveModalWidget(); + if (modal != null) + return modal.keyPressed(e); + try { beginIteration(); for (IDMWidget widget : children) @@ -186,4 +206,14 @@ } return false; } + + synchronized public IDMWidget getActiveModalWidget() + { + for (IDMWidget widget : children) + { + if (widget.isModal()) + return widget; + } + return null; + } } diff -r 92df534806c4 -r 55ea5821c802 game/IDMWidget.java --- a/game/IDMWidget.java Mon Mar 06 11:55:40 2017 +0200 +++ b/game/IDMWidget.java Thu Mar 16 10:42:54 2017 +0200 @@ -13,6 +13,7 @@ IDMWidget parent; IDMPoint pos, size, scale; int keyCode; + boolean modalWidget; IDMPoint textCurrPos, textCurrOffs; Paint textPaint; @@ -254,4 +255,14 @@ g.setPaint(savePaint); } + + public boolean isModal() + { + return modalWidget; + } + + public void setModal(boolean m) + { + modalWidget = m; + } }