]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/glwindow.cpp
more eol-style
[xonotic/netradiant.git] / radiant / glwindow.cpp
index 72dbd621fcfead17b2f1fecbb317a427ad727864..df6b0cf700cfb6fa9c05b10c21546b7566c4d549 100644 (file)
-/*\r
-Copyright (c) 2001, Loki software, inc.\r
-All rights reserved.\r
-\r
-Redistribution and use in source and binary forms, with or without modification, \r
-are permitted provided that the following conditions are met:\r
-\r
-Redistributions of source code must retain the above copyright notice, this list \r
-of conditions and the following disclaimer.\r
-\r
-Redistributions in binary form must reproduce the above copyright notice, this\r
-list of conditions and the following disclaimer in the documentation and/or\r
-other materials provided with the distribution.\r
-\r
-Neither the name of Loki software nor the names of its contributors may be used \r
-to endorse or promote products derived from this software without specific prior \r
-written permission. \r
-\r
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' \r
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \r
-DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY \r
-DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \r
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; \r
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS \r
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
-*/\r
-\r
-//\r
-// GLWindow - Base class for the small views used by Radiant\r
-//\r
-// Leonardo Zide (leo@lokigames.com\r
-//\r
-\r
-#include "stdafx.h"\r
-#include "glwidget.h"\r
-#include "glwindow.h"\r
-\r
-// =============================================================================\r
-// static functions\r
-\r
-static void realize (GtkWidget *widget, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-\r
-  wnd->OnCreate ();\r
-}\r
-\r
-static gint expose (GtkWidget *widget, GdkEventExpose *event, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-\r
-#ifndef _WIN32\r
-  if (event->count > 0)\r
-    return TRUE;\r
-#endif\r
-\r
-  if (!g_pParentWnd->IsSleeping ())\r
-    wnd->OnExpose ();\r
-\r
-  return TRUE;\r
-}\r
-\r
-static void button_press (GtkWidget *widget, GdkEventButton *event, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  guint32 flags = 0;\r
-\r
-  gdk_pointer_grab (widget->window, FALSE,\r
-                    (GdkEventMask)(GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK),\r
-                    NULL, NULL, GDK_CURRENT_TIME);\r
-\r
-  gtk_window_set_focus (GTK_WINDOW (g_pParentWnd->m_pWidget), widget);\r
-\r
-  switch (event->button)\r
-  {\r
-  case 1: flags |= MK_LBUTTON; break;\r
-  case 2: flags |= MK_MBUTTON; break;\r
-  case 3: flags |= MK_RBUTTON; break;\r
-#if !GTK_CHECK_VERSION (1,3,0)\r
-  case 4: wnd->OnMouseWheel(true); break;\r
-  case 5: wnd->OnMouseWheel(false); break;\r
-#endif\r
-  }\r
-\r
-  if ((event->state & GDK_CONTROL_MASK) != 0)\r
-    flags |= MK_CONTROL;\r
-\r
-  if ((event->state & GDK_SHIFT_MASK) != 0)\r
-    flags |= MK_SHIFT;\r
-\r
-  if (event->type == GDK_BUTTON_PRESS)\r
-  {\r
-    switch (event->button)\r
-    {\r
-    case 1:\r
-      wnd->OnLButtonDown (flags, (int)event->x, (int)event->y); break;\r
-    case 2:\r
-      wnd->OnMButtonDown (flags, (int)event->x, (int)event->y); break;\r
-    case 3:\r
-      wnd->OnRButtonDown (flags, (int)event->x, (int)event->y); break;\r
-    }\r
-  }\r
-  else if (event->type == GDK_2BUTTON_PRESS)\r
-  {\r
-    // do nothing\r
-  }\r
-}\r
-\r
-static void button_release (GtkWidget *widget, GdkEventButton *event, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  guint32 flags = 0;\r
-\r
-  gdk_pointer_ungrab (GDK_CURRENT_TIME);\r
-\r
-  if ((event->state & GDK_CONTROL_MASK) != 0)\r
-    flags |= MK_CONTROL;\r
-\r
-  if ((event->state & GDK_SHIFT_MASK) != 0)\r
-    flags |= MK_SHIFT;\r
-\r
-  switch (event->button)\r
-  {\r
-  case 1:\r
-    wnd->OnLButtonUp (flags, (int)event->x, (int)event->y); break;\r
-  case 2:\r
-    wnd->OnMButtonUp (flags, (int)event->x, (int)event->y); break;\r
-  case 3:\r
-    wnd->OnRButtonUp (flags, (int)event->x, (int)event->y); break;\r
-  }\r
-}\r
-\r
-static void motion (GtkWidget *widget, GdkEventMotion *event, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  guint32 flags = 0;\r
-\r
-  if ((event->state & GDK_BUTTON1_MASK) != 0)\r
-    flags |= MK_LBUTTON;\r
-\r
-  if ((event->state & GDK_BUTTON2_MASK) != 0)\r
-    flags |= MK_MBUTTON;\r
-\r
-  if ((event->state & GDK_BUTTON3_MASK) != 0)\r
-    flags |= MK_RBUTTON;\r
-\r
-  if ((event->state & GDK_CONTROL_MASK) != 0)\r
-    flags |= MK_CONTROL;\r
-\r
-  if ((event->state & GDK_SHIFT_MASK) != 0)\r
-    flags |= MK_SHIFT;\r
-\r
-  wnd->OnMouseMove (flags, (int)event->x, (int)event->y);\r
-}\r
-\r
-static void resize (GtkWidget *widget, GtkAllocation *allocation, gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  wnd->OnSize (allocation->width, allocation->height);\r
-}\r
-\r
-static gint timer (gpointer data)\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  wnd->OnTimer ();\r
-\r
-  return TRUE;\r
-}\r
-\r
-//! GtkGLExt port.\r
-/*\r
-static void create_context (GtkWidget *widget, gpointer data)\r
-{\r
-  if (g_qeglobals_gui.d_glBase == NULL)\r
-    g_qeglobals_gui.d_glBase = widget;\r
-}\r
-\r
-static void destroy_context (GtkWidget *widget, gpointer data)\r
-{\r
-  if (g_qeglobals_gui.d_glBase == widget)\r
-    g_qeglobals_gui.d_glBase = NULL;\r
-}\r
-*/\r
-\r
-#if GTK_CHECK_VERSION (1,3,0)\r
-static gint scroll_event( GtkWidget *widget,\r
-                    GdkEventScroll *event,\r
-                    gpointer   data )\r
-{\r
-  GLWindow *wnd = (GLWindow*)data;\r
-  wnd->OnMouseWheel((event->direction == GDK_SCROLL_UP) ? true : false);\r
-  return TRUE;\r
-}\r
-#endif\r
-\r
-// =============================================================================\r
-// GLWindow class\r
-\r
-#ifdef _DEBUG\r
-//#define DBG_GLWINDOW\r
-#endif\r
-\r
-GLWindow::GLWindow (bool zbuffer)\r
-{\r
-  m_nTimer = 0;\r
-  m_bMouseCapture = FALSE;\r
-  m_pParent = NULL;\r
-\r
-  m_pWidget = gtk_glwidget_new (zbuffer, g_qeglobals_gui.d_glBase);\r
-  GTK_WIDGET_SET_FLAGS (m_pWidget, GTK_CAN_FOCUS);\r
-\r
-#ifdef DBG_GLWINDOW\r
-  Sys_Printf("GLWindow::GLWindow m_pWidget = %p\n", m_pWidget);\r
-#endif\r
-\r
-//! GtkGLExt port.\r
-//#if defined (__linux__) || defined (__APPLE__)\r
-  if (g_qeglobals_gui.d_glBase == NULL)\r
-    g_qeglobals_gui.d_glBase = m_pWidget;\r
-//#endif\r
-\r
-#if GTK_CHECK_VERSION (1,3,0)\r
-  gtk_widget_set_events (m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK |\r
-                        GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK);\r
-#else\r
-  gtk_widget_set_events (m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK |\r
-                        GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);\r
-#endif\r
-\r
-  // Connect signal handlers\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "realize", GTK_SIGNAL_FUNC (realize), this);\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "expose_event", GTK_SIGNAL_FUNC (expose), this);\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "motion_notify_event", GTK_SIGNAL_FUNC (motion), this);\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "button_press_event", GTK_SIGNAL_FUNC (button_press), this);\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "button_release_event",GTK_SIGNAL_FUNC (button_release), this);\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "size_allocate", GTK_SIGNAL_FUNC (resize), this);\r
-//! GtkGLExt port.\r
-//  gtk_signal_connect (GTK_OBJECT (m_pWidget), "create_context", GTK_SIGNAL_FUNC (create_context), this);\r
-//  gtk_signal_connect (GTK_OBJECT (m_pWidget), "destroy_context", GTK_SIGNAL_FUNC (destroy_context), this);\r
-#if GTK_CHECK_VERSION (1,3,0)\r
-  gtk_signal_connect (GTK_OBJECT (m_pWidget), "scroll_event", GTK_SIGNAL_FUNC (scroll_event), this);\r
-#endif\r
-}\r
-\r
-GLWindow::~GLWindow ()\r
-{\r
-#ifdef DBG_GLWINDOW\r
-  Sys_Printf("GLWindow::~GLWindow m_pWidget = %p\n", m_pWidget);\r
-#endif\r
-\r
-  if (m_pWidget && GTK_IS_WIDGET (m_pWidget))\r
-    gtk_widget_destroy (m_pWidget);\r
-}\r
-\r
-void GLWindow::DestroyContext ()\r
-{\r
-  gtk_glwidget_destroy_context (m_pWidget);\r
-}\r
-\r
-void GLWindow::CreateContext ()\r
-{\r
-  gtk_glwidget_create_context (m_pWidget);\r
-}\r
-\r
-void GLWindow::SetTimer (guint millisec)\r
-{\r
-  m_nTimer = gtk_timeout_add (millisec, timer, this);\r
-}\r
-\r
-void GLWindow::KillTimer ()\r
-{\r
-  gtk_timeout_remove (m_nTimer);\r
-  m_nTimer = 0;\r
-}\r
-\r
-bool GLWindow::MakeCurrent ()\r
-{\r
-  return gtk_glwidget_make_current (m_pWidget);\r
-}\r
-\r
-void GLWindow::SwapBuffers ()\r
-{\r
-  gtk_glwidget_swap_buffers (m_pWidget);\r
-}\r
+/*
+Copyright (c) 2001, Loki software, inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list 
+of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+Neither the name of Loki software nor the names of its contributors may be used 
+to endorse or promote products derived from this software without specific prior 
+written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY 
+DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+//
+// GLWindow - Base class for the small views used by Radiant
+//
+// Leonardo Zide (leo@lokigames.com
+//
+
+#include "stdafx.h"
+#include "glwidget.h"
+#include "glwindow.h"
+
+// =============================================================================
+// static functions
+
+static void realize (GtkWidget *widget, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+
+  wnd->OnCreate ();
+}
+
+static gint expose (GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+
+#ifndef _WIN32
+  if (event->count > 0)
+    return TRUE;
+#endif
+
+  if (!g_pParentWnd->IsSleeping ())
+    wnd->OnExpose ();
+
+  return TRUE;
+}
+
+static void button_press (GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+  guint32 flags = 0;
+
+  gdk_pointer_grab (widget->window, FALSE,
+                    (GdkEventMask)(GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK),
+                    NULL, NULL, GDK_CURRENT_TIME);
+
+  gtk_window_set_focus (GTK_WINDOW (g_pParentWnd->m_pWidget), widget);
+
+  switch (event->button)
+  {
+  case 1: flags |= MK_LBUTTON; break;
+  case 2: flags |= MK_MBUTTON; break;
+  case 3: flags |= MK_RBUTTON; break;
+#if !GTK_CHECK_VERSION (1,3,0)
+  case 4: wnd->OnMouseWheel(true); break;
+  case 5: wnd->OnMouseWheel(false); break;
+#endif
+  }
+
+  if ((event->state & GDK_CONTROL_MASK) != 0)
+    flags |= MK_CONTROL;
+
+  if ((event->state & GDK_SHIFT_MASK) != 0)
+    flags |= MK_SHIFT;
+
+  if (event->type == GDK_BUTTON_PRESS)
+  {
+    switch (event->button)
+    {
+    case 1:
+      wnd->OnLButtonDown (flags, (int)event->x, (int)event->y); break;
+    case 2:
+      wnd->OnMButtonDown (flags, (int)event->x, (int)event->y); break;
+    case 3:
+      wnd->OnRButtonDown (flags, (int)event->x, (int)event->y); break;
+    }
+  }
+  else if (event->type == GDK_2BUTTON_PRESS)
+  {
+    // do nothing
+  }
+}
+
+static void button_release (GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+  guint32 flags = 0;
+
+  gdk_pointer_ungrab (GDK_CURRENT_TIME);
+
+  if ((event->state & GDK_CONTROL_MASK) != 0)
+    flags |= MK_CONTROL;
+
+  if ((event->state & GDK_SHIFT_MASK) != 0)
+    flags |= MK_SHIFT;
+
+  switch (event->button)
+  {
+  case 1:
+    wnd->OnLButtonUp (flags, (int)event->x, (int)event->y); break;
+  case 2:
+    wnd->OnMButtonUp (flags, (int)event->x, (int)event->y); break;
+  case 3:
+    wnd->OnRButtonUp (flags, (int)event->x, (int)event->y); break;
+  }
+}
+
+static void motion (GtkWidget *widget, GdkEventMotion *event, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+  guint32 flags = 0;
+
+  if ((event->state & GDK_BUTTON1_MASK) != 0)
+    flags |= MK_LBUTTON;
+
+  if ((event->state & GDK_BUTTON2_MASK) != 0)
+    flags |= MK_MBUTTON;
+
+  if ((event->state & GDK_BUTTON3_MASK) != 0)
+    flags |= MK_RBUTTON;
+
+  if ((event->state & GDK_CONTROL_MASK) != 0)
+    flags |= MK_CONTROL;
+
+  if ((event->state & GDK_SHIFT_MASK) != 0)
+    flags |= MK_SHIFT;
+
+  wnd->OnMouseMove (flags, (int)event->x, (int)event->y);
+}
+
+static void resize (GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+  wnd->OnSize (allocation->width, allocation->height);
+}
+
+static gint timer (gpointer data)
+{
+  GLWindow *wnd = (GLWindow*)data;
+  wnd->OnTimer ();
+
+  return TRUE;
+}
+
+//! GtkGLExt port.
+/*
+static void create_context (GtkWidget *widget, gpointer data)
+{
+  if (g_qeglobals_gui.d_glBase == NULL)
+    g_qeglobals_gui.d_glBase = widget;
+}
+
+static void destroy_context (GtkWidget *widget, gpointer data)
+{
+  if (g_qeglobals_gui.d_glBase == widget)
+    g_qeglobals_gui.d_glBase = NULL;
+}
+*/
+
+#if GTK_CHECK_VERSION (1,3,0)
+static gint scroll_event( GtkWidget *widget,
+                    GdkEventScroll *event,
+                    gpointer   data )
+{
+  GLWindow *wnd = (GLWindow*)data;
+  wnd->OnMouseWheel((event->direction == GDK_SCROLL_UP) ? true : false);
+  return TRUE;
+}
+#endif
+
+// =============================================================================
+// GLWindow class
+
+#ifdef _DEBUG
+//#define DBG_GLWINDOW
+#endif
+
+GLWindow::GLWindow (bool zbuffer)
+{
+  m_nTimer = 0;
+  m_bMouseCapture = FALSE;
+  m_pParent = NULL;
+
+  m_pWidget = gtk_glwidget_new (zbuffer, g_qeglobals_gui.d_glBase);
+  GTK_WIDGET_SET_FLAGS (m_pWidget, GTK_CAN_FOCUS);
+
+#ifdef DBG_GLWINDOW
+  Sys_Printf("GLWindow::GLWindow m_pWidget = %p\n", m_pWidget);
+#endif
+
+//! GtkGLExt port.
+//#if defined (__linux__) || defined (__APPLE__)
+  if (g_qeglobals_gui.d_glBase == NULL)
+    g_qeglobals_gui.d_glBase = m_pWidget;
+//#endif
+
+#if GTK_CHECK_VERSION (1,3,0)
+  gtk_widget_set_events (m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK |
+                        GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK);
+#else
+  gtk_widget_set_events (m_pWidget, GDK_DESTROY | GDK_EXPOSURE_MASK |
+                        GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+#endif
+
+  // Connect signal handlers
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "realize", GTK_SIGNAL_FUNC (realize), this);
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "expose_event", GTK_SIGNAL_FUNC (expose), this);
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "motion_notify_event", GTK_SIGNAL_FUNC (motion), this);
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "button_press_event", GTK_SIGNAL_FUNC (button_press), this);
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "button_release_event",GTK_SIGNAL_FUNC (button_release), this);
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "size_allocate", GTK_SIGNAL_FUNC (resize), this);
+//! GtkGLExt port.
+//  gtk_signal_connect (GTK_OBJECT (m_pWidget), "create_context", GTK_SIGNAL_FUNC (create_context), this);
+//  gtk_signal_connect (GTK_OBJECT (m_pWidget), "destroy_context", GTK_SIGNAL_FUNC (destroy_context), this);
+#if GTK_CHECK_VERSION (1,3,0)
+  gtk_signal_connect (GTK_OBJECT (m_pWidget), "scroll_event", GTK_SIGNAL_FUNC (scroll_event), this);
+#endif
+}
+
+GLWindow::~GLWindow ()
+{
+#ifdef DBG_GLWINDOW
+  Sys_Printf("GLWindow::~GLWindow m_pWidget = %p\n", m_pWidget);
+#endif
+
+  if (m_pWidget && GTK_IS_WIDGET (m_pWidget))
+    gtk_widget_destroy (m_pWidget);
+}
+
+void GLWindow::DestroyContext ()
+{
+  gtk_glwidget_destroy_context (m_pWidget);
+}
+
+void GLWindow::CreateContext ()
+{
+  gtk_glwidget_create_context (m_pWidget);
+}
+
+void GLWindow::SetTimer (guint millisec)
+{
+  m_nTimer = gtk_timeout_add (millisec, timer, this);
+}
+
+void GLWindow::KillTimer ()
+{
+  gtk_timeout_remove (m_nTimer);
+  m_nTimer = 0;
+}
+
+bool GLWindow::MakeCurrent ()
+{
+  return gtk_glwidget_make_current (m_pWidget);
+}
+
+void GLWindow::SwapBuffers ()
+{
+  gtk_glwidget_swap_buffers (m_pWidget);
+}