pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] CVS: Games/Pingus/src/gui component.hxx,1.3,1.4 gui_manager


From: grumbel
Subject: [Pingus-CVS] CVS: Games/Pingus/src/gui component.hxx,1.3,1.4 gui_manager.cxx,1.2,1.3 gui_manager.hxx,1.2,1.3 root_gui_manager.cxx,1.2,1.3 root_gui_manager.hxx,1.2,1.3
Date: 30 Jul 2002 01:58:18 -0000

Update of /usr/local/cvsroot/Games/Pingus/src/gui
In directory dark:/tmp/cvs-serv31318/src/gui

Modified Files:
        component.hxx gui_manager.cxx gui_manager.hxx 
        root_gui_manager.cxx root_gui_manager.hxx 
Log Message:
moved stuff from RootGUIManager to GUIManager

Index: component.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui/component.hxx,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- component.hxx       29 Jul 2002 11:57:38 -0000      1.3
+++ component.hxx       30 Jul 2002 01:58:16 -0000      1.4
@@ -32,7 +32,7 @@
     virtual void draw () =0;
     virtual void update (float delta) {}
     
-    virtual bool is_at (int x, int y) =0;
+    virtual bool is_at (int x, int y) { return false; }
 
     // Events
     /** Gets issued once the primary button is pressed */

Index: gui_manager.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui/gui_manager.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- gui_manager.cxx     29 Jul 2002 10:44:12 -0000      1.2
+++ gui_manager.cxx     30 Jul 2002 01:58:16 -0000      1.3
@@ -17,14 +17,178 @@
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
+#include <iostream>
+#include <vector>
+#include <list>
+#include "../input/event.hxx"
+#include "../input/button_event.hxx"
+#include "../input/pointer_event.hxx"
+
 #include "gui_manager.hxx"
 
 using namespace GUI;
+using namespace Input;
+
+GUIManager::GUIManager ()
+  : pressed_component (0), mouse_over_component (0),
+    x_pos (400), y_pos (300)
+{
+}
+
+void
+GUIManager::draw ()
+{
+  for (std::vector<Component*>::iterator i = components.begin (); 
+       i != components.end (); ++i)
+    {
+      (*i)->draw ();
+    }
+}
 
 void
 GUIManager::update (float delta)
 {
-  
+  for (std::vector<Component*>::iterator i = components.begin (); 
+       i != components.end (); ++i)
+    {
+      (*i)->update (delta);
+    }
+}
+
+void
+GUIManager::process_input (std::list<Event*>& events)
+{
+  for (std::list<Event*>::iterator i = events.begin (); i != events.end (); 
++i)
+    {
+      switch ((*i)->get_type())
+       {
+       case Input::PointerEventType:
+         {
+           PointerEvent* event = dynamic_cast<PointerEvent*>(*i);
+           x_pos = int(event->x);
+           y_pos = int(event->y);
+
+           Component* comp = component_at (x_pos, y_pos);//FIXME
+
+           if (pressed_component)
+             pressed_component->on_pointer_move (x_pos, y_pos);
+           else if (comp)
+             {
+               comp->on_pointer_move (x_pos, y_pos);
+             }
+
+           if (comp)
+             {
+               if (comp != mouse_over_component)
+                 {
+                   if (mouse_over_component != 0)
+                     mouse_over_component->on_pointer_leave ();
+               
+                   comp->on_pointer_enter ();
+                   mouse_over_component = comp;
+                 }
+               else
+                 {
+                   // nothing changed, so we don't trigger events
+                 }
+             }
+           else
+             {
+               if (mouse_over_component)
+                 {
+                   mouse_over_component->on_pointer_leave ();
+                   mouse_over_component = 0;
+                 }
+             }
+           
+           break;
+         }
+       case Input::ButtonEventType:
+         {
+           ButtonEvent* event = dynamic_cast<ButtonEvent*>(*i);
+           //std::cout << "RootGUIManager: Got button event: " << event->name 
<< " " << event->state << std::endl;
+
+           Component* comp = component_at (x_pos, y_pos);//FIXME
+
+           if (comp)
+             {
+               if (event->name == primary && event->state == Input::pressed) 
+                 {
+                   pressed_component = comp;
+                   comp->on_button_press (x_pos, y_pos); // FIXME: dummy data
+                 }
+               else if (event->name == primary && event->state == 
Input::released) 
+                 {
+                   /** Send the release event to the same component
+                       which got the press event */
+                   assert (pressed_component);
+                   pressed_component->on_button_release (x_pos, y_pos);
+
+                   if (pressed_component == comp)
+                     {
+                       comp->on_button_click (x_pos, y_pos);
+                     }
+                   else
+                     {
+                       // discard click
+                     }
+
+                   pressed_component = 0;
+                 }
+             }
+           else
+             {
+               std::cout << "RootGUIManager: Clicked into a non managed 
region" << std::endl;
+               if (pressed_component)
+                 {
+                   pressed_component->on_button_release (x_pos, y_pos);
+                   pressed_component = 0;
+                 }
+             }
+           break;
+         }
+       default:
+         std::cout << "RootGUIManager: unhandled event type " << 
(*i)->get_type() << std::endl;
+         break;
+       }
+    }
+}
+
+void
+GUIManager::add (Component* c, bool delete_component) 
+{ 
+  components.push_back(c); 
+}
+
+void
+GUIManager::remove (Component* c)
+{
+  /* components.erase(c); */ 
+}
+
+Component*
+GUIManager::component_at (int x, int y)
+{
+  for (std::vector<Component*>::iterator i = components.begin (); 
+       i != components.end (); ++i)
+    {
+      if ((*i)->is_at (x, y))
+       return *i;
+    }
+  return 0;
+}
+
+bool
+GUIManager::is_at (int x, int y)
+{
+  for (std::vector<Component*>::iterator i = components.begin (); 
+       i != components.end (); ++i)
+    {
+      if ((*i)->is_at (x, y))
+       return true;
+    }
+
+  return false;
 }
 
 /* EOF */

