X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fcamwindow.h;h=b8d1be75ca0e5bf5860d100bb3196e289d176b17;hb=ab3a99dbbe84a0d130fea4d0ceb7b79d7ed07eb7;hp=98556b00d034db830f5b467e44f0b1142d1c2494;hpb=d59e1dc131ede961a201ab8ca4b836ab9d6cc31a;p=xonotic%2Fnetradiant.git diff --git a/radiant/camwindow.h b/radiant/camwindow.h index 98556b00..b8d1be75 100644 --- a/radiant/camwindow.h +++ b/radiant/camwindow.h @@ -1,171 +1,171 @@ -/* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. - -This file is part of GtkRadiant. - -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _CAMWINDOW_H_ -#define _CAMWINDOW_H_ - -class XYWnd; - -#include "glwindow.h" - -class rectangle_t -{ -public: - rectangle_t() - : x(0), y(0), w(0), h(0) - {} - rectangle_t(float _x, float _y, float _w, float _h) - : x(_x), y(_y), w(_w), h(_h) - {} - float x; - float y; - float w; - float h; -}; - -class XORRectangle -{ -public: - XORRectangle(GtkWidget* widget) - : m_widget(widget), m_gc(NULL) - {} - ~XORRectangle() - { - if(initialised()) - gdk_gc_unref(m_gc); - } - void set(rectangle_t rectangle) - { - lazy_init(); - draw(); - m_rectangle = rectangle; - draw(); - } -private: - bool initialised() const - { - return m_gc != NULL; - } - void lazy_init() - { - if(!initialised()) - { - m_gc = gdk_gc_new(m_widget->window); - - GdkColor color = { 0, 0xffff, 0xffff, 0xffff, }; - GdkColormap* colormap = gdk_window_get_colormap(m_widget->window); - gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE); - gdk_gc_copy(m_gc, m_widget->style->white_gc); - gdk_gc_set_foreground(m_gc, &color); - gdk_gc_set_background(m_gc, &color); - - gdk_gc_set_function(m_gc, GDK_XOR); - } - } - void draw() const - { - const int x = (int)m_rectangle.x; - const int y = (int)m_rectangle.y; - const int w = (int)m_rectangle.w; - const int h = (int)m_rectangle.h; - gdk_draw_rectangle(m_widget->window, m_gc, TRUE, x, -(h) - (y - m_widget->allocation.height), w, h); - } - - rectangle_t m_rectangle; - - GdkGC* m_gc; - GtkWidget* m_widget; -}; - -class CamWnd : public GLWindow -{ -public: - void MatchViewAxes(const vec3_t P, const vec3_t vec, int &axis, float &sgn); - void ReInitGL(); - void BenchMark(); - CamWnd(); - virtual ~CamWnd(); - camera_t *Camera(){return &m_Camera;}; - void Cam_MouseControl(float dtime); - void Cam_ChangeFloor(qboolean up); - void ToggleFreeMove(); - bool m_bFreeMove; - -protected: - void Cam_Init(); - void Cam_BuildMatrix(); - void Cam_PositionDrag(); - void Cam_KeyControl(float dtime); - void Cam_MouseDown(int x, int y, int buttons); - void Cam_MouseUp (int x, int y, int buttons); - void Cam_MouseMoved (int x, int y, int buttons); - void InitCull(); - qboolean CullBrush (brush_t *b); - void Cam_Draw(); - void Cam_DrawStuff(); - void Cam_DrawBrushes(int mode); - void Cam_DrawBrush(brush_t *b, int mode); - - brush_t* m_TransBrushes[MAX_MAP_BRUSHES]; - int m_nNumTransBrushes; - camera_t m_Camera; - int m_nCambuttonstate; - int m_ptButtonX; - int m_ptCursorX; - int m_ptLastCursorX; - int m_ptLastCamCursorX; - int m_ptButtonY; - int m_ptCursorY; - int m_ptLastCursorY; - int m_ptLastCamCursorY; - face_t* m_pSide_select; - vec3_t m_vCull1; - vec3_t m_vCull2; - int m_nCullv1[3]; - int m_nCullv2[3]; - bool m_bClipMode; - guint m_FocusOutHandler_id; - - void OnCreate (); - void OnExpose (); - void OnLButtonDown (guint32 flags, int x, int y); - void OnRButtonDown (guint32 flags, int x, int y); - void OnMButtonDown (guint32 flags, int x, int y); - void OnLButtonUp (guint32 flags, int pointx, int pointy); - void OnRButtonUp (guint32 flags, int pointx, int pointy); - void OnMButtonUp (guint32 flags, int pointx, int pointy); - void OnMouseMove (guint32 flags, int pointx, int pointy); - void OnMouseWheel(bool bUp); - void OnSize(int cx, int cy); - -protected: - void OriginalMouseDown (guint32 nFlags, int pointX, int pointY); - void OriginalMouseUp (guint32 nFlags, int pointX, int pointY); - -private: - XORRectangle m_XORRectangle; - - // project a point in geometric space into camera space - void ProjectCamera(const vec3_t A, vec_t B[2]); -}; - - -#endif // _CAMWINDOW_H_ +/* +Copyright (C) 1999-2007 id Software, Inc. and contributors. +For a list of contributors, see the accompanying CONTRIBUTORS file. + +This file is part of GtkRadiant. + +GtkRadiant is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +GtkRadiant is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GtkRadiant; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _CAMWINDOW_H_ +#define _CAMWINDOW_H_ + +class XYWnd; + +#include "glwindow.h" + +class rectangle_t +{ +public: + rectangle_t() + : x(0), y(0), w(0), h(0) + {} + rectangle_t(float _x, float _y, float _w, float _h) + : x(_x), y(_y), w(_w), h(_h) + {} + float x; + float y; + float w; + float h; +}; + +class XORRectangle +{ +public: + XORRectangle(GtkWidget* widget) + : m_widget(widget), m_gc(NULL) + {} + ~XORRectangle() + { + if(initialised()) + gdk_gc_unref(m_gc); + } + void set(rectangle_t rectangle) + { + lazy_init(); + draw(); + m_rectangle = rectangle; + draw(); + } +private: + bool initialised() const + { + return m_gc != NULL; + } + void lazy_init() + { + if(!initialised()) + { + m_gc = gdk_gc_new(m_widget->window); + + GdkColor color = { 0, 0xffff, 0xffff, 0xffff, }; + GdkColormap* colormap = gdk_window_get_colormap(m_widget->window); + gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE); + gdk_gc_copy(m_gc, m_widget->style->white_gc); + gdk_gc_set_foreground(m_gc, &color); + gdk_gc_set_background(m_gc, &color); + + gdk_gc_set_function(m_gc, GDK_XOR); + } + } + void draw() const + { + const int x = (int)m_rectangle.x; + const int y = (int)m_rectangle.y; + const int w = (int)m_rectangle.w; + const int h = (int)m_rectangle.h; + gdk_draw_rectangle(m_widget->window, m_gc, TRUE, x, -(h) - (y - m_widget->allocation.height), w, h); + } + + rectangle_t m_rectangle; + + GdkGC* m_gc; + GtkWidget* m_widget; +}; + +class CamWnd : public GLWindow +{ +public: + void MatchViewAxes(const vec3_t P, const vec3_t vec, int &axis, float &sgn); + void ReInitGL(); + void BenchMark(); + CamWnd(); + virtual ~CamWnd(); + camera_t *Camera(){return &m_Camera;}; + void Cam_MouseControl(float dtime); + void Cam_ChangeFloor(qboolean up); + void ToggleFreeMove(); + bool m_bFreeMove; + +protected: + void Cam_Init(); + void Cam_BuildMatrix(); + void Cam_PositionDrag(); + void Cam_KeyControl(float dtime); + void Cam_MouseDown(int x, int y, int buttons); + void Cam_MouseUp (int x, int y, int buttons); + void Cam_MouseMoved (int x, int y, int buttons); + void InitCull(); + qboolean CullBrush (brush_t *b); + void Cam_Draw(); + void Cam_DrawStuff(); + void Cam_DrawBrushes(int mode); + void Cam_DrawBrush(brush_t *b, int mode); + + brush_t* m_TransBrushes[MAX_MAP_BRUSHES]; + int m_nNumTransBrushes; + camera_t m_Camera; + int m_nCambuttonstate; + int m_ptButtonX; + int m_ptCursorX; + int m_ptLastCursorX; + int m_ptLastCamCursorX; + int m_ptButtonY; + int m_ptCursorY; + int m_ptLastCursorY; + int m_ptLastCamCursorY; + face_t* m_pSide_select; + vec3_t m_vCull1; + vec3_t m_vCull2; + int m_nCullv1[3]; + int m_nCullv2[3]; + bool m_bClipMode; + guint m_FocusOutHandler_id; + + void OnCreate (); + void OnExpose (); + void OnLButtonDown (guint32 flags, int x, int y); + void OnRButtonDown (guint32 flags, int x, int y); + void OnMButtonDown (guint32 flags, int x, int y); + void OnLButtonUp (guint32 flags, int pointx, int pointy); + void OnRButtonUp (guint32 flags, int pointx, int pointy); + void OnMButtonUp (guint32 flags, int pointx, int pointy); + void OnMouseMove (guint32 flags, int pointx, int pointy); + void OnMouseWheel(bool bUp); + void OnSize(int cx, int cy); + +protected: + void OriginalMouseDown (guint32 nFlags, int pointX, int pointY); + void OriginalMouseUp (guint32 nFlags, int pointX, int pointY); + +private: + XORRectangle m_XORRectangle; + + // project a point in geometric space into camera space + void ProjectCamera(const vec3_t A, vec_t B[2]); +}; + + +#endif // _CAMWINDOW_H_