Panda3D

mouseAndKeyboard.cxx
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file mouseAndKeyboard.cxx
10 * @author drose
11 * @date 2002-03-12
12 */
13
14 #include "mouseAndKeyboard.h"
15 #include "mouseData.h"
16 #include "buttonHandle.h"
17 #include "buttonEvent.h"
18 #include "dataNodeTransmit.h"
19 #include "graphicsWindow.h"
20
21 TypeHandle MouseAndKeyboard::_type_handle;
22
23 /**
24 *
25 */
26 MouseAndKeyboard::
27 MouseAndKeyboard(GraphicsWindow *window, int device, const std::string &name) :
28 DataNode(name),
29 _window(window),
30 _device(window->get_input_device(device))
31 {
32 _pixel_xy_output = define_output("pixel_xy", EventStoreVec2::get_class_type());
33 _pixel_size_output = define_output("pixel_size", EventStoreVec2::get_class_type());
34 _xy_output = define_output("xy", EventStoreVec2::get_class_type());
35 _button_events_output = define_output("button_events", ButtonEventList::get_class_type());
36 _pointer_events_output = define_output("pointer_events", PointerEventList::get_class_type());
37
38 _pixel_xy = new EventStoreVec2(LPoint2(0.0f, 0.0f));
39 _pixel_size = new EventStoreVec2(LPoint2(0.0f, 0.0f));
40 _xy = new EventStoreVec2(LPoint2(0.0f, 0.0f));
41
42 _device->enable_pointer_events();
43 }
44
45 /**
46 * Redirects the class to get the data from the mouse and keyboard associated
47 * with a different window and/or device number.
48 */
49 void MouseAndKeyboard::
50 set_source(GraphicsWindow *window, int device) {
51 _window = window;
52 _device = window->get_input_device(device);
53
54 //_device->enable_pointer_events();
55 }
56
57 /**
58 * The virtual implementation of transmit_data(). This function receives an
59 * array of input parameters and should generate an array of output
60 * parameters. The input parameters may be accessed with the index numbers
61 * returned by the define_input() calls that were made earlier (presumably in
62 * the constructor); likewise, the output parameters should be set with the
63 * index numbers returned by the define_output() calls.
64 */
65 void MouseAndKeyboard::
66 do_transmit_data(DataGraphTraverser *, const DataNodeTransmit &,
67 DataNodeTransmit &output) {
68
69 GraphicsWindowInputDevice *device = (GraphicsWindowInputDevice *)_device.p();
70
71 if (device->has_button_event()) {
72 PT(ButtonEventList) bel = device->get_button_events();
73 output.set_data(_button_events_output, EventParameter(bel));
74 }
75 if (device->has_pointer_event()) {
76 PT(PointerEventList) pel = device->get_pointer_events();
77 output.set_data(_pointer_events_output, EventParameter(pel));
78 }
79
80 // Get the window size.
81 WindowProperties properties = _window->get_properties();
82 if (properties.has_size()) {
83 int w = properties.get_x_size();
84 int h = properties.get_y_size();
85
86 _pixel_size->set_value(LPoint2(w, h));
87 output.set_data(_pixel_size_output, EventParameter(_pixel_size));
88
89 if (device->has_pointer()) {
90 PointerData mdata = device->get_pointer();
91
92 if (mdata._in_window) {
93 // Get mouse motion in pixels.
94 _pixel_xy->set_value(LPoint2(mdata._xpos, mdata._ypos));
95 output.set_data(_pixel_xy_output, EventParameter(_pixel_xy));
96
97 // Normalize pixel motion to range [-1,1].
98 PN_stdfloat xf = (PN_stdfloat)(2 * mdata._xpos) / (PN_stdfloat)w - 1.0f;
99 PN_stdfloat yf = 1.0f - (PN_stdfloat)(2 * mdata._ypos) / (PN_stdfloat)h;
100
101 _xy->set_value(LPoint2(xf, yf));
102 output.set_data(_xy_output, EventParameter(_xy));
103 }
104 }
105 }
106 }
buttonEvent.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
buttonHandle.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
ButtonEventList
Records a set of button events that happened recently.
Definition: buttonEventList.h:33
DataGraphTraverser
This object supervises the traversal of the data graph and the moving of data from one DataNode to it...
Definition: dataGraphTraverser.h:32
DataNodeTransmit
Encapsulates the data generated from (or sent into) any particular DataNode.
Definition: dataNodeTransmit.h:32
DataNodeTransmit::set_data
void set_data(int index, const EventParameter &data)
Sets the data for the indicated parameter.
Definition: dataNodeTransmit.I:75
DataNode
The fundamental type of node for the data graph.
Definition: dataNode.h:52
EventParameter
An optional parameter associated with an event.
Definition: eventParameter.h:35
GraphicsWindowInputDevice
This is a virtual input device that represents the keyboard and mouse pair that is associated with a ...
Definition: graphicsWindowInputDevice.h:28
GraphicsWindowInputDevice::get_pointer
PointerData get_pointer() const
Returns the PointerData associated with the input device's pointer.
Definition: graphicsWindowInputDevice.I:19
GraphicsWindow
A window, fullscreen or on a desktop, into which a graphics device sends its output for interactive d...
Definition: graphicsWindow.h:40
GraphicsWindow::get_input_device
get_input_device
Returns the nth input device associated with the window.
Definition: graphicsWindow.h:87
InputDevice::has_pointer
bool has_pointer() const
Returns true if this is a pointing device.
Definition: inputDevice.I:107
InputDevice::has_pointer_event
bool has_pointer_event() const
Returns true if this device has a pending pointer event (a mouse movement), or false otherwise.
Definition: inputDevice.cxx:82
InputDevice::has_button_event
bool has_button_event() const
Returns true if this device has a pending button event (a mouse button or keyboard button down/up),...
Definition: inputDevice.cxx:59
MouseAndKeyboard::set_source
void set_source(GraphicsWindow *window, int device)
Redirects the class to get the data from the mouse and keyboard associated with a different window an...
Definition: mouseAndKeyboard.cxx:50
ParamValue
A handy class object for storing simple values (like integers or strings) passed along with an Event ...
Definition: paramValue.h:103
PointerData
Holds the data that might be generated by a 2-d pointer input device, such as the mouse in the Graphi...
Definition: pointerData.h:38
PointerEventList
Records a set of pointer events that happened recently.
Definition: pointerEventList.h:33
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
WindowProperties
A container for the various kinds of properties we might ask to have on a graphics window before we o...
Definition: windowProperties.h:29
WindowProperties::get_y_size
int get_y_size() const
Returns size in pixels in the y dimension of the useful part of the window, not including decorations...
Definition: windowProperties.I:159
WindowProperties::get_x_size
int get_x_size() const
Returns size in pixels in the x dimension of the useful part of the window, not including decorations...
Definition: windowProperties.I:149
WindowProperties::has_size
has_size
Returns true if the window size has been specified, false otherwise.
Definition: windowProperties.h:93
dataNodeTransmit.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
graphicsWindow.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
mouseAndKeyboard.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
mouseData.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.