Index: gui_manager.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui/gui_manager.hxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- gui_manager.hxx     29 Jul 2002 10:44:12 -0000      1.2
+++ gui_manager.hxx     30 Jul 2002 01:58:16 -0000      1.3
@@ -22,6 +22,11 @@
 
 #include "component.hxx"
 
+namespace Input
+{
+  class Event;
+}
+
 namespace GUI
 {
   /** interface class which holds all GUI components and displays
@@ -29,15 +34,38 @@
   class GUIManager : public Component
   {
   private:
+    std::vector<Component*> components;
+
+    /** The component which recieved the last pressed event */
+    Component* pressed_component;
+
+    /** The component over which the mouse was in the last update,
+       used to detecte enter/leave events */
+    Component* mouse_over_component;
+
+    // FIXME: Hack: should be handled inside the controller
+    int x_pos;
+    int y_pos;
   public:
-    GUIManager () {}
+    GUIManager ();
     virtual ~GUIManager () {}
     
-    virtual void draw () =0;
-    virtual void update (float delta) =0;
+    void draw ();
+    void update (float delta);
 
-    virtual void add (Component*)    =0;
-    virtual void remove (Component*) =0;
+    /** Add a component to the manager, if delete_component is true
+       the component will get deleted on destruction of the manager,
+       if false is supplied the user has to handle the component
+       itself */
+    void add (Component*, bool delete_component = true);
+
+    /** */
+    void remove (Component*);
+
+    void process_input (std::list<Input::Event*>& events);
+
+    Component* component_at (int x, int y);  
+    bool is_at (int x, int y);
   };
 }
 

Index: root_gui_manager.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui/root_gui_manager.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- root_gui_manager.cxx        29 Jul 2002 11:57:38 -0000      1.2
+++ root_gui_manager.cxx        30 Jul 2002 01:58:16 -0000      1.3
@@ -19,17 +19,13 @@
 
 #include <iostream>
 #include <list>
-#include "../input/event.hxx"
-#include "../input/button_event.hxx"
-#include "../input/pointer_event.hxx"
 #include "root_gui_manager.hxx"
 
 using namespace GUI;
 using namespace Input;
 
 RootGUIManager::RootGUIManager (Input::Controller* c)
-  : controller(c), pressed_component (0), mouse_over_component (0),
-    x_pos (400), y_pos (300)
+  : controller(c)
 {  
 }
 
@@ -38,155 +34,11 @@
 }
 
 void
