1 #pragma once 2 3 #include "RadiantCameraView.h" 4 #include "irender.h" 5 #include "gtkutil/xorrectangle.h" 6 #include "../selection/RadiantWindowObserver.h" 7 #include "gtkutil/glwidget.h" 8 9 #include "../map/DeferredDraw.h" 10 11 const int CAMWND_MINSIZE_X = 240; 12 const int CAMWND_MINSIZE_Y = 200; 13 14 class SelectionTest; 15 16 class CamWnd : public scene::Graph::Observer 17 { 18 View m_view; 19 // The contained camera 20 Camera m_Camera; 21 RadiantCameraView m_cameraview; 22 23 guint m_freemove_handle_focusout; 24 static Shader* m_state_select1; 25 static Shader* m_state_select2; 26 FreezePointer m_freezePointer; 27 28 bool m_drawing; 29 30 public: 31 gtkutil::GLWidget _glWidget; 32 GtkWidget* m_gl_widget; 33 GtkWindow* m_parent; 34 35 SelectionSystemWindowObserver* m_window_observer; 36 37 XORRectangle m_XORRectangle; 38 39 DeferredDraw m_deferredDraw; 40 DeferredMotion m_deferred_motion; 41 42 guint m_selection_button_press_handler; 43 guint m_selection_button_release_handler; 44 guint m_selection_motion_handler; 45 guint m_freelook_button_press_handler; 46 guint m_sizeHandler; 47 guint m_exposeHandler; 48 49 CamWnd (); 50 ~CamWnd (); 51 52 const Vector3& getCameraOrigin () const; 53 void setCameraOrigin (const Vector3& origin); 54 55 const Vector3& getCameraAngles () const; 56 void setCameraAngles (const Vector3& origin); 57 58 // Increases/decreases the far clip plane distance 59 void cubicScaleIn (); 60 void cubicScaleOut (); 61 62 void queueDraw (); 63 void draw (); 64 void update (); 65 66 static void captureStates (); 67 static void releaseStates (); 68 69 Camera& getCamera (); 70 71 void changeFloor (bool up); 72 73 GtkWidget* getWidget (); 74 void setParent(GtkWindow* parent); 75 GtkWindow* getParent (); 76 77 void enableFreeMove (); 78 void disableFreeMove (); 79 80 bool m_bFreeMove; 81 82 void jumpToObject(SelectionTest& selectionTest); 83 84 CameraView* getCameraView (); 85 86 // Enables/disables the (ordinary) camera movement (non-freelook) 87 void addHandlersMove (); 88 void removeHandlersMove (); 89 90 void enableDiscreteMoveEvents(); 91 void enableFreeMoveEvents(); 92 93 void disableDiscreteMoveEvents(); 94 void disableFreeMoveEvents(); 95 96 private: 97 void Cam_Draw (); 98 99 static gboolean selection_button_press_freemove(GtkWidget* widget, GdkEventButton* event, WindowObserver* observer); 100 static gboolean selection_button_release_freemove(GtkWidget* widget, GdkEventButton* event, WindowObserver* observer); 101 static gboolean selection_motion_freemove(GtkWidget *widget, GdkEventMotion *event, WindowObserver* observer); 102 static gboolean wheelmove_scroll(GtkWidget* widget, GdkEventScroll* event, CamWnd* camwnd); 103 static gboolean selection_button_press(GtkWidget* widget, GdkEventButton* event, WindowObserver* observer); 104 static gboolean selection_button_release(GtkWidget* widget, GdkEventButton* event, WindowObserver* observer); 105 static gboolean enable_freelook_button_press(GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd); 106 static gboolean disable_freelook_button_press(GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd); 107 108 static gboolean camera_size_allocate(GtkWidget* widget, GtkAllocation* allocation, CamWnd* camwnd); 109 static gboolean camera_expose(GtkWidget* widget, GdkEventExpose* event, gpointer data); 110 111 void onSceneGraphChange (); 112 }; 113 114 typedef MemberCaller<CamWnd, &CamWnd::queueDraw> CamWndQueueDraw; 115 typedef MemberCaller<CamWnd, &CamWnd::update> CamWndUpdate; 116