[Top][All Lists]
[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); */ }
};
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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,
grumbel <=
- Prev by Date:
[Pingus-CVS] CVS: Games/Pingus/src exit_menu.cxx,1.2,1.3 exit_menu.hxx,1.3,1.4 pingus_menu_manager.cxx,1.4,1.5 pingus_menu_manager.hxx,1.3,1.4 pingus_sub_menu.hxx,1.2,1.3
- Next by Date:
[Pingus-CVS] CVS: Games/Pingus/src/gui gui_manager.cxx,1.3,1.4 gui_manager.hxx,1.3,1.4 root_gui_manager.cxx,1.3,1.4
- Previous by thread:
[Pingus-CVS] CVS: Games/Pingus/src exit_menu.cxx,1.2,1.3 exit_menu.hxx,1.3,1.4 pingus_menu_manager.cxx,1.4,1.5 pingus_menu_manager.hxx,1.3,1.4 pingus_sub_menu.hxx,1.2,1.3
- Next by thread:
[Pingus-CVS] CVS: Games/Pingus/src/gui gui_manager.cxx,1.3,1.4 gui_manager.hxx,1.3,1.4 root_gui_manager.cxx,1.3,1.4
- Index(es):