<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>gtkglextmm: logo.h</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.4 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="examples.html">Examples</a></div> <h1>logo.h</h1>GtkGLExt logo demo.<p> <div class="fragment"><pre class="fragment"><span class="comment">// -*- C++ -*-</span> <span class="comment">/*</span> <span class="comment"> * logo.h:</span> <span class="comment"> * GtkGLExt logo demo.</span> <span class="comment"> *</span> <span class="comment"> * written by Naofumi Yasufuku <naofumi@users.sourceforge.net></span> <span class="comment"> */</span> <span class="preprocessor">#ifndef _LOGO_H</span> <span class="preprocessor"></span><span class="preprocessor">#define _LOGO_H</span> <span class="preprocessor"></span> <span class="preprocessor">#include <gtkmm.h></span> <span class="preprocessor">#include <<a class="code" href="gtkglmm_8h.html">gtkglmm.h</a>></span> <span class="comment">//</span> <span class="comment">// Logo classes.</span> <span class="comment">//</span> <span class="comment"></span> <span class="keyword">namespace </span>Logo { <span class="keyword">class </span>Scene; <span class="comment">//</span> <span class="comment">// View class.</span> <span class="comment">//</span> <span class="keyword">class </span>View : <span class="keyword">public</span> sigc::trackable { <span class="keyword">friend</span> <span class="keyword">class </span>Scene; <span class="keyword">public</span>: <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> NEAR_CLIP; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> FAR_CLIP; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_POS_X; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_POS_Y; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_POS_Z; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_AXIS_X; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_AXIS_Y; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_AXIS_Z; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_ANGLE; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> INIT_SCALE; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> SCALE_MAX; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> SCALE_MIN; <span class="keyword">public</span>: View(); <span class="keyword">virtual</span> ~View(); <span class="keyword">public</span>: <span class="keywordtype">void</span> frustum(<span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h); <span class="keywordtype">void</span> xform(); <span class="keywordtype">void</span> reset(); <span class="keywordtype">void</span> set_pos(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) { m_Pos[0] = x; m_Pos[1] = y; m_Pos[2] = z; } <span class="keywordtype">void</span> set_quat(<span class="keywordtype">float</span> q0, <span class="keywordtype">float</span> q1, <span class="keywordtype">float</span> q2, <span class="keywordtype">float</span> q3) { m_Quat[0] = q0; m_Quat[1] = q1; m_Quat[2] = q2; m_Quat[3] = q3; } <span class="keywordtype">void</span> set_scale(<span class="keywordtype">float</span> scale) { m_Scale = scale; } <span class="keyword">protected</span>: <span class="comment">// Signal handlers:</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_button_press_event(GdkEventButton* event, Scene* scene); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_motion_notify_event(GdkEventMotion* event, Scene* scene); <span class="keyword">private</span>: <span class="keywordtype">float</span> m_Pos[3]; <span class="keywordtype">float</span> m_Quat[4]; <span class="keywordtype">float</span> m_Scale; <span class="keywordtype">float</span> m_BeginX; <span class="keywordtype">float</span> m_BeginY; }; <span class="comment">//</span> <span class="comment">// Logo model class.</span> <span class="comment">//</span> <span class="keyword">class </span>Model { <span class="keyword">friend</span> <span class="keyword">class </span>Scene; <span class="keyword">public</span>: <span class="keyword">enum</span> DisplayList { CUBE = 1, G_FORWARD, G_BACKWARD, T_FORWARD, T_BACKWARD, K_FORWARD, K_BACKWARD }; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_SPECULAR[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_SHININESS[1]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_BLACK[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_RED[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_GREEN[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> MAT_BLUE[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DEFAULT_ROT_COUNT; <span class="keyword">public</span>: <span class="keyword">explicit</span> Model(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rot_count = DEFAULT_ROT_COUNT, <span class="keywordtype">bool</span> enable_anim = <span class="keyword">true</span>); <span class="keyword">virtual</span> ~Model(); <span class="keyword">private</span>: <span class="keywordtype">void</span> init_gl(); <span class="keyword">public</span>: <span class="keywordtype">void</span> draw(); <span class="keywordtype">void</span> enable_anim() { m_EnableAnim = <span class="keyword">true</span>; } <span class="keywordtype">void</span> disable_anim() { m_EnableAnim = <span class="keyword">false</span>; } <span class="keywordtype">bool</span> anim_is_enabled()<span class="keyword"> const</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> m_EnableAnim; } <span class="keywordtype">void</span> reset_anim(); <span class="keywordtype">void</span> set_pos(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) { m_Pos[0] = x; m_Pos[1] = y; m_Pos[2] = z; } <span class="keywordtype">void</span> set_quat(<span class="keywordtype">float</span> q0, <span class="keywordtype">float</span> q1, <span class="keywordtype">float</span> q2, <span class="keywordtype">float</span> q3) { m_Quat[0] = q0; m_Quat[1] = q1; m_Quat[2] = q2; m_Quat[3] = q3; } <span class="keyword">private</span>: <span class="comment">// Rotation mode.</span> <span class="keyword">struct </span>RotMode { <span class="keywordtype">float</span> *axis; <span class="keywordtype">float</span> sign; }; <span class="keyword">static</span> <span class="keyword">const</span> RotMode ROT_MODE[]; <span class="keyword">private</span>: <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_RotCount; <span class="keywordtype">bool</span> m_EnableAnim; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_Mode; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_Counter; <span class="keywordtype">float</span> m_Pos[3]; <span class="keywordtype">float</span> m_Quat[4]; }; <span class="comment">//</span> <span class="comment">// Scene class.</span> <span class="comment">//</span> <span class="keyword">class </span>Scene : <span class="keyword">public</span> Gtk::GL::DrawingArea { <span class="keyword">friend</span> <span class="keyword">class </span>View; <span class="keyword">friend</span> <span class="keyword">class </span>Model; <span class="keyword">public</span>: <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> TIMEOUT_INTERVAL; <span class="comment">// OpenGL scene related constants:</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> CLEAR_COLOR[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> CLEAR_DEPTH; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> LIGHT0_POSITION[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> LIGHT0_DIFFUSE[4]; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">float</span> LIGHT0_SPECULAR[4]; <span class="keyword">public</span>: <span class="keyword">explicit</span> Scene(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rot_count = Model::DEFAULT_ROT_COUNT, <span class="keywordtype">bool</span> enable_anim = <span class="keyword">true</span>); <span class="keyword">virtual</span> ~Scene(); <span class="keyword">protected</span>: <span class="comment">// signal handlers:</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_realize(); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_configure_event(GdkEventConfigure* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_expose_event(GdkEventExpose* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_button_press_event(GdkEventButton* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_map_event(GdkEventAny* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_unmap_event(GdkEventAny* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_visibility_notify_event(GdkEventVisibility* event); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_timeout(); <span class="keyword">public</span>: <span class="comment">// Invalidate whole window.</span> <span class="keywordtype">void</span> invalidate() { get_window()->invalidate_rect(get_allocation(), <span class="keyword">false</span>); } <span class="comment">// Update window synchronously (fast).</span> <span class="keywordtype">void</span> update() { get_window()->process_updates(<span class="keyword">false</span>); } <span class="keyword">protected</span>: <span class="comment">// timeout signal connection:</span> sigc::connection m_ConnectionTimeout; <span class="keywordtype">void</span> timeout_add(); <span class="keywordtype">void</span> timeout_remove(); <span class="keyword">public</span>: <span class="comment">// OpenGL scene related methods:</span> <span class="keywordtype">bool</span> anim_is_enabled()<span class="keyword"> const</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> m_Model.anim_is_enabled(); } <span class="keywordtype">void</span> toggle_anim(); <span class="keywordtype">void</span> init_anim(); <span class="keyword">protected</span>: Gtk::Menu* create_popup_menu(); <span class="keyword">protected</span>: <span class="comment">// Popup menu:</span> Gtk::Menu* m_Menu; <span class="keyword">protected</span>: <span class="comment">// OpenGL scene related objects:</span> View m_View; Model m_Model; }; <span class="comment">//</span> <span class="comment">// Application class.</span> <span class="comment">//</span> <span class="keyword">class </span>Application : <span class="keyword">public</span> Gtk::Window { <span class="keyword">public</span>: <span class="keyword">static</span> <span class="keyword">const</span> Glib::ustring APP_NAME; <span class="keyword">public</span>: <span class="keyword">explicit</span> Application(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rot_count = Model::DEFAULT_ROT_COUNT, <span class="keywordtype">bool</span> enable_anim = <span class="keyword">true</span>); <span class="keyword">virtual</span> ~Application(); <span class="keyword">protected</span>: <span class="comment">// signal handlers:</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_button_quit_clicked(); <span class="keyword">virtual</span> <span class="keywordtype">bool</span> on_key_press_event(GdkEventKey* event); <span class="keyword">protected</span>: <span class="comment">// member widgets:</span> Gtk::VBox m_VBox; Scene m_Scene; Gtk::Button m_ButtonQuit; }; } <span class="comment">// namespace Logo</span> <span class="preprocessor">#endif // _LOGO_H</span> </pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Feb 27 18:46:52 2006 for gtkglextmm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4 </small></address> </body> </html>