Line data Source code
1 :
2 : /* Copyright (c) 2011-2017, Stefan Eilemann <eile@eyescale.ch>
3 : * Daniel Nachbaur <danielnachbaur@gmail.com>
4 : *
5 : * This library is free software; you can redistribute it and/or modify it under
6 : * the terms of the GNU Lesser General Public License version 2.1 as published
7 : * by the Free Software Foundation.
8 : *
9 : * This library is distributed in the hope that it will be useful, but WITHOUT
10 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 : * details.
13 : *
14 : * You should have received a copy of the GNU Lesser General Public License
15 : * along with this library; if not, write to the Free Software Foundation, Inc.,
16 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 : */
18 :
19 : #ifndef EQSEQUEL_VIEWDATA_H
20 : #define EQSEQUEL_VIEWDATA_H
21 :
22 : #include <co/serializable.h> // base class
23 : #include <eq/fabric/vmmlib.h>
24 : #include <seq/api.h>
25 : #include <seq/types.h>
26 :
27 : namespace seq
28 : {
29 : /** Stores per-view data. */
30 : class ViewData : public co::Serializable
31 : {
32 : public:
33 : /** Construct a new view data. @version 1.0 */
34 : SEQ_API explicit ViewData(View& view);
35 :
36 : /** Destruct this view data. @version 1.0 */
37 : SEQ_API virtual ~ViewData();
38 :
39 : /** @name Operations */
40 : //@{
41 : /**
42 : * Handle the given event command.
43 : *
44 : * The default implementation provides a pointer-based camera model and some
45 : * key event handling, all of which can be modified by overwriting this
46 : * method and handling the appropriate events.
47 : * @version 1.5.1
48 : */
49 : SEQ_API virtual bool handleEvent(eq::EventType type, const SizeEvent&);
50 : SEQ_API virtual bool handleEvent(eq::EventType type, const PointerEvent&);
51 : SEQ_API virtual bool handleEvent(eq::EventType type, const KeyEvent&);
52 : SEQ_API virtual bool handleEvent(const AxisEvent&);
53 : SEQ_API virtual bool handleEvent(const ButtonEvent&);
54 :
55 : /** Rotate the model matrix by the given increments. @version 1.0 */
56 : SEQ_API void spinModel(const float x, const float y, const float z);
57 :
58 : /** Move the model matrix by the given increments. @version 1.0 */
59 : SEQ_API void moveModel(const float x, const float y, const float z);
60 :
61 : /**
62 : * Enable or disable statistics rendering.
63 : *
64 : * The statistics are rendered in the views where they are enabled. The
65 : * default event handler of this view toggles the statistics rendering state
66 : * when 's' is pressed.
67 : *
68 : * @param on the state of the statistics rendering.
69 : * @version 1.0
70 : */
71 : SEQ_API void showStatistics(const bool on);
72 :
73 : /**
74 : * Enable or disable orthographic rendering.
75 : *
76 : * The default event handler of this view toggles the orthographic rendering
77 : * state when 'o' is pressed.
78 : *
79 : * @param on the state of the orthographic rendering.
80 : * @version 1.2
81 : */
82 : SEQ_API void setOrtho(const bool on);
83 :
84 : /**
85 : * Update the view data.
86 : *
87 : * Called once at the end of each frame to trigger animations. The default
88 : * implementation updates the camera data.
89 : *
90 : * @return true to request a redraw.
91 : * @version 1.0
92 : */
93 : SEQ_API virtual bool update();
94 : //@}
95 :
96 : /** @name Data Access. */
97 : //@{
98 : /** Set the current model matrix (global camera). @version 1.11 */
99 : SEQ_API void setModelMatrix(const Matrix4f& matrix);
100 :
101 : /** @return the current model matrix (global camera). @version 1.0 */
102 0 : const Matrix4f& getModelMatrix() const { return _modelMatrix; }
103 : /** @return true is statistics are rendered. @version 1.0 */
104 1 : bool getStatistics() const { return _statistics; }
105 : //@}
106 :
107 : /** @return true when orthographic rendering is enabled. @version 1.2 */
108 0 : bool useOrtho() const { return _ortho; }
109 : //@}
110 :
111 : protected:
112 : SEQ_API void serialize(co::DataOStream& os,
113 : const uint64_t dirtyBits) override;
114 : SEQ_API void deserialize(co::DataIStream& is,
115 : const uint64_t dirtyBits) override;
116 :
117 : /** The changed parts of the object since the last serialize(). */
118 : enum DirtyBits
119 : {
120 : DIRTY_MODELMATRIX = co::Serializable::DIRTY_CUSTOM << 0, // 1
121 : DIRTY_STATISTICS = co::Serializable::DIRTY_CUSTOM << 1, // 2
122 : DIRTY_ORTHO = co::Serializable::DIRTY_CUSTOM << 2, // 4
123 : DIRTY_CUSTOM = co::Serializable::DIRTY_CUSTOM << 3 // 8
124 : };
125 :
126 : private:
127 : View& _view;
128 : Matrix4f _modelMatrix;
129 : int32_t _spinX, _spinY;
130 : int32_t _advance;
131 : bool _statistics;
132 : bool _ortho;
133 : };
134 : }
135 : #endif // EQSEQUEL_VIEWDATA_H
|