changeset 175:55ea5821c802

Implement "real" widget modality.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 16 Mar 2017 10:42:54 +0200
parents 92df534806c4
children 9d3ff9605555
files game/Engine.java game/IDMContainer.java game/IDMWidget.java
diffstat 3 files changed, 46 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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()
--- 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;
+    }
 }
--- 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;
+    }
 }