2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #if !defined( INCLUDED_XYWINDOW_H )
23 #define INCLUDED_XYWINDOW_H
25 #include "math/matrix.h"
26 #include "signal/signal.h"
28 #include "gtkutil/cursor.h"
29 #include "gtkutil/window.h"
30 #include "gtkutil/xorrectangle.h"
33 #include "texturelib.h"
35 #include "qerplugin.h"
38 class SelectionSystemWindowObserver;
43 typedef struct _GtkWindow GtkWindow;
44 typedef struct _GtkMenu GtkMenu;
50 void OnClipMode( bool enabled );
53 inline const char* ViewType_getTitle( VIEWTYPE viewtype ){
54 if ( viewtype == XY ) {
57 if ( viewtype == XZ ) {
60 if ( viewtype == YZ ) {
68 GtkWidget* m_gl_widget;
70 guint m_exposeHandler;
72 DeferredDraw m_deferredDraw;
73 DeferredMotion m_deferred_motion;
80 m_deferredDraw.draw();
82 GtkWidget* GetWidget(){
87 SelectionSystemWindowObserver* m_window_observer;
88 XORRectangle m_XORRectangle;
89 WindowPositionTracker m_positionTracker;
91 static void captureStates();
92 static void releaseStates();
94 void PositionView( const Vector3& position );
95 const Vector3& GetOrigin();
96 void SetOrigin( const Vector3& origin );
97 void Scroll( int x, int y );
100 void DrawCameraIcon( const Vector3& origin, const Vector3& angles );
101 void XY_DrawBlockGrid();
104 void XY_DrawBackground();
105 void XY_LoadBackgroundImage( const char *name );
106 void XY_DisableBackground();
108 void XY_MouseUp( int x, int y, unsigned int buttons );
109 void XY_MouseDown( int x, int y, unsigned int buttons );
110 void XY_MouseMoved( int x, int y, unsigned int buttons );
112 void NewBrushDrag_Begin( int x, int y );
113 void NewBrushDrag( int x, int y );
114 void NewBrushDrag_End( int x, int y );
116 void XY_ToPoint( int x, int y, Vector3& point );
117 void XY_SnapToGrid( Vector3& point );
122 guint m_move_focusOut;
124 void Zoom_Begin( int x, int y );
127 guint m_zoom_focusOut;
131 void ZoomInWithMouse( int pointx, int pointy );
132 void FocusOnBounds( AABB& bounds );
135 void SetActive( bool b ){
144 float x, y, fov, box;
148 void UpdateCameraIcon();
151 void Clipper_OnLButtonDown( int x, int y );
152 void Clipper_OnLButtonUp( int x, int y );
153 void Clipper_OnMouseMoved( int x, int y );
154 void Clipper_Crosshair_OnMouseMoved( int x, int y );
155 void DropClipPoint( int pointx, int pointy );
157 void SetCustomPivotOrigin( int pointx, int pointy );
159 void SetViewType( VIEWTYPE n );
162 static GtkMenu* m_mnuDrop;
164 int m_chasemouse_current_x, m_chasemouse_current_y;
165 int m_chasemouse_delta_x, m_chasemouse_delta_y;
168 guint m_chasemouse_handler;
170 bool chaseMouseMotion( int pointx, int pointy );
172 void updateModelview();
173 void updateProjection();
174 Matrix4 m_projection;
179 // background image stuff
181 bool m_backgroundActivated;
182 float m_alpha; // vertex alpha
183 float m_xmin, m_ymin, m_xmax, m_ymax;
190 static Shader* m_state_selected;
192 int m_ptCursorX, m_ptCursorY;
194 unsigned int m_buttonstate;
196 int m_nNewBrushPressx;
197 int m_nNewBrushPressy;
198 scene::Node* m_NewBrushDrag;
199 bool m_bNewBrushDrag;
201 Vector3 m_mousePosition;
205 void OriginalButtonUp( guint32 nFlags, int point, int pointy );
206 void OriginalButtonDown( guint32 nFlags, int point, int pointy );
208 void OnContextMenu();
209 void PaintSizeInfo( int nDim1, int nDim2, Vector3& vMinBounds, Vector3& vMaxBounds );
211 int m_entityCreate_x, m_entityCreate_y;
215 void ButtonState_onMouseDown( unsigned int buttons ){
216 //m_buttonstate |= buttons;
217 m_buttonstate = buttons;
219 void ButtonState_onMouseUp( unsigned int buttons ){
220 //m_buttonstate &= ~buttons;
223 unsigned int getButtonState() const {
224 return m_buttonstate;
226 void EntityCreate_MouseDown( int x, int y );
227 void EntityCreate_MouseMove( int x, int y );
228 void EntityCreate_MouseUp( int x, int y );
230 void OnEntityCreate( const char* item );
231 VIEWTYPE GetViewType(){
234 void SetScale( float f );
246 Signal3<const WindowVector&, ButtonIdentifier, ModifierFlags> onMouseDown;
247 void mouseDown( const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers );
248 typedef Member3<XYWnd, const WindowVector&, ButtonIdentifier, ModifierFlags, void, &XYWnd::mouseDown> MouseDownCaller;
251 inline void XYWnd_Update( XYWnd& xywnd ){
255 void XY_Centralize();
257 struct xywindow_globals_t
259 Vector3 color_gridback;
260 Vector3 color_gridminor;
261 Vector3 color_gridmajor;
262 Vector3 color_gridblock;
263 Vector3 color_gridtext;
264 Vector3 color_brushes;
265 Vector3 color_selbrushes;
266 Vector3 color_clipper;
267 Vector3 color_viewname;
272 // bool m_bRightClick;
274 bool m_bZoomInToPointer;
276 xywindow_globals_t() :
277 color_gridback( 0.77f, 0.77f, 0.77f ),
278 color_gridminor( 0.83f, 0.83f, 0.83f ),
279 color_gridmajor( 0.89f, 0.89f, 0.89f ),
280 color_gridblock( 1.0f, 1.0f, 1.0f ),
281 color_gridtext( 0.f, 0.f, 0.f ),
282 color_brushes( 0.f, 0.f, 0.f ),
283 color_selbrushes( 1.f, 0.f, 0.f ),
284 color_clipper( 0.f, 0.f, 1.f ),
285 color_viewname( 0.5f, 0.f, 0.75f ),
287 AxisColorX( 1.f, 0.f, 0.f ),
288 AxisColorY( 0.f, 1.f, 0.f ),
289 AxisColorZ( 0.f, 0.f, 1.f ),
290 // m_bRightClick( true ),
291 m_bNoStipple( true ),
292 m_bZoomInToPointer( true ){
297 extern xywindow_globals_t g_xywindow_globals;
300 VIEWTYPE GlobalXYWnd_getCurrentViewType();
302 typedef struct _GtkWindow GtkWindow;
303 void XY_Top_Shown_Construct( GtkWindow* parent );
304 void YZ_Side_Shown_Construct( GtkWindow* parent );
305 void XZ_Front_Shown_Construct( GtkWindow* parent );
307 void XYWindow_Construct();
308 void XYWindow_Destroy();
311 void WXY_BackgroundSelect();
313 void XYShow_registerCommands();
314 void XYWnd_registerShortcuts();