]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/mag/include/server/user_state
update
[l4.git] / l4 / pkg / mag / include / server / user_state
1 // vi:ft=cpp
2 /*
3  * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
4  *     economic rights: Technische Universität Dresden (Germany)
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  */
10 #pragma once
11
12 #include <l4/mag-gfx/geometry>
13 #include <l4/mag/server/view_stack>
14
15 #include <l4/re/video/view>
16 #include <l4/re/event>
17
18 namespace Mag_server {
19
20 using namespace Mag_gfx;
21
22 class User_state
23 {
24 private:
25   View_stack _vstack;
26   Point _mouse_pos;
27   View *_mouse_cursor;
28   View *_pointed_view;
29
30   Point _next_mouse_pos;
31   int _pressed_keys;
32
33 public:
34   User_state(Canvas *screen, L4Re::Video::View *screen_view,
35              View *cursor, View *bg)
36   : _vstack(screen, screen_view, bg), _mouse_pos(0,0),
37     _mouse_cursor(cursor), _pointed_view(0), _next_mouse_pos(0,0),
38     _pressed_keys(0)
39   {
40     if (_mouse_cursor)
41       vstack()->push_top(_mouse_cursor, true);
42
43     vstack()->update_all_views();
44   }
45
46   void forget_view(View *v)
47   {
48     _vstack.forget_view(v);
49     if (_pointed_view == v)
50       _pointed_view = _vstack.find(_next_mouse_pos);
51
52   }
53
54
55   View_stack *vstack() { return &_vstack; }
56   View_stack const *vstack() const { return &_vstack; }
57
58
59   typedef L4Re::Event_buffer::Event Event;
60
61   virtual void handle_event(Event const &e);
62   virtual ~User_state() {}
63 };
64
65 }