-RootGUIManager::draw ()
-{
-  for (std::vector<Component*>::iterator i = components.begin (); 
-       i != components.end (); ++i)
-    {
-      (*i)->draw ();
-    }
-}
-
-void
 RootGUIManager::update (float delta)
 {
   assert (controller);
-
-  for (std::vector<Component*>::iterator i = components.begin (); 
-       i != components.end (); ++i)
-    {
-      (*i)->update (delta);
-    }
-
-  process_input (delta);
-}
-
-void
-RootGUIManager::process_input (float delta)
-{
-  assert (controller);
-
-  std::list<Event*>& events = controller->get_events ();
-
-  for (std::list<Event*>::iterator i = events.begin (); i != events.end (); 
++i)
-    {
-      switch ((*i)->get_type())
-       {
-       case Input::PointerEventType:
-         {
-           PointerEvent* event = dynamic_cast<PointerEvent*>(*i);
-           x_pos = int(event->x);
-           y_pos = int(event->y);
-
-           Component* comp = component_at (x_pos, y_pos);//FIXME
-
-           if (pressed_component)
-             pressed_component->on_pointer_move (x_pos, y_pos);
-           else if (comp)
-             {
-               comp->on_pointer_move (x_pos, y_pos);
-             }
-
-           if (comp)
-             {
-               if (comp != mouse_over_component)
-                 {
-                   if (mouse_over_component != 0)
-                     mouse_over_component->on_pointer_leave ();
-               
-                   comp->on_pointer_enter ();
-                   mouse_over_component = comp;
-                 }
-               else
-                 {
-                   // nothing changed, so we don't trigger events
-                 }
-             }
-           else
-             {
-               if (mouse_over_component)
-                 {
-                   mouse_over_component->on_pointer_leave ();
-                   mouse_over_component = 0;
-                 }
-             }
-           
-           break;
-         }
-       case Input::ButtonEventType:
-         {
-           ButtonEvent* event = dynamic_cast<ButtonEvent*>(*i);
-           //std::cout << "RootGUIManager: Got button event: " << event->name 
<< " " << event->state << std::endl;
-
-           Component* comp = component_at (x_pos, y_pos);//FIXME
-
-           if (comp)
-             {
-               if (event->name == primary && event->state == Input::pressed) 
-                 {
-                   pressed_component = comp;
-                   comp->on_button_press (x_pos, y_pos); // FIXME: dummy data
-                 }
-               else if (event->name == primary && event->state == 
Input::released) 
-                 {
-                   /** Send the release event to the same component
-                       which got the press event */
-                   assert (pressed_component);
-                   pressed_component->on_button_release (x_pos, y_pos);
-
-                   if (pressed_component == comp)
-                     {
-                       comp->on_button_click (x_pos, y_pos);
-                     }
-                   else
-                     {
-                       // discard click
-                     }
-
-                   pressed_component = 0;
-                 }
-             }
-           else
-             {
-               std::cout << "RootGUIManager: Clicked into a non managed 
region" << std::endl;
-               if (pressed_component)
-                 {
-                   pressed_component->on_button_release (x_pos, y_pos);
-                   pressed_component = 0;
-                 }
-             }
-           break;
-         }
-       default:
-         std::cout << "RootGUIManager: unhandled event type " << 
(*i)->get_type() << std::endl;
-         break;
-       }
-    }
-}
-
-Component*
-RootGUIManager::component_at (int x, int y)
-{
-  for (std::vector<Component*>::iterator i = components.begin (); 
-       i != components.end (); ++i)
-    {
-      if ((*i)->is_at (x, y))
-       return *i;
-    }
-  return 0;
-}
-
-bool
-RootGUIManager::is_at (int x, int y)
-{
-  for (std::vector<Component*>::iterator i = components.begin (); 
-       i != components.end (); ++i)
-    {
-      if ((*i)->is_at (x, y))
-       return true;
-    }
-
-  return false;
+  GUIManager::update (delta);
+  process_input (controller->get_events ());
 }
 
 /* EOF */

Index: root_gui_manager.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui/root_gui_manager.hxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- root_gui_manager.hxx        29 Jul 2002 11:57:38 -0000      1.2
+++ root_gui_manager.hxx        30 Jul 2002 01:58:16 -0000      1.3
@@ -31,33 +31,12 @@
   {
   private:
     Input::Controller* controller;
-    std::vector<Component*> components;
-
-    /** The component which recieved the last pressed event */
-    Component* pressed_component;
 
-    /** The component over which the mouse was in the last update,
-       used to detecte enter/leave events */
-    Component* mouse_over_component;
-
-    // FIXME: Hack:
-    int x_pos;
-    int y_pos;
   public:
     RootGUIManager (Input::Controller* c);
     ~RootGUIManager ();
     
-    void draw ();
     void update (float delta);
-
-    bool is_at (int x, int y);
-
-    void process_input (float delta);
-    Component* component_at (int x, int y);
-    
-
-    void add (Component* c) { components.push_back(c); }
-    void remove (Component* c) { /* components.erase(c); */ }
   };
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]