]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - plugins/surface_heretic2/surfacedialog.cpp
* removed unnecessary gi18n.h inclusions
[xonotic/netradiant.git] / plugins / surface_heretic2 / surfacedialog.cpp
index bd6145647966922dbe78c9867802fabd3a9ac031..343ab291675338389675b02726420ba9e317883d 100644 (file)
-/*\r
-Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
-For a list of contributors, see the accompanying CONTRIBUTORS file.\r
-\r
-This file is part of GtkRadiant.\r
-\r
-GtkRadiant is free software; you can redistribute it and/or modify\r
-it under the terms of the GNU General Public License as published by\r
-the Free Software Foundation; either version 2 of the License, or\r
-(at your option) any later version.\r
-\r
-GtkRadiant is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License\r
-along with GtkRadiant; if not, write to the Free Software\r
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
-*/\r
-\r
-//\r
-// Surface Dialog Module\r
-//\r
-\r
-//\r
-// Nurail: Implemented to Module from the main Radiant Surface Dialog code\r
-//\r
-\r
-\r
-#include <gtk/gtk.h>\r
-#include <gdk/gdkkeysyms.h>\r
-\r
-#include "surfdlg_plugin.h"\r
-\r
-\r
-\r
-#ifdef _DEBUG\r
-//#define DBG_SI 1\r
-#endif\r
-\r
-#include "gtkr_vector.h"\r
-\r
-std::vector<texdef_to_face_t> g_texdef_face_vector;\r
-\r
-inline texdef_to_face_t* get_texdef_face_list()\r
-{\r
-  return &(*g_texdef_face_vector.begin());\r
-}\r
-\r
-inline unsigned int texdef_face_list_empty()\r
-{\r
-  return g_texdef_face_vector.empty();\r
-}\r
-\r
-inline unsigned int texdef_face_list_size()\r
-{\r
-  return g_texdef_face_vector.size();\r
-}\r
-\r
-// For different faces having different values\r
-bool is_HShift_conflicting;\r
-bool is_VShift_conflicting;\r
-bool is_HScale_conflicting;\r
-bool is_VScale_conflicting;\r
-bool is_Rotate_conflicting;\r
-bool is_TextureName_conflicting;\r
-\r
-void ShowDlg();\r
-void HideDlg();\r
-void SetTexMods();\r
-void GetTexMods(bool b_SetUndoPoint = FALSE);\r
-void BuildDialog();\r
-void FitAll();\r
-void InitDefaultIncrement(texdef_t *);\r
-void DoSnapTToGrid(float hscale, float vscale);\r
-// called to perform a fitting from the outside (shortcut key)\r
-void SurfaceDialogFitAll();\r
-\r
-// Heretic2 Flags Functions\r
-void SetFlagButtons_Heretic2(texdef_to_face_t *texdef_face_list,  bool b_isListEmpty);\r
-void SetChangeInFlags_Face_Heretic2 (texdef_to_face_t *texdef_face_list);\r
-GtkWidget* Create_Heretic2FlagsDialog (GtkWidget* surfacedialog_widget);\r
-\r
-\r
-// Dialog Data\r
-int m_nHeight;\r
-int m_nWidth;\r
-\r
-// 0 is invalid, otherwise it's the Id of the last 'do' we are responsible for\r
-int m_nUndoId;\r
-\r
-\r
-texturewin_t *texturewin;\r
-texdef_t *l_pIncrement;\r
-texdef_t texdef_offset;\r
-texdef_t texdef_SI_values;\r
-\r
-// For Texture Entry, activate only on entry change\r
-char old_texture_entry[128];\r
-\r
-// the texdef to switch back to when the OnCancel is called\r
-texdef_t       g_old_texdef;\r
-\r
-// when TRUE, this thing means the surface inspector is currently being displayed\r
-bool  g_surfwin = FALSE;\r
-// turn on/off processing of the "changed" "value_changed" messages\r
-// (need to turn off when we are feeding data in)\r
-bool g_bListenChanged = true;\r
-// turn on/off listening of the update messages\r
-bool g_bListenUpdate = true;\r
-\r
-GtkWidget* create_SurfaceInspector (void);\r
-GtkWidget *SurfaceInspector = NULL;\r
-\r
-GtkWidget *m_pWidget;\r
-GtkWidget *GetWidget () { return SurfaceInspector; }\r
-GtkWidget *Get_SI_Module_Widget () { return SurfaceInspector; }\r
-void SetWidget(GtkWidget *new_widget) { m_pWidget = new_widget; }\r
-GtkWidget *GetDlgWidget (const char* name)\r
-  { return GTK_WIDGET (g_object_get_data (G_OBJECT (SurfaceInspector), name)); }\r
-\r
-// Spins for FitTexture\r
-GtkWidget *spin_width;\r
-GtkWidget *spin_height;\r
-\r
-\r
-GtkWidget *texture_combo;\r
-GtkWidget *texture_combo_entry;\r
-\r
-GtkWidget *match_grid_button;\r
-GtkWidget *lock_valuechange_togglebutton;\r
-\r
-GtkObject *hshift_value_spinbutton_adj;\r
-GtkWidget *hshift_value_spinbutton;\r
-GtkObject *vshift_value_spinbutton_adj;\r
-GtkWidget *vshift_value_spinbutton;\r
-GtkObject *hscale_value_spinbutton_adj;\r
-GtkWidget *hscale_value_spinbutton;\r
-GtkObject *vscale_value_spinbutton_adj;\r
-GtkWidget *vscale_value_spinbutton;\r
-GtkObject *rotate_value_spinbutton_adj;\r
-GtkWidget *rotate_value_spinbutton;\r
-\r
-GtkObject *hshift_offset_spinbutton_adj;\r
-GtkWidget *hshift_offset_spinbutton;\r
-GtkObject *vshift_offset_spinbutton_adj;\r
-GtkWidget *vshift_offset_spinbutton;\r
-GtkObject *hscale_offset_spinbutton_adj;\r
-GtkWidget *hscale_offset_spinbutton;\r
-GtkObject *vscale_offset_spinbutton_adj;\r
-GtkWidget *vscale_offset_spinbutton;\r
-GtkObject *rotate_offset_spinbutton_adj;\r
-GtkWidget *rotate_offset_spinbutton;\r
-\r
-GtkObject *hshift_step_spinbutton_adj;\r
-GtkWidget *hshift_step_spinbutton;\r
-GtkObject *vshift_step_spinbutton_adj;\r
-GtkWidget *vshift_step_spinbutton;\r
-GtkObject *hscale_step_spinbutton_adj;\r
-GtkWidget *hscale_step_spinbutton;\r
-GtkObject *vscale_step_spinbutton_adj;\r
-GtkWidget *vscale_step_spinbutton;\r
-GtkObject *rotate_step_spinbutton_adj;\r
-GtkWidget *rotate_step_spinbutton;\r
-\r
-GtkObject *fit_width_spinbutton_adj;\r
-GtkWidget *fit_width_spinbutton;\r
-GtkObject *fit_height_spinbutton_adj;\r
-GtkWidget *fit_height_spinbutton;\r
-GtkWidget *fit_button;\r
-GtkWidget *axial_button;\r
-\r
-GtkWidget *done_button;\r
-GtkWidget *apply_button;\r
-GtkWidget *cancel_button;\r
-\r
-// Callbacks\r
-gboolean on_texture_combo_entry_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data);\r
-void on_texture_combo_entry_activate (GtkEntry *entry, gpointer user_data);\r
-\r
-static void on_match_grid_button_clicked (GtkButton *button, gpointer user_data);\r
-static void on_lock_valuechange_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data);\r
-\r
-static void on_hshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_hscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_rotate_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-\r
-static void on_hshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_hscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_rotate_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-\r
-static void on_hshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_hscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_vscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_rotate_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-\r
-static void on_fit_width_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_fit_height_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);\r
-static void on_fit_button_clicked (GtkButton *button, gpointer user_data);\r
-static void on_axial_button_clicked (GtkButton *button, gpointer user_data);\r
-\r
-static void on_done_button_clicked (GtkButton *button, gpointer user_data);\r
-static void on_apply_button_clicked (GtkButton *button, gpointer user_data);\r
-static void on_cancel_button_clicked (GtkButton *button, gpointer user_data);\r
-\r
-\r
-/*\r
-===================================================\r
-\r
-  SURFACE INSPECTOR\r
-\r
-===================================================\r
-*/\r
-\r
-\r
-void IsFaceConflicting()\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  char buf[12];\r
-  char texture_name[128];\r
-\r
-  if (texdef_face_list_empty())\r
-  {\r
-    gtk_entry_set_text( GTK_ENTRY (hshift_value_spinbutton), "");\r
-    gtk_entry_set_text( GTK_ENTRY (vshift_value_spinbutton), "");\r
-    gtk_entry_set_text( GTK_ENTRY (hscale_value_spinbutton), "");\r
-    gtk_entry_set_text( GTK_ENTRY (vscale_value_spinbutton), "");\r
-    gtk_entry_set_text( GTK_ENTRY (rotate_value_spinbutton), "");\r
-    gtk_entry_set_text( GTK_ENTRY (texture_combo_entry), "");\r
-    return;\r
-  }\r
-\r
-  g_bListenChanged = FALSE;\r
-\r
-  tmp_texdef = &get_texdef_face_list()->texdef;\r
-\r
-  strcpy(texture_name, tmp_texdef->GetName() );\r
-\r
-  texdef_SI_values.shift[0] = tmp_texdef->shift[0];\r
-  texdef_SI_values.shift[1] = tmp_texdef->shift[1];\r
-  texdef_SI_values.scale[0] = tmp_texdef->scale[0];\r
-  texdef_SI_values.scale[1] = tmp_texdef->scale[1];\r
-  texdef_SI_values.rotate = tmp_texdef->rotate;\r
-  texdef_SI_values.SetName( texture_name );\r
-\r
-  is_HShift_conflicting = FALSE;\r
-  is_VShift_conflicting = FALSE;\r
-  is_HScale_conflicting = FALSE;\r
-  is_VScale_conflicting = FALSE;\r
-  is_Rotate_conflicting = FALSE;\r
-  is_TextureName_conflicting = FALSE;\r
-\r
-  if (texdef_face_list_size() > 1)\r
-  {\r
-    temp_texdef_face_list = get_texdef_face_list()->next;\r
-\r
-    for (temp_texdef_face_list; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = &temp_texdef_face_list->texdef;\r
-      if ( texdef_SI_values.shift[0] != tmp_texdef->shift[0] )\r
-        is_HShift_conflicting = TRUE;\r
-\r
-      if ( texdef_SI_values.shift[1] != tmp_texdef->shift[1] )\r
-        is_VShift_conflicting = TRUE;\r
-\r
-      if ( texdef_SI_values.scale[0] != tmp_texdef->scale[0] )\r
-        is_HScale_conflicting = TRUE;\r
-\r
-      if ( texdef_SI_values.scale[1] != tmp_texdef->scale[1] )\r
-        is_VScale_conflicting = TRUE;\r
-\r
-      if ( texdef_SI_values.rotate != tmp_texdef->rotate )\r
-        is_Rotate_conflicting = TRUE;\r
-\r
-      if ( strcmp( texture_name, tmp_texdef->GetName() ) )\r
-        is_TextureName_conflicting = TRUE;\r
-    }\r
-  }\r
-\r
-  if(is_HShift_conflicting)\r
-    gtk_entry_set_text( GTK_ENTRY (hshift_value_spinbutton), "");\r
-  else\r
-    gtk_spin_button_set_value( GTK_SPIN_BUTTON(hshift_value_spinbutton) , texdef_SI_values.shift[0] );\r
-\r
-  if(is_VShift_conflicting)\r
-    gtk_entry_set_text( GTK_ENTRY (vshift_value_spinbutton), "");\r
-  else\r
-    gtk_spin_button_set_value( GTK_SPIN_BUTTON(vshift_value_spinbutton) , texdef_SI_values.shift[1] );\r
-\r
-  if(is_HScale_conflicting)\r
-    gtk_entry_set_text( GTK_ENTRY (hscale_value_spinbutton), "");\r
-  else\r
-    gtk_spin_button_set_value( GTK_SPIN_BUTTON(hscale_value_spinbutton) , texdef_SI_values.scale[0] );\r
-\r
-  if(is_VScale_conflicting)\r
-    gtk_entry_set_text( GTK_ENTRY (vscale_value_spinbutton), "");\r
-  else\r
-    gtk_spin_button_set_value( GTK_SPIN_BUTTON(vscale_value_spinbutton) , texdef_SI_values.scale[1] );\r
-\r
-  if(is_Rotate_conflicting)\r
-    gtk_entry_set_text( GTK_ENTRY (rotate_value_spinbutton), "");\r
-  else\r
-    gtk_spin_button_set_value( GTK_SPIN_BUTTON(rotate_value_spinbutton) , texdef_SI_values.rotate );\r
-\r
-  g_bListenChanged = TRUE;\r
-}\r
-\r
-#define MAX_NUM_LIST_ITEMS 15\r
-static void PopulateTextureComboList()\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  char blank[1];\r
-  GList *items = NULL;\r
-  GList *tmp_item;\r
-  int num_of_list_items = 0;\r
-\r
-  blank[0] = 0;\r
-  \r
-  if (texdef_face_list_empty())\r
-  {\r
-    items = g_list_append (items, (gpointer) blank);\r
-    // For Texture Entry, activate only on entry change\r
-    strcpy (old_texture_entry, blank);\r
-  }\r
-  else if ( !is_TextureName_conflicting )\r
-  {\r
-    temp_texdef_face_list = get_texdef_face_list(); \r
-    tmp_texdef = (texdef_t *) &get_texdef_face_list()->texdef;\r
-    items = g_list_append( items, (gpointer) tmp_texdef->GetName() );\r
-    // For Texture Entry, activate only on entry change\r
-    strcpy (old_texture_entry, tmp_texdef->GetName());\r
-  }\r
-  else\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      // Need to do a string compare, hence the custom search\r
-      if (!( g_list_find_custom (items, tmp_texdef->GetName(), (GCompareFunc) strcmp ) ))\r
-      {\r
-        items = g_list_append( items, (gpointer) tmp_texdef->GetName() );\r
-       num_of_list_items++;\r
-      }\r
-      // Make sure the combo list isn't too long\r
-      if (num_of_list_items >= MAX_NUM_LIST_ITEMS)\r
-        break;\r
-    }\r
-    // If this isn't added last (to the top of the list), g_list_find freaks.\r
-    items = g_list_prepend (items, (gpointer) blank);\r
-    // For Texture Entry, activate only on entry change\r
-    strcpy (old_texture_entry, blank);\r
-  }\r
-  \r
-  gtk_combo_set_popdown_strings (GTK_COMBO (texture_combo), items);\r
-  g_list_free(items);\r
-\r
-}\r
-\r
-static void ZeroOffsetValues()\r
-{\r
-  texdef_offset.shift[0] = 0.0;\r
-  texdef_offset.shift[1] = 0.0;\r
-  texdef_offset.scale[0] = 0.0;\r
-  texdef_offset.scale[1] = 0.0;\r
-  texdef_offset.rotate = 0.0;\r
-}\r
-\r
-static void GetTexdefInfo_from_Radiant()\r
-{\r
-  g_texdef_face_vector.clear();\r
-\r
-  unsigned int count = GetSelectedFaceCountfromBrushes();\r
-  if(count == 0)\r
-    count = GetSelectedFaceCount();\r
-    \r
-  g_texdef_face_vector.resize(count);\r
-\r
-  if (!texdef_face_list_empty())\r
-  {\r
-    texdef_to_face_t* p = get_texdef_face_list();\r
-    GetSelFacesTexdef( get_texdef_face_list() );\r
-  }\r
-  \r
-  IsFaceConflicting();\r
-  PopulateTextureComboList(); \r
-  ZeroOffsetValues();\r
-  if ( texdef_face_list_empty() )\r
-    SetFlagButtons_Heretic2( get_texdef_face_list() , TRUE);\r
-  else\r
-    SetFlagButtons_Heretic2( get_texdef_face_list() , FALSE);\r
-\r
-}\r
-\r
-static gint delete_event_callback(GtkWidget *widget, GdkEvent* event, gpointer data)\r
-{\r
-  HideDlg();\r
-  return TRUE;\r
-}\r
-\r
-// make the shift increments match the grid settings\r
-// the objective being that the shift+arrows shortcuts move the texture by the corresponding grid size\r
-// this depends on a scale value if you have selected a particular texture on which you want it to work:\r
-// we move the textures in pixels, not world units. (i.e. increment values are in pixel)\r
-// depending on the texture scale it doesn't take the same amount of pixels to move of g_qeglobals.d_gridsize\r
-// increment * scale = gridsize\r
-// hscale and vscale are optional parameters, if they are zero they will be set to the default scale\r
-// NOTE: the default scale depends if you are using BP mode or regular.\r
-// For regular it's 0.5f (128 pixels cover 64 world units), for BP it's simply 1.0f\r
-// see fenris #2810\r
-void DoSnapTToGrid(float hscale, float vscale)\r
-{\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-  if (hscale == 0.0f)\r
-  {\r
-    hscale = 0.5f;\r
-  }\r
-  if (vscale == 0.0f)\r
-  {\r
-     vscale = 0.5f;\r
-  }\r
-#ifdef _DEBUG\r
-  Sys_Printf ("DoSnapTToGrid: hscale %g vscale %g\n", hscale, vscale);\r
-#endif\r
-  l_pIncrement->shift[0] = GridSize() / hscale;\r
-  l_pIncrement->shift[1] = GridSize() / vscale;\r
-  // now some update work\r
-  // FIXME: doesn't look good here, seems to be called several times\r
-  SetTexMods();\r
-}\r
-\r
-void UpdateSurfaceDialog()\r
-{\r
-  if (!g_bListenUpdate)\r
-    return;\r
-    \r
-  if (!SurfaceInspector)\r
-    return;\r
-\r
-  // avoid long delays on slow computers\r
-  while (gtk_events_pending ())\r
-    gtk_main_iteration ();\r
-    \r
-  if (g_surfwin)\r
-  {\r
-#ifdef DBG_SI\r
-    Sys_Printf("UpdateSurfaceDialog\n");\r
-#endif\r
-    GetTexdefInfo_from_Radiant();\r
-    SetTexMods();\r
-  }\r
-\r
-}\r
-\r
-// DoSurface will always try to show the surface inspector\r
-// or update it because something new has been selected\r
-void DoSurface (void)\r
-{\r
-#ifdef DBG_SI\r
-  Sys_Printf("DoSurface\n");\r
-#endif\r
-  if (!SurfaceInspector)\r
-    create_SurfaceInspector ();\r
-  \r
-  ShowDlg();\r
-  SetTexMods ();\r
-}\r
-\r
-void ToggleSurface()\r
-{\r
-#ifdef DBG_SI\r
-  Sys_Printf("ToggleSurface Module\n");\r
-#endif\r
-  if (!g_surfwin)\r
-    DoSurface ();\r
-  else\r
-    on_cancel_button_clicked(NULL, NULL);\r
-}\r
-\r
-// NOTE: will raise and show the Surface inspector and exec fit for patches and brushes\r
-void SurfaceDlgFitAll()\r
-{\r
-  DoSurface();\r
-  FitAll();\r
-}\r
-\r
-// =============================================================================\r
-// SurfaceDialog class\r
-\r
-void ShowDlg()\r
-{\r
-\r
-  if(!SurfaceInspector)\r
-    create_SurfaceInspector();\r
-  else\r
-    gtk_widget_show (SurfaceInspector);\r
-\r
-  GetTexdefInfo_from_Radiant();\r
-  GetTexMods(TRUE); // Set Initial Undo Point\r
-  g_surfwin = TRUE;\r
-}\r
-\r
-void HideDlg()\r
-{\r
-  g_surfwin = FALSE;\r
-  gtk_widget_hide (SurfaceInspector);\r
-}\r
-\r
-\r
-// set default values for increments (shift scale and rot)\r
-// this is called by the prefs code if can't find the values\r
-void InitDefaultIncrement(texdef_t *tex)\r
-{\r
-  tex->SetName("foo");\r
-  tex->shift[0] = 8;\r
-  tex->shift[1] = 8;\r
-  tex->scale[0] = 0.25;\r
-  tex->scale[1] = 0.25;\r
-  tex->rotate = 10;\r
-}\r
-\r
-void BuildDialog ()\r
-{\r
-   if ( !SurfaceInspector )\r
-    create_SurfaceInspector();\r
-}\r
-\r
-/*\r
-==============\r
-SetTexMods\r
-\r
-Set the fields to the current texdef (i.e. map/texdef -> dialog widgets)\r
-===============\r
-*/\r
-\r
-void SetTexMods()\r
-{\r
-  texdef_t *pt;\r
-  GtkSpinButton *spin;\r
-  GtkAdjustment *adjust;\r
-\r
-  texturewin = Texturewin ();\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("SurfaceDlg SetTexMods\n");\r
-#endif\r
-\r
-  if (!g_surfwin)\r
-    return;\r
-    \r
-  pt = &texturewin->texdef;\r
-\r
-  g_bListenChanged = false;\r
-\r
-  if(strncmp(pt->GetName(), "textures/", 9) != 0)\r
-    texdef_offset.SetName(SHADER_NOT_FOUND);\r
-\r
\r
-  spin = GTK_SPIN_BUTTON (hshift_offset_spinbutton);\r
-  gtk_spin_button_set_value (spin, texdef_offset.shift[0]);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->shift[0];\r
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(hshift_step_spinbutton), l_pIncrement->shift[0]);\r
-  \r
-  spin = GTK_SPIN_BUTTON (hshift_value_spinbutton);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->shift[0];\r
-  \r
-\r
-  spin = GTK_SPIN_BUTTON (vshift_offset_spinbutton);\r
-  gtk_spin_button_set_value (spin, texdef_offset.shift[1]);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->shift[1];\r
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(vshift_step_spinbutton), l_pIncrement->shift[1]);\r
-  \r
-  spin = GTK_SPIN_BUTTON (vshift_value_spinbutton);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->shift[1];\r
-\r
-\r
-  spin = GTK_SPIN_BUTTON (hscale_offset_spinbutton);\r
-  gtk_spin_button_set_value (spin, texdef_offset.scale[0]);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->scale[0];\r
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(hscale_step_spinbutton), l_pIncrement->scale[0]);\r
-\r
-  spin = GTK_SPIN_BUTTON (hscale_value_spinbutton);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->scale[0];\r
-\r
-  \r
-  spin = GTK_SPIN_BUTTON (vscale_offset_spinbutton);\r
-  gtk_spin_button_set_value (spin, texdef_offset.scale[1]);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->scale[1];\r
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(vscale_step_spinbutton), l_pIncrement->scale[1]);\r
-  \r
-  spin = GTK_SPIN_BUTTON (vscale_value_spinbutton);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->scale[1];\r
-  \r
-\r
-  spin = GTK_SPIN_BUTTON (rotate_offset_spinbutton);\r
-  gtk_spin_button_set_value (spin, texdef_offset.rotate);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->rotate;\r
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(rotate_step_spinbutton), l_pIncrement->rotate);\r
-  \r
-  spin = GTK_SPIN_BUTTON (rotate_value_spinbutton);\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));\r
-  adjust->step_increment = l_pIncrement->rotate;\r
-\r
-  \r
-  g_bListenChanged = true;\r
-\r
-  // store the current texdef as our escape route if user hits OnCancel\r
-  g_old_texdef = texturewin->texdef;\r
-}\r
-\r
-/*\r
-==============\r
-GetTexMods\r
-\r
-Shows any changes to the main Radiant windows\r
-===============\r
-*/\r
-void GetTexMods(bool b_SetUndoPoint)\r
-{\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("SurfaceDlg GetTexMods\n");\r
-#endif\r
-\r
-   if ( !texdef_face_list_empty() )\r
-  {\r
-    g_bListenUpdate=FALSE;\r
-    SetChangeInFlags_Face_Heretic2 ( get_texdef_face_list() );\r
-    SetTexdef_FaceList( get_texdef_face_list(), b_SetUndoPoint );\r
-    g_bListenUpdate=TRUE;\r
-\r
-    if (b_SetUndoPoint)\r
-      m_nUndoId = Undo_GetUndoId();\r
-  }\r
-}\r
-\r
-void FitAll()\r
-{\r
-  on_fit_button_clicked(NULL, NULL);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-//  GUI Section\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-\r
-GtkWidget* create_SurfaceInspector (void)\r
-{\r
-  \r
-  GtkWidget *label;\r
-  GtkWidget *hseparator;\r
-  GtkWidget *eventbox;\r
-\r
-  GtkWidget *viewport8;\r
-  GtkWidget *viewport9;\r
-  GtkWidget *viewport2;\r
-  GtkWidget *viewport7;\r
-  GtkWidget *viewport5;\r
-  GtkWidget *viewport6;\r
-  GtkWidget *viewport10;\r
-\r
-  GtkWidget *table1;\r
-  GtkWidget *table4;\r
-  GtkWidget *table5;\r
-  GtkWidget *table7;\r
-\r
-  GtkWidget *alignment1;\r
-  GtkWidget *alignment2;\r
-  GtkWidget *alignment3;\r
-\r
-  GtkWidget *vbox7;\r
-\r
-  GtkWidget *hbox1;\r
-  GtkWidget *hbox2;\r
-  GtkWidget *hbox3;\r
-  GtkWidget *hbox4;\r
-\r
-  GtkWidget *image1;\r
-  GtkWidget *image2;\r
-  GtkWidget *image3;\r
-\r
-  GtkWidget *hbuttonbox1;\r
-\r
-  SurfaceInspector = gtk_window_new (GTK_WINDOW_TOPLEVEL);\r
-  gtk_container_set_border_width (GTK_CONTAINER (SurfaceInspector), 4);\r
-  gtk_window_set_title (GTK_WINDOW (SurfaceInspector), "Surface Inspector");\r
-  \r
-  SetWinPos_from_Prefs(SurfaceInspector);\r
-\r
-  viewport8 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport8);\r
-  gtk_container_add (GTK_CONTAINER (SurfaceInspector), viewport8);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport8), GTK_SHADOW_NONE);\r
-\r
-  vbox7 = gtk_vbox_new (FALSE, 0);\r
-  gtk_widget_show (vbox7);\r
-  gtk_container_add (GTK_CONTAINER (viewport8), vbox7);\r
-\r
-  viewport9 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport9);\r
-  gtk_box_pack_start (GTK_BOX (vbox7), viewport9, FALSE, FALSE, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport9), 2);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport9), GTK_SHADOW_ETCHED_IN);\r
-\r
-  hbox1 = gtk_hbox_new (FALSE, 0);\r
-  gtk_widget_show (hbox1);\r
-  gtk_container_add (GTK_CONTAINER (viewport9), hbox1);\r
-  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 4);\r
-\r
-  label = gtk_label_new ("Texture: ");\r
-  gtk_widget_show (label);\r
-  gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  texture_combo = gtk_combo_new ();\r
-  g_object_set_data (G_OBJECT (GTK_COMBO (texture_combo)->popwin),\r
-                     "KeepMeAround", texture_combo);\r
-  gtk_combo_disable_activate ( (GtkCombo*) texture_combo);                  \r
-  gtk_widget_show (texture_combo);\r
-  gtk_box_pack_start (GTK_BOX (hbox1), texture_combo, TRUE, TRUE, 0);\r
-\r
-  texture_combo_entry = GTK_COMBO (texture_combo)->entry;\r
-  gtk_widget_show (texture_combo_entry);\r
-  gtk_entry_set_max_length (GTK_ENTRY (texture_combo_entry), 128);\r
-\r
-  viewport2 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport2);\r
-  gtk_box_pack_start (GTK_BOX (vbox7), viewport2, FALSE, TRUE, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport2), 2);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport2), GTK_SHADOW_ETCHED_IN);\r
-\r
-  table1 = gtk_table_new (13, 4, FALSE);\r
-  gtk_widget_show (table1);\r
-  gtk_container_add (GTK_CONTAINER (viewport2), table1);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 3, 4,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 3, 4,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 3, 4,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 5, 6,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 5, 6,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 5, 6,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 7, 8,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 7, 8,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 7, 8,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 9, 10,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 9, 10,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 9, 10,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 11, 12,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 11, 12,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 11, 12,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new ("Offset");\r
-  gtk_widget_show (label);\r
-  gtk_table_attach (GTK_TABLE (table1), label, 2, 3, 0, 1,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-\r
-  label = gtk_label_new ("Step");\r
-  gtk_widget_show (label);\r
-  gtk_table_attach (GTK_TABLE (table1), label, 3, 4, 0, 1,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 3, 4, 12, 13,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  match_grid_button = gtk_button_new_with_mnemonic ("Match Grid");\r
-  gtk_widget_show (match_grid_button);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), match_grid_button);\r
-\r
-  label = gtk_label_new ("Value");\r
-  gtk_widget_show (label);\r
-  gtk_table_attach (GTK_TABLE (table1), label, 1, 2, 0, 1,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 3, 4,\r
-                    (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 5, 6,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 7, 8,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 9, 10,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 11, 12,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 4, 5,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new ("V Shift: ");\r
-  gtk_widget_show (label);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), label);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 6, 7,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new (" H Scale: ");\r
-  gtk_widget_show (label);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), label);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 8, 9,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new ("V Scale: ");\r
-  gtk_widget_show (label);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), label);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 10, 11,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new ("Rotate: ");\r
-  gtk_widget_show (label);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), label);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 2, 3,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  label = gtk_label_new ("H Shift: ");\r
-  gtk_widget_show (label);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), label);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);\r
-\r
-  hseparator = gtk_hseparator_new ();\r
-  gtk_widget_show (hseparator);\r
-  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 1, 2,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 1, 2, 12, 13,\r
-                    (GtkAttachOptions) (GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  lock_valuechange_togglebutton = gtk_toggle_button_new_with_mnemonic ("UNLOCK");\r
-  gtk_widget_show (lock_valuechange_togglebutton);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), lock_valuechange_togglebutton);\r
-\r
-  // Value Spins\r
-  hshift_value_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  hshift_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_value_spinbutton_adj), 1, 2);\r
-  gtk_widget_show (hshift_value_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hshift_value_spinbutton, 1, 2, 2, 3,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_value_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hshift_value_spinbutton), TRUE);\r
-  gtk_widget_set_sensitive( GTK_WIDGET( hshift_value_spinbutton ), FALSE );\r
-\r
-  vshift_value_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  vshift_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_value_spinbutton_adj), 1, 2);\r
-  gtk_widget_show (vshift_value_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vshift_value_spinbutton, 1, 2, 4, 5,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_value_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vshift_value_spinbutton), TRUE);\r
-  gtk_widget_set_sensitive( GTK_WIDGET( vshift_value_spinbutton ), FALSE );\r
-\r
-  hscale_value_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  hscale_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_value_spinbutton_adj), 1, 4);\r
-  gtk_widget_show (hscale_value_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hscale_value_spinbutton, 1, 2, 6, 7,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_value_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hscale_value_spinbutton), TRUE);\r
-  gtk_widget_set_sensitive( GTK_WIDGET( hscale_value_spinbutton ), FALSE );\r
-\r
-  vscale_value_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  vscale_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_value_spinbutton_adj), 1, 4);\r
-  gtk_widget_show (vscale_value_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vscale_value_spinbutton, 1, 2, 8, 9,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_value_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vscale_value_spinbutton), TRUE);\r
-  gtk_widget_set_sensitive( GTK_WIDGET( vscale_value_spinbutton ), FALSE );\r
-  \r
-  rotate_value_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);\r
-  rotate_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_value_spinbutton_adj), 1, 0);\r
-  gtk_widget_show (rotate_value_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), rotate_value_spinbutton, 1, 2, 10, 11,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_value_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rotate_value_spinbutton), TRUE);\r
-  gtk_widget_set_sensitive( GTK_WIDGET( rotate_value_spinbutton ), FALSE );\r
-\r
-  // Offset Spins                 \r
-  hshift_offset_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  hshift_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_offset_spinbutton_adj), 0, 2);\r
-  gtk_widget_show (hshift_offset_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hshift_offset_spinbutton, 2, 3, 2, 3,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 4, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (hshift_offset_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_offset_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hshift_offset_spinbutton), TRUE);\r
-\r
-  vshift_offset_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  vshift_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_offset_spinbutton_adj), 0, 2);\r
-  gtk_widget_show (vshift_offset_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vshift_offset_spinbutton, 2, 3, 4, 5,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 4, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (vshift_offset_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_offset_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vshift_offset_spinbutton), TRUE);\r
-\r
-  hscale_offset_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  hscale_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_offset_spinbutton_adj), 0, 4);\r
-  gtk_widget_show (hscale_offset_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hscale_offset_spinbutton, 2, 3, 6, 7,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 4, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (hscale_offset_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_offset_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hscale_offset_spinbutton), TRUE);\r
-\r
-  vscale_offset_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  vscale_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_offset_spinbutton_adj), 0, 4);\r
-  gtk_widget_show (vscale_offset_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vscale_offset_spinbutton, 2, 3, 8, 9,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 4, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (vscale_offset_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_offset_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vscale_offset_spinbutton), TRUE);\r
-\r
-  rotate_offset_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);\r
-  rotate_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_offset_spinbutton_adj), 0, 2);\r
-  gtk_widget_show (rotate_offset_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), rotate_offset_spinbutton, 2, 3, 10, 11,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 4, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (rotate_offset_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_offset_spinbutton), GTK_UPDATE_IF_VALID);\r
-  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rotate_offset_spinbutton), TRUE);\r
-\r
-    // Step Spins\r
-  hshift_step_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  hshift_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_step_spinbutton_adj), 1, 2);\r
-  gtk_widget_show (hshift_step_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hshift_step_spinbutton, 3, 4, 2, 3,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_step_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  vshift_step_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);\r
-  vshift_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_step_spinbutton_adj), 1, 2);\r
-  gtk_widget_show (vshift_step_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vshift_step_spinbutton, 3, 4, 4, 5,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_step_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  hscale_step_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  hscale_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_step_spinbutton_adj), 1, 4);\r
-  gtk_widget_show (hscale_step_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), hscale_step_spinbutton, 3, 4, 6, 7,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_step_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  vscale_step_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);\r
-  vscale_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_step_spinbutton_adj), 1, 4);\r
-  gtk_widget_show (vscale_step_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), vscale_step_spinbutton, 3, 4, 8, 9,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_step_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  rotate_step_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);\r
-  rotate_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_step_spinbutton_adj), 1, 2);\r
-  gtk_widget_show (rotate_step_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table1), rotate_step_spinbutton, 3, 4, 10, 11,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_step_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 2, 3, 12, 13,\r
-                    (GtkAttachOptions) (0),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 12, 13,\r
-                    (GtkAttachOptions) (0),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 0, 1,\r
-                    (GtkAttachOptions) (0),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-\r
-  viewport7 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport7);\r
-  gtk_box_pack_start (GTK_BOX (vbox7), viewport7, FALSE, TRUE, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport7), 2);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport7), GTK_SHADOW_ETCHED_IN);\r
-\r
-  table4 = gtk_table_new (4, 7, FALSE);\r
-  gtk_widget_show (table4);\r
-  gtk_container_add (GTK_CONTAINER (viewport7), table4);\r
-\r
-  viewport5 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport5);\r
-  gtk_table_attach (GTK_TABLE (table4), viewport5, 1, 7, 0, 4,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport5), 6);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport5), GTK_SHADOW_ETCHED_OUT);\r
-\r
-  table5 = gtk_table_new (2, 3, FALSE);\r
-  gtk_widget_show (table5);\r
-  gtk_container_add (GTK_CONTAINER (viewport5), table5);\r
-  gtk_container_set_border_width (GTK_CONTAINER (table5), 5);\r
-  gtk_table_set_col_spacings (GTK_TABLE (table5), 2);\r
-\r
-  label = gtk_label_new ("Height");\r
-  gtk_widget_show (label);\r
-  gtk_table_attach (GTK_TABLE (table5), label, 2, 3, 0, 1,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);\r
-\r
-  label = gtk_label_new ("Width");\r
-  gtk_widget_show (label);\r
-  gtk_table_attach (GTK_TABLE (table5), label, 1, 2, 0, 1,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);\r
-\r
-  fit_width_spinbutton_adj = gtk_adjustment_new (1, 1, 32, 1, 10, 10);\r
-  fit_width_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fit_width_spinbutton_adj), 1, 0);\r
-  gtk_widget_show (fit_width_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table5), fit_width_spinbutton, 1, 2, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fit_width_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fit_width_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  fit_height_spinbutton_adj = gtk_adjustment_new (1, 1, 32, 1, 10, 10);\r
-  fit_height_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fit_height_spinbutton_adj), 1, 0);\r
-  gtk_widget_show (fit_height_spinbutton);\r
-  gtk_table_attach (GTK_TABLE (table5), fit_height_spinbutton, 2, 3, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 3, 0);\r
-  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fit_height_spinbutton), TRUE);\r
-  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fit_height_spinbutton), GTK_UPDATE_IF_VALID);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table5), eventbox, 0, 1, 0, 1,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table5), eventbox, 0, 1, 1, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_FILL), 4, 0);\r
-\r
-  fit_button = gtk_button_new_with_mnemonic ("    Fit    ");\r
-  gtk_widget_show (fit_button);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), fit_button);\r
-\r
-  viewport6 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport6);\r
-  gtk_table_attach (GTK_TABLE (table4), viewport6, 0, 1, 0, 4,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (0), 0, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport6), 4);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport6), GTK_SHADOW_NONE);\r
-\r
-  table7 = gtk_table_new (2, 1, FALSE);\r
-  gtk_widget_show (table7);\r
-  gtk_container_add (GTK_CONTAINER (viewport6), table7);\r
-\r
-  eventbox = gtk_event_box_new ();\r
-  gtk_widget_show (eventbox);\r
-  gtk_table_attach (GTK_TABLE (table7), eventbox, 0, 1, 0, 2,\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),\r
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);\r
-\r
-  axial_button = gtk_button_new_with_mnemonic ("Axial");\r
-  gtk_widget_show (axial_button);\r
-  gtk_container_add (GTK_CONTAINER (eventbox), axial_button);\r
-  gtk_widget_set_size_request (axial_button, 56, 29);\r
-  gtk_container_set_border_width (GTK_CONTAINER (axial_button), 4);\r
-\r
-  // Fit in Flags sub-dialog\r
-  Create_Heretic2FlagsDialog(vbox7);\r
-\r
-  viewport10 = gtk_viewport_new (NULL, NULL);\r
-  gtk_widget_show (viewport10);\r
-  gtk_box_pack_start (GTK_BOX (vbox7), viewport10, FALSE, TRUE, 0);\r
-  gtk_container_set_border_width (GTK_CONTAINER (viewport10), 2);\r
-  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport10), GTK_SHADOW_ETCHED_IN);\r
-\r
-  hbuttonbox1 = gtk_hbutton_box_new ();\r
-  gtk_widget_show (hbuttonbox1);\r
-  gtk_container_add (GTK_CONTAINER (viewport10), hbuttonbox1);\r
-  gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox1), 4);\r
-  gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_SPREAD);\r
-\r
-  done_button = gtk_button_new ();\r
-  gtk_widget_show (done_button);\r
-  gtk_container_add (GTK_CONTAINER (hbuttonbox1), done_button);\r
-  GTK_WIDGET_SET_FLAGS (done_button, GTK_CAN_DEFAULT);\r
-\r
-  alignment1 = gtk_alignment_new (0.5, 0.5, 0, 0);\r
-  gtk_widget_show (alignment1);\r
-  gtk_container_add (GTK_CONTAINER (done_button), alignment1);\r
-\r
-  hbox2 = gtk_hbox_new (FALSE, 2);\r
-  gtk_widget_show (hbox2);\r
-  gtk_container_add (GTK_CONTAINER (alignment1), hbox2);\r
-\r
-  image1 = gtk_image_new_from_stock ("gtk-yes", GTK_ICON_SIZE_BUTTON);\r
-  gtk_widget_show (image1);\r
-  gtk_box_pack_start (GTK_BOX (hbox2), image1, FALSE, FALSE, 0);\r
-\r
-  label = gtk_label_new_with_mnemonic ("Done");\r
-  gtk_widget_show (label);\r
-  gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-\r
-  apply_button = gtk_button_new ();\r
-  gtk_widget_show (apply_button);\r
-  gtk_container_add (GTK_CONTAINER (hbuttonbox1), apply_button);\r
-  GTK_WIDGET_SET_FLAGS (apply_button, GTK_CAN_DEFAULT);\r
-\r
-  alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);\r
-  gtk_widget_show (alignment3);\r
-  gtk_container_add (GTK_CONTAINER (apply_button), alignment3);\r
-\r
-  hbox4 = gtk_hbox_new (FALSE, 2);\r
-  gtk_widget_show (hbox4);\r
-  gtk_container_add (GTK_CONTAINER (alignment3), hbox4);\r
-\r
-  image3 = gtk_image_new_from_stock ("gtk-apply", GTK_ICON_SIZE_BUTTON);\r
-  gtk_widget_show (image3);\r
-  gtk_box_pack_start (GTK_BOX (hbox4), image3, FALSE, FALSE, 0);\r
-\r
-  label = gtk_label_new_with_mnemonic ("Apply");\r
-  gtk_widget_show (label);\r
-  gtk_box_pack_start (GTK_BOX (hbox4), label, FALSE, FALSE, 0);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-\r
-  cancel_button = gtk_button_new ();\r
-  gtk_widget_show (cancel_button);\r
-  gtk_container_add (GTK_CONTAINER (hbuttonbox1), cancel_button);\r
-  GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);\r
-\r
-  alignment2 = gtk_alignment_new (0.5, 0.5, 0, 0);\r
-  gtk_widget_show (alignment2);\r
-  gtk_container_add (GTK_CONTAINER (cancel_button), alignment2);\r
-\r
-  hbox3 = gtk_hbox_new (FALSE, 2);\r
-  gtk_widget_show (hbox3);\r
-  gtk_container_add (GTK_CONTAINER (alignment2), hbox3);\r
-\r
-  image2 = gtk_image_new_from_stock ("gtk-no", GTK_ICON_SIZE_BUTTON);\r
-  gtk_widget_show (image2);\r
-  gtk_box_pack_start (GTK_BOX (hbox3), image2, FALSE, FALSE, 0);\r
-\r
-  label = gtk_label_new_with_mnemonic ("Cancel");\r
-  gtk_widget_show (label);\r
-  gtk_box_pack_start (GTK_BOX (hbox3), label, FALSE, FALSE, 0);\r
-  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);\r
-\r
-\r
-  g_signal_connect ( (gpointer) SurfaceInspector, \r
-                      "delete_event", \r
-                      G_CALLBACK (delete_event_callback), \r
-                     NULL );\r
-  g_signal_connect ((gpointer) SurfaceInspector, "destroy",\r
-                    G_CALLBACK (gtk_widget_destroy),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) texture_combo_entry, "key_press_event",\r
-                    G_CALLBACK (on_texture_combo_entry_key_press_event),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) texture_combo_entry, "activate",\r
-                    G_CALLBACK (on_texture_combo_entry_activate),\r
-                    NULL);\r
-                   \r
-  \r
-  g_signal_connect ((gpointer) hshift_offset_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hshift_offset_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vshift_offset_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vshift_offset_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) hscale_offset_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hscale_offset_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vscale_offset_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vscale_offset_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) rotate_offset_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_rotate_offset_spinbutton_value_changed),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) hshift_value_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hshift_value_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vshift_value_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vshift_value_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) hscale_value_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hscale_value_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vscale_value_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vscale_value_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) rotate_value_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_rotate_value_spinbutton_value_changed),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) hshift_step_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hshift_step_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vshift_step_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vshift_step_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) hscale_step_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_hscale_step_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) vscale_step_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_vscale_step_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) rotate_step_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_rotate_step_spinbutton_value_changed),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) match_grid_button, "clicked",\r
-                    G_CALLBACK (on_match_grid_button_clicked),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) lock_valuechange_togglebutton, "toggled",\r
-                    G_CALLBACK (on_lock_valuechange_togglebutton_toggled),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) fit_width_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_fit_width_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) fit_height_spinbutton, "value_changed",\r
-                    G_CALLBACK (on_fit_height_spinbutton_value_changed),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) fit_button, "clicked",\r
-                    G_CALLBACK (on_fit_button_clicked),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) axial_button, "clicked",\r
-                    G_CALLBACK (on_axial_button_clicked),\r
-                    NULL);\r
-  \r
-  g_signal_connect ((gpointer) done_button, "clicked",\r
-                    G_CALLBACK (on_done_button_clicked),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) apply_button, "clicked",\r
-                    G_CALLBACK (on_apply_button_clicked),\r
-                    NULL);\r
-  g_signal_connect ((gpointer) cancel_button, "clicked",\r
-                    G_CALLBACK (on_cancel_button_clicked),\r
-                    NULL);\r
-  \r
-  \r
-  return SurfaceInspector;\r
-}\r
-\r
-\r
-// Texture Combo\r
-gboolean on_texture_combo_entry_key_press_event (GtkWidget *widget, GdkEventKey *event,\r
-                                                 gpointer user_data)\r
-{\r
-  // Have Tab activate selection as well as Return\r
-  if (event->keyval == GDK_Tab)\r
-    g_signal_emit_by_name ( texture_combo_entry, "activate" );\r
-\r
-  return FALSE;\r
-}\r
-\r
-void on_texture_combo_entry_activate (GtkEntry *entry, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  char text[128] = { 0 };\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    // activate only on entry change\r
-    strcpy( text, gtk_entry_get_text(entry));\r
-    if ( strcmp( old_texture_entry, text ))\r
-    {\r
-      // Check for spaces in shader name\r
-      if (text[0] <= ' ' || strchr(text, ' '))\r
-        Sys_FPrintf(SYS_WRN, "WARNING: spaces in shader names are not allowed, ignoring '%s'\n", text);\r
-      else\r
-      {  \r
-        for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-        {\r
-          tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-          tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-          strcpy( old_texture_entry, text );\r
-          tmp_texdef->SetName( text );\r
-        }\r
-        GetTexMods();\r
-      }\r
-    }\r
-  }\r
-}\r
-\r
-// Offset Spins\r
-static void on_hshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_offset.shift[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_offset_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      if (is_HShift_conflicting)\r
-        tmp_texdef->shift[0] = tmp_orig_texdef->shift[0] + texdef_offset.shift[0];\r
-      else\r
-        tmp_texdef->shift[0] = texdef_SI_values.shift[0] + texdef_offset.shift[0];\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-static void on_vshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_offset.shift[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_offset_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      if (is_VShift_conflicting)\r
-        tmp_texdef->shift[1] = tmp_orig_texdef->shift[1] + texdef_offset.shift[1];\r
-      else\r
-        tmp_texdef->shift[1] = texdef_SI_values.shift[1] + texdef_offset.shift[1];\r
-    }\r
-    GetTexMods();\r
-  }\r
-  \r
-}\r
-\r
-static void on_hscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_offset.scale[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_offset_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      if (is_HScale_conflicting)\r
-        tmp_texdef->scale[0] = tmp_orig_texdef->scale[0] + texdef_offset.scale[0];\r
-      else\r
-        tmp_texdef->scale[0] = texdef_SI_values.scale[0] + texdef_offset.scale[0];\r
-    }\r
-    GetTexMods();\r
-  }\r
-  \r
-  \r
-}\r
-\r
-static void on_vscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_offset.scale[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_offset_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      if (is_VScale_conflicting)\r
-        tmp_texdef->scale[1] = tmp_orig_texdef->scale[1] + texdef_offset.scale[1];\r
-      else\r
-        tmp_texdef->scale[1] = texdef_SI_values.scale[1] + texdef_offset.scale[1];\r
-    }\r
-    GetTexMods();\r
-  }\r
-  \r
-}\r
-\r
-static void on_rotate_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_offset.rotate = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_offset_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      if (is_Rotate_conflicting)\r
-        tmp_texdef->rotate = tmp_orig_texdef->rotate + texdef_offset.rotate;\r
-      else\r
-        tmp_texdef->rotate = texdef_SI_values.rotate + texdef_offset.rotate;\r
-    }\r
-    GetTexMods();\r
-  }\r
\r
-}\r
-\r
-\r
-// Match Grid\r
-static void on_match_grid_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  float hscale, vscale;\r
-\r
-  if( !strcmp(gtk_entry_get_text (GTK_ENTRY (hscale_value_spinbutton)), "") )\r
-    hscale = 0.0;\r
-  else\r
-    hscale = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_value_spinbutton) );\r
-\r
-  if( !strcmp( gtk_entry_get_text (GTK_ENTRY (vscale_value_spinbutton)), "") )\r
-    vscale = 0.0;\r
-  else\r
-    vscale = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_value_spinbutton) );\r
-  DoSnapTToGrid (hscale, vscale);\r
-}\r
-\r
-\r
-// Lock out changes to Value\r
-static void on_lock_valuechange_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data)\r
-{\r
-  bool is_Locked;\r
-\r
-  is_Locked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lock_valuechange_togglebutton));\r
-\r
-  gtk_widget_set_sensitive( GTK_WIDGET( hscale_value_spinbutton ), is_Locked );\r
-  gtk_widget_set_sensitive( GTK_WIDGET( vscale_value_spinbutton ), is_Locked );\r
-  gtk_widget_set_sensitive( GTK_WIDGET( hshift_value_spinbutton ), is_Locked );\r
-  gtk_widget_set_sensitive( GTK_WIDGET( vshift_value_spinbutton ), is_Locked );\r
-  gtk_widget_set_sensitive( GTK_WIDGET( rotate_value_spinbutton ), is_Locked );\r
-}\r
-\r
-\r
-// Value Spins\r
-static void on_hshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-\r
-  texdef_SI_values.shift[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_value_spinbutton) );\r
-\r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      tmp_texdef->shift[0] = texdef_SI_values.shift[0] + texdef_offset.shift[0];\r
-      is_HShift_conflicting = FALSE;\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-static void on_vshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_SI_values.shift[1]  = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_value_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      tmp_texdef->shift[1] = texdef_SI_values.shift[1] + texdef_offset.shift[1];\r
-      is_VShift_conflicting = FALSE;\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-static void on_hscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_SI_values.scale[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_value_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      tmp_texdef->scale[0] = texdef_SI_values.scale[0] + texdef_offset.scale[0];\r
-      is_HScale_conflicting = FALSE;\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-static void on_vscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_SI_values.scale[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_value_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      tmp_texdef->scale[1] = texdef_SI_values.scale[1] + texdef_offset.scale[1];\r
-      is_VScale_conflicting = FALSE;\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-static void on_rotate_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-  \r
-  texdef_SI_values.rotate = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_value_spinbutton) );\r
-  \r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;\r
-      tmp_texdef->rotate = texdef_SI_values.rotate + texdef_offset.rotate;\r
-      is_Rotate_conflicting = FALSE;\r
-    }\r
-    GetTexMods();\r
-  }\r
-}\r
-\r
-\r
-// Step Spins\r
-static void on_hshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  gfloat val;\r
-  GtkAdjustment * adjust;\r
-\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("OnIncrementChanged HShift\n");\r
-#endif\r
-\r
-  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_step_spinbutton) ) ;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hshift_offset_spinbutton ));\r
-  adjust->step_increment = val;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hshift_value_spinbutton ));\r
-  adjust->step_increment = val;\r
-  l_pIncrement->shift[0] = val;\r
-}\r
-\r
-static void on_vshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  gfloat val;\r
-  GtkAdjustment * adjust;\r
-\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("OnIncrementChanged VShift\n");\r
-#endif\r
-\r
-  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_step_spinbutton) ) ;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vshift_offset_spinbutton ));\r
-  adjust->step_increment = val;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vshift_value_spinbutton ));\r
-  adjust->step_increment = val;\r
-  l_pIncrement->shift[1] = val;\r
-}\r
-\r
-static void on_hscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  gfloat val;\r
-  GtkAdjustment * adjust;\r
-\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("OnIncrementChanged HShift\n");\r
-#endif\r
-\r
-  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_step_spinbutton) ) ;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hscale_offset_spinbutton ));\r
-  adjust->step_increment = val;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hscale_value_spinbutton ));\r
-  adjust->step_increment = val;\r
-  l_pIncrement->scale[0] = val;\r
-}\r
-\r
-static void on_vscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  gfloat val;\r
-  GtkAdjustment * adjust;\r
-\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("OnIncrementChanged HShift\n");\r
-#endif\r
-\r
-  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_step_spinbutton) ) ;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vscale_offset_spinbutton ));\r
-  adjust->step_increment = val;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vscale_value_spinbutton ));\r
-  adjust->step_increment = val;\r
-  l_pIncrement->scale[1] = val;\r
-}\r
-\r
-static void on_rotate_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  gfloat val;\r
-  GtkAdjustment * adjust;\r
-\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  l_pIncrement = Get_SI_Inc();\r
-\r
-#ifdef DBG_SI\r
-  Sys_Printf("OnIncrementChanged HShift\n");\r
-#endif\r
-\r
-  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_step_spinbutton) ) ;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( rotate_offset_spinbutton ));\r
-  adjust->step_increment = val;\r
-  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( rotate_value_spinbutton ));\r
-  adjust->step_increment = val;\r
-  l_pIncrement->rotate = val;\r
-}\r
-\r
-\r
-// Fit Texture\r
-static void on_fit_width_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  m_nWidth = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(fit_width_spinbutton) );\r
-}\r
-\r
-static void on_fit_height_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)\r
-{\r
-  m_nHeight = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(fit_height_spinbutton) );\r
-}\r
-\r
-static void on_fit_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  FaceList_FitTexture(get_texdef_face_list(), m_nHeight, m_nWidth);\r
-  Sys_UpdateWindows(W_ALL);\r
-}\r
-\r
-\r
-// Axial Button\r
-static void on_axial_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  texdef_t* tmp_texdef;\r
-  texdef_t* tmp_orig_texdef;\r
-  texdef_to_face_t* temp_texdef_face_list;\r
-\r
-  if (!texdef_face_list_empty() && g_bListenChanged)\r
-  {\r
-    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)\r
-    {\r
-      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;\r
-      tmp_texdef->shift[0] = 0.0;\r
-      tmp_texdef->shift[1] = 0.0;\r
-      tmp_texdef->scale[0] = 0.5;\r
-      tmp_texdef->scale[1] = 0.5;\r
-      tmp_texdef->rotate = 0.0;\r
-    }\r
-  }\r
-\r
-  SetTexdef_FaceList( get_texdef_face_list(), FALSE, TRUE );\r
-  Sys_UpdateWindows(W_ALL);\r
-}\r
-\r
-\r
-// Action Buttons\r
-static void on_done_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  if ( !texdef_face_list_empty() )\r
-    GetTexMods(TRUE);\r
-  HideDlg();\r
-  Sys_UpdateWindows(W_ALL);\r
-}\r
-\r
-static void on_apply_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  if (!g_bListenChanged)\r
-    return;\r
-\r
-  if ( !texdef_face_list_empty() )\r
-  {\r
-    GetTexMods (TRUE);\r
-    Sys_UpdateWindows(W_CAMERA);\r
-    GetTexdefInfo_from_Radiant();\r
-    SetTexMods();\r
-  }\r
-}\r
-\r
-static void on_cancel_button_clicked (GtkButton *button, gpointer user_data)\r
-{\r
-  texturewin = Texturewin ();\r
-  texturewin->texdef = g_old_texdef;\r
-  // cancel the last do if we own it\r
-  if ( (m_nUndoId == Undo_GetUndoId()) && ( m_nUndoId != 0 ))\r
-  {\r
-#ifdef DBG_SI\r
-    Sys_Printf("OnCancel calling Undo_Undo\n");\r
-#endif\r
-    g_bListenUpdate = false;\r
-    Undo_Undo(TRUE);\r
-    g_bListenUpdate = true;\r
-    m_nUndoId = 0;\r
-  }\r
-  HideDlg();\r
-}\r
-\r
-\r
+/*
+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
+*/
+
+//
+// Surface Dialog Module
+//
+
+//
+// Nurail: Implemented to Module from the main Radiant Surface Dialog code
+//
+
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "surfdlg_plugin.h"
+
+
+
+#ifdef _DEBUG
+//#define DBG_SI 1
+#endif
+
+#include "gtkr_vector.h"
+
+std::vector<texdef_to_face_t> g_texdef_face_vector;
+
+inline texdef_to_face_t* get_texdef_face_list()
+{
+  return &(*g_texdef_face_vector.begin());
+}
+
+inline unsigned int texdef_face_list_empty()
+{
+  return g_texdef_face_vector.empty();
+}
+
+inline unsigned int texdef_face_list_size()
+{
+  return g_texdef_face_vector.size();
+}
+
+// For different faces having different values
+bool is_HShift_conflicting;
+bool is_VShift_conflicting;
+bool is_HScale_conflicting;
+bool is_VScale_conflicting;
+bool is_Rotate_conflicting;
+bool is_TextureName_conflicting;
+
+void ShowDlg();
+void HideDlg();
+void SetTexMods();
+void GetTexMods(bool b_SetUndoPoint = FALSE);
+void BuildDialog();
+void FitAll();
+void InitDefaultIncrement(texdef_t *);
+void DoSnapTToGrid(float hscale, float vscale);
+// called to perform a fitting from the outside (shortcut key)
+void SurfaceDialogFitAll();
+
+// Heretic2 Flags Functions
+void SetFlagButtons_Heretic2(texdef_to_face_t *texdef_face_list,  bool b_isListEmpty);
+void SetChangeInFlags_Face_Heretic2 (texdef_to_face_t *texdef_face_list);
+GtkWidget* Create_Heretic2FlagsDialog (GtkWidget* surfacedialog_widget);
+
+
+// Dialog Data
+int m_nHeight;
+int m_nWidth;
+
+// 0 is invalid, otherwise it's the Id of the last 'do' we are responsible for
+int m_nUndoId;
+
+
+texturewin_t *texturewin;
+texdef_t *l_pIncrement;
+texdef_t texdef_offset;
+texdef_t texdef_SI_values;
+
+// For Texture Entry, activate only on entry change
+char old_texture_entry[128];
+
+// the texdef to switch back to when the OnCancel is called
+texdef_t       g_old_texdef;
+
+// when TRUE, this thing means the surface inspector is currently being displayed
+bool  g_surfwin = FALSE;
+// turn on/off processing of the "changed" "value_changed" messages
+// (need to turn off when we are feeding data in)
+bool g_bListenChanged = true;
+// turn on/off listening of the update messages
+bool g_bListenUpdate = true;
+
+GtkWidget* create_SurfaceInspector (void);
+GtkWidget *SurfaceInspector = NULL;
+
+GtkWidget *m_pWidget;
+GtkWidget *GetWidget () { return SurfaceInspector; }
+GtkWidget *Get_SI_Module_Widget () { return SurfaceInspector; }
+void SetWidget(GtkWidget *new_widget) { m_pWidget = new_widget; }
+GtkWidget *GetDlgWidget (const char* name)
+  { return GTK_WIDGET (g_object_get_data (G_OBJECT (SurfaceInspector), name)); }
+
+// Spins for FitTexture
+GtkWidget *spin_width;
+GtkWidget *spin_height;
+
+
+GtkWidget *texture_combo;
+GtkWidget *texture_combo_entry;
+
+GtkWidget *match_grid_button;
+GtkWidget *lock_valuechange_togglebutton;
+
+GtkObject *hshift_value_spinbutton_adj;
+GtkWidget *hshift_value_spinbutton;
+GtkObject *vshift_value_spinbutton_adj;
+GtkWidget *vshift_value_spinbutton;
+GtkObject *hscale_value_spinbutton_adj;
+GtkWidget *hscale_value_spinbutton;
+GtkObject *vscale_value_spinbutton_adj;
+GtkWidget *vscale_value_spinbutton;
+GtkObject *rotate_value_spinbutton_adj;
+GtkWidget *rotate_value_spinbutton;
+
+GtkObject *hshift_offset_spinbutton_adj;
+GtkWidget *hshift_offset_spinbutton;
+GtkObject *vshift_offset_spinbutton_adj;
+GtkWidget *vshift_offset_spinbutton;
+GtkObject *hscale_offset_spinbutton_adj;
+GtkWidget *hscale_offset_spinbutton;
+GtkObject *vscale_offset_spinbutton_adj;
+GtkWidget *vscale_offset_spinbutton;
+GtkObject *rotate_offset_spinbutton_adj;
+GtkWidget *rotate_offset_spinbutton;
+
+GtkObject *hshift_step_spinbutton_adj;
+GtkWidget *hshift_step_spinbutton;
+GtkObject *vshift_step_spinbutton_adj;
+GtkWidget *vshift_step_spinbutton;
+GtkObject *hscale_step_spinbutton_adj;
+GtkWidget *hscale_step_spinbutton;
+GtkObject *vscale_step_spinbutton_adj;
+GtkWidget *vscale_step_spinbutton;
+GtkObject *rotate_step_spinbutton_adj;
+GtkWidget *rotate_step_spinbutton;
+
+GtkObject *fit_width_spinbutton_adj;
+GtkWidget *fit_width_spinbutton;
+GtkObject *fit_height_spinbutton_adj;
+GtkWidget *fit_height_spinbutton;
+GtkWidget *fit_button;
+GtkWidget *axial_button;
+
+GtkWidget *done_button;
+GtkWidget *apply_button;
+GtkWidget *cancel_button;
+
+// Callbacks
+gboolean on_texture_combo_entry_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data);
+void on_texture_combo_entry_activate (GtkEntry *entry, gpointer user_data);
+
+static void on_match_grid_button_clicked (GtkButton *button, gpointer user_data);
+static void on_lock_valuechange_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data);
+
+static void on_hshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_hscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_rotate_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+
+static void on_hshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_hscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_rotate_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+
+static void on_hshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_hscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_vscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_rotate_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+
+static void on_fit_width_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_fit_height_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data);
+static void on_fit_button_clicked (GtkButton *button, gpointer user_data);
+static void on_axial_button_clicked (GtkButton *button, gpointer user_data);
+
+static void on_done_button_clicked (GtkButton *button, gpointer user_data);
+static void on_apply_button_clicked (GtkButton *button, gpointer user_data);
+static void on_cancel_button_clicked (GtkButton *button, gpointer user_data);
+
+
+/*
+===================================================
+
+  SURFACE INSPECTOR
+
+===================================================
+*/
+
+
+void IsFaceConflicting()
+{
+  texdef_t* tmp_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+  char buf[12];
+  char texture_name[128];
+
+  if (texdef_face_list_empty())
+  {
+    gtk_entry_set_text( GTK_ENTRY (hshift_value_spinbutton), "");
+    gtk_entry_set_text( GTK_ENTRY (vshift_value_spinbutton), "");
+    gtk_entry_set_text( GTK_ENTRY (hscale_value_spinbutton), "");
+    gtk_entry_set_text( GTK_ENTRY (vscale_value_spinbutton), "");
+    gtk_entry_set_text( GTK_ENTRY (rotate_value_spinbutton), "");
+    gtk_entry_set_text( GTK_ENTRY (texture_combo_entry), "");
+    return;
+  }
+
+  g_bListenChanged = FALSE;
+
+  tmp_texdef = &get_texdef_face_list()->texdef;
+
+  strcpy(texture_name, tmp_texdef->GetName() );
+
+  texdef_SI_values.shift[0] = tmp_texdef->shift[0];
+  texdef_SI_values.shift[1] = tmp_texdef->shift[1];
+  texdef_SI_values.scale[0] = tmp_texdef->scale[0];
+  texdef_SI_values.scale[1] = tmp_texdef->scale[1];
+  texdef_SI_values.rotate = tmp_texdef->rotate;
+  texdef_SI_values.SetName( texture_name );
+
+  is_HShift_conflicting = FALSE;
+  is_VShift_conflicting = FALSE;
+  is_HScale_conflicting = FALSE;
+  is_VScale_conflicting = FALSE;
+  is_Rotate_conflicting = FALSE;
+  is_TextureName_conflicting = FALSE;
+
+  if (texdef_face_list_size() > 1)
+  {
+    temp_texdef_face_list = get_texdef_face_list()->next;
+
+    for (; temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = &temp_texdef_face_list->texdef;
+      if ( texdef_SI_values.shift[0] != tmp_texdef->shift[0] )
+        is_HShift_conflicting = TRUE;
+
+      if ( texdef_SI_values.shift[1] != tmp_texdef->shift[1] )
+        is_VShift_conflicting = TRUE;
+
+      if ( texdef_SI_values.scale[0] != tmp_texdef->scale[0] )
+        is_HScale_conflicting = TRUE;
+
+      if ( texdef_SI_values.scale[1] != tmp_texdef->scale[1] )
+        is_VScale_conflicting = TRUE;
+
+      if ( texdef_SI_values.rotate != tmp_texdef->rotate )
+        is_Rotate_conflicting = TRUE;
+
+      if ( strcmp( texture_name, tmp_texdef->GetName() ) )
+        is_TextureName_conflicting = TRUE;
+    }
+  }
+
+  if(is_HShift_conflicting)
+    gtk_entry_set_text( GTK_ENTRY (hshift_value_spinbutton), "");
+  else
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON(hshift_value_spinbutton) , texdef_SI_values.shift[0] );
+
+  if(is_VShift_conflicting)
+    gtk_entry_set_text( GTK_ENTRY (vshift_value_spinbutton), "");
+  else
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON(vshift_value_spinbutton) , texdef_SI_values.shift[1] );
+
+  if(is_HScale_conflicting)
+    gtk_entry_set_text( GTK_ENTRY (hscale_value_spinbutton), "");
+  else
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON(hscale_value_spinbutton) , texdef_SI_values.scale[0] );
+
+  if(is_VScale_conflicting)
+    gtk_entry_set_text( GTK_ENTRY (vscale_value_spinbutton), "");
+  else
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON(vscale_value_spinbutton) , texdef_SI_values.scale[1] );
+
+  if(is_Rotate_conflicting)
+    gtk_entry_set_text( GTK_ENTRY (rotate_value_spinbutton), "");
+  else
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON(rotate_value_spinbutton) , texdef_SI_values.rotate );
+
+  g_bListenChanged = TRUE;
+}
+
+#define MAX_NUM_LIST_ITEMS 15
+static void PopulateTextureComboList()
+{
+  texdef_t* tmp_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+  char blank[1];
+  GList *items = NULL;
+  GList *tmp_item;
+  int num_of_list_items = 0;
+
+  blank[0] = 0;
+
+  if (texdef_face_list_empty())
+  {
+    items = g_list_append (items, (gpointer) blank);
+    // For Texture Entry, activate only on entry change
+    strcpy (old_texture_entry, blank);
+  }
+  else if ( !is_TextureName_conflicting )
+  {
+    temp_texdef_face_list = get_texdef_face_list();
+    tmp_texdef = (texdef_t *) &get_texdef_face_list()->texdef;
+    items = g_list_append( items, (gpointer) tmp_texdef->GetName() );
+    // For Texture Entry, activate only on entry change
+    strcpy (old_texture_entry, tmp_texdef->GetName());
+  }
+  else
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      // Need to do a string compare, hence the custom search
+      if (!( g_list_find_custom (items, tmp_texdef->GetName(), (GCompareFunc) strcmp ) ))
+      {
+        items = g_list_append( items, (gpointer) tmp_texdef->GetName() );
+       num_of_list_items++;
+      }
+      // Make sure the combo list isn't too long
+      if (num_of_list_items >= MAX_NUM_LIST_ITEMS)
+        break;
+    }
+    // If this isn't added last (to the top of the list), g_list_find freaks.
+    items = g_list_prepend (items, (gpointer) blank);
+    // For Texture Entry, activate only on entry change
+    strcpy (old_texture_entry, blank);
+  }
+
+  gtk_combo_set_popdown_strings (GTK_COMBO (texture_combo), items);
+  g_list_free(items);
+
+}
+
+static void ZeroOffsetValues()
+{
+  texdef_offset.shift[0] = 0.0;
+  texdef_offset.shift[1] = 0.0;
+  texdef_offset.scale[0] = 0.0;
+  texdef_offset.scale[1] = 0.0;
+  texdef_offset.rotate = 0.0;
+}
+
+static void GetTexdefInfo_from_Radiant()
+{
+  g_texdef_face_vector.clear();
+
+  unsigned int count = GetSelectedFaceCountfromBrushes();
+  if(count == 0)
+    count = GetSelectedFaceCount();
+
+  g_texdef_face_vector.resize(count);
+
+  if (!texdef_face_list_empty())
+  {
+    texdef_to_face_t* p = get_texdef_face_list();
+    GetSelFacesTexdef( get_texdef_face_list() );
+  }
+
+  IsFaceConflicting();
+  PopulateTextureComboList();
+  ZeroOffsetValues();
+  if ( texdef_face_list_empty() )
+    SetFlagButtons_Heretic2( get_texdef_face_list() , TRUE);
+  else
+    SetFlagButtons_Heretic2( get_texdef_face_list() , FALSE);
+
+}
+
+static gint delete_event_callback(GtkWidget *widget, GdkEvent* event, gpointer data)
+{
+  HideDlg();
+  return TRUE;
+}
+
+// make the shift increments match the grid settings
+// the objective being that the shift+arrows shortcuts move the texture by the corresponding grid size
+// this depends on a scale value if you have selected a particular texture on which you want it to work:
+// we move the textures in pixels, not world units. (i.e. increment values are in pixel)
+// depending on the texture scale it doesn't take the same amount of pixels to move of g_qeglobals.d_gridsize
+// increment * scale = gridsize
+// hscale and vscale are optional parameters, if they are zero they will be set to the default scale
+// NOTE: the default scale depends if you are using BP mode or regular.
+// For regular it's 0.5f (128 pixels cover 64 world units), for BP it's simply 1.0f
+// see fenris #2810
+void DoSnapTToGrid(float hscale, float vscale)
+{
+  l_pIncrement = Get_SI_Inc();
+
+  if (hscale == 0.0f)
+  {
+    hscale = 0.5f;
+  }
+  if (vscale == 0.0f)
+  {
+     vscale = 0.5f;
+  }
+#ifdef _DEBUG
+  Sys_Printf ("DoSnapTToGrid: hscale %g vscale %g\n", hscale, vscale);
+#endif
+  l_pIncrement->shift[0] = GridSize() / hscale;
+  l_pIncrement->shift[1] = GridSize() / vscale;
+  // now some update work
+  // FIXME: doesn't look good here, seems to be called several times
+  SetTexMods();
+}
+
+void UpdateSurfaceDialog()
+{
+  if (!g_bListenUpdate)
+    return;
+
+  if (!SurfaceInspector)
+    return;
+
+  // avoid long delays on slow computers
+  while (gtk_events_pending ())
+    gtk_main_iteration ();
+
+  if (g_surfwin)
+  {
+#ifdef DBG_SI
+    Sys_Printf("UpdateSurfaceDialog\n");
+#endif
+    GetTexdefInfo_from_Radiant();
+    SetTexMods();
+  }
+
+}
+
+// DoSurface will always try to show the surface inspector
+// or update it because something new has been selected
+void DoSurface (void)
+{
+#ifdef DBG_SI
+  Sys_Printf("DoSurface\n");
+#endif
+  if (!SurfaceInspector)
+    create_SurfaceInspector ();
+
+  ShowDlg();
+  SetTexMods ();
+}
+
+void ToggleSurface()
+{
+#ifdef DBG_SI
+  Sys_Printf("ToggleSurface Module\n");
+#endif
+  if (!g_surfwin)
+    DoSurface ();
+  else
+    on_cancel_button_clicked(NULL, NULL);
+}
+
+// NOTE: will raise and show the Surface inspector and exec fit for patches and brushes
+void SurfaceDlgFitAll()
+{
+  DoSurface();
+  FitAll();
+}
+
+// =============================================================================
+// SurfaceDialog class
+
+void ShowDlg()
+{
+
+  if(!SurfaceInspector)
+    create_SurfaceInspector();
+  else
+    gtk_widget_show (SurfaceInspector);
+
+  GetTexdefInfo_from_Radiant();
+  GetTexMods(TRUE); // Set Initial Undo Point
+  g_surfwin = TRUE;
+}
+
+void HideDlg()
+{
+  g_surfwin = FALSE;
+  gtk_widget_hide (SurfaceInspector);
+}
+
+
+// set default values for increments (shift scale and rot)
+// this is called by the prefs code if can't find the values
+void InitDefaultIncrement(texdef_t *tex)
+{
+  tex->SetName("foo");
+  tex->shift[0] = 8;
+  tex->shift[1] = 8;
+  tex->scale[0] = 0.25;
+  tex->scale[1] = 0.25;
+  tex->rotate = 10;
+}
+
+void BuildDialog ()
+{
+   if ( !SurfaceInspector )
+    create_SurfaceInspector();
+}
+
+/*
+==============
+SetTexMods
+
+Set the fields to the current texdef (i.e. map/texdef -> dialog widgets)
+===============
+*/
+
+void SetTexMods()
+{
+  texdef_t *pt;
+  GtkSpinButton *spin;
+  GtkAdjustment *adjust;
+
+  texturewin = Texturewin ();
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("SurfaceDlg SetTexMods\n");
+#endif
+
+  if (!g_surfwin)
+    return;
+
+  pt = &texturewin->texdef;
+
+  g_bListenChanged = false;
+
+  if(strncmp(pt->GetName(), "textures/", 9) != 0)
+    texdef_offset.SetName(SHADER_NOT_FOUND);
+
+
+  spin = GTK_SPIN_BUTTON (hshift_offset_spinbutton);
+  gtk_spin_button_set_value (spin, texdef_offset.shift[0]);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->shift[0];
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON(hshift_step_spinbutton), l_pIncrement->shift[0]);
+
+  spin = GTK_SPIN_BUTTON (hshift_value_spinbutton);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->shift[0];
+
+
+  spin = GTK_SPIN_BUTTON (vshift_offset_spinbutton);
+  gtk_spin_button_set_value (spin, texdef_offset.shift[1]);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->shift[1];
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON(vshift_step_spinbutton), l_pIncrement->shift[1]);
+
+  spin = GTK_SPIN_BUTTON (vshift_value_spinbutton);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->shift[1];
+
+
+  spin = GTK_SPIN_BUTTON (hscale_offset_spinbutton);
+  gtk_spin_button_set_value (spin, texdef_offset.scale[0]);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->scale[0];
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON(hscale_step_spinbutton), l_pIncrement->scale[0]);
+
+  spin = GTK_SPIN_BUTTON (hscale_value_spinbutton);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->scale[0];
+
+
+  spin = GTK_SPIN_BUTTON (vscale_offset_spinbutton);
+  gtk_spin_button_set_value (spin, texdef_offset.scale[1]);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->scale[1];
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON(vscale_step_spinbutton), l_pIncrement->scale[1]);
+
+  spin = GTK_SPIN_BUTTON (vscale_value_spinbutton);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->scale[1];
+
+
+  spin = GTK_SPIN_BUTTON (rotate_offset_spinbutton);
+  gtk_spin_button_set_value (spin, texdef_offset.rotate);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->rotate;
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON(rotate_step_spinbutton), l_pIncrement->rotate);
+
+  spin = GTK_SPIN_BUTTON (rotate_value_spinbutton);
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin));
+  adjust->step_increment = l_pIncrement->rotate;
+
+
+  g_bListenChanged = true;
+
+  // store the current texdef as our escape route if user hits OnCancel
+  g_old_texdef = texturewin->texdef;
+}
+
+/*
+==============
+GetTexMods
+
+Shows any changes to the main Radiant windows
+===============
+*/
+void GetTexMods(bool b_SetUndoPoint)
+{
+
+#ifdef DBG_SI
+  Sys_Printf("SurfaceDlg GetTexMods\n");
+#endif
+
+   if ( !texdef_face_list_empty() )
+  {
+    g_bListenUpdate=FALSE;
+    SetChangeInFlags_Face_Heretic2 ( get_texdef_face_list() );
+    SetTexdef_FaceList( get_texdef_face_list(), b_SetUndoPoint, false );
+    g_bListenUpdate=TRUE;
+
+    if (b_SetUndoPoint)
+      m_nUndoId = Undo_GetUndoId();
+  }
+}
+
+void FitAll()
+{
+  on_fit_button_clicked(NULL, NULL);
+}
+
+
+////////////////////////////////////////////////////////////////////
+//
+//  GUI Section
+//
+////////////////////////////////////////////////////////////////////
+
+GtkWidget* create_SurfaceInspector (void)
+{
+
+  GtkWidget *label;
+  GtkWidget *hseparator;
+  GtkWidget *eventbox;
+
+  GtkWidget *viewport8;
+  GtkWidget *viewport9;
+  GtkWidget *viewport2;
+  GtkWidget *viewport7;
+  GtkWidget *viewport5;
+  GtkWidget *viewport6;
+  GtkWidget *viewport10;
+
+  GtkWidget *table1;
+  GtkWidget *table4;
+  GtkWidget *table5;
+  GtkWidget *table7;
+
+  GtkWidget *alignment1;
+  GtkWidget *alignment2;
+  GtkWidget *alignment3;
+
+  GtkWidget *vbox7;
+
+  GtkWidget *hbox1;
+  GtkWidget *hbox2;
+  GtkWidget *hbox3;
+  GtkWidget *hbox4;
+
+  GtkWidget *image1;
+  GtkWidget *image2;
+  GtkWidget *image3;
+
+  GtkWidget *hbuttonbox1;
+
+  SurfaceInspector = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_container_set_border_width (GTK_CONTAINER (SurfaceInspector), 4);
+  gtk_window_set_title (GTK_WINDOW (SurfaceInspector), "Surface Inspector");
+
+  SetWinPos_from_Prefs(SurfaceInspector);
+
+  viewport8 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport8);
+  gtk_container_add (GTK_CONTAINER (SurfaceInspector), viewport8);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport8), GTK_SHADOW_NONE);
+
+  vbox7 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox7);
+  gtk_container_add (GTK_CONTAINER (viewport8), vbox7);
+
+  viewport9 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport9);
+  gtk_box_pack_start (GTK_BOX (vbox7), viewport9, FALSE, FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport9), 2);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport9), GTK_SHADOW_ETCHED_IN);
+
+  hbox1 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox1);
+  gtk_container_add (GTK_CONTAINER (viewport9), hbox1);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 4);
+
+  label = gtk_label_new ("Texture: ");
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  texture_combo = gtk_combo_new ();
+  g_object_set_data (G_OBJECT (GTK_COMBO (texture_combo)->popwin),
+                     "KeepMeAround", texture_combo);
+  gtk_combo_disable_activate ( (GtkCombo*) texture_combo);
+  gtk_widget_show (texture_combo);
+  gtk_box_pack_start (GTK_BOX (hbox1), texture_combo, TRUE, TRUE, 0);
+
+  texture_combo_entry = GTK_COMBO (texture_combo)->entry;
+  gtk_widget_show (texture_combo_entry);
+  gtk_entry_set_max_length (GTK_ENTRY (texture_combo_entry), 128);
+
+  viewport2 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport2);
+  gtk_box_pack_start (GTK_BOX (vbox7), viewport2, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport2), 2);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport2), GTK_SHADOW_ETCHED_IN);
+
+  table1 = gtk_table_new (13, 4, FALSE);
+  gtk_widget_show (table1);
+  gtk_container_add (GTK_CONTAINER (viewport2), table1);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 9, 10,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 9, 10,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 9, 10,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 1, 2, 11, 12,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 2, 3, 11, 12,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 3, 4, 11, 12,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new ("Offset");
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table1), label, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label = gtk_label_new ("Step");
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table1), label, 3, 4, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 3, 4, 12, 13,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  match_grid_button = gtk_button_new_with_mnemonic ("Match Grid");
+  gtk_widget_show (match_grid_button);
+  gtk_container_add (GTK_CONTAINER (eventbox), match_grid_button);
+
+  label = gtk_label_new ("Value");
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table1), label, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 9, 10,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 11, 12,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 4, 5,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new ("V Shift: ");
+  gtk_widget_show (label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 6, 7,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new (" H Scale: ");
+  gtk_widget_show (label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 8, 9,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new ("V Scale: ");
+  gtk_widget_show (label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 10, 11,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new ("Rotate: ");
+  gtk_widget_show (label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label = gtk_label_new ("H Shift: ");
+  gtk_widget_show (label);
+  gtk_container_add (GTK_CONTAINER (eventbox), label);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+
+  hseparator = gtk_hseparator_new ();
+  gtk_widget_show (hseparator);
+  gtk_table_attach (GTK_TABLE (table1), hseparator, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 1, 2, 12, 13,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  lock_valuechange_togglebutton = gtk_toggle_button_new_with_mnemonic ("UNLOCK");
+  gtk_widget_show (lock_valuechange_togglebutton);
+  gtk_container_add (GTK_CONTAINER (eventbox), lock_valuechange_togglebutton);
+
+  // Value Spins
+  hshift_value_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  hshift_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_value_spinbutton_adj), 1, 2);
+  gtk_widget_show (hshift_value_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hshift_value_spinbutton, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_value_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hshift_value_spinbutton), TRUE);
+  gtk_widget_set_sensitive( GTK_WIDGET( hshift_value_spinbutton ), FALSE );
+
+  vshift_value_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  vshift_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_value_spinbutton_adj), 1, 2);
+  gtk_widget_show (vshift_value_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vshift_value_spinbutton, 1, 2, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_value_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vshift_value_spinbutton), TRUE);
+  gtk_widget_set_sensitive( GTK_WIDGET( vshift_value_spinbutton ), FALSE );
+
+  hscale_value_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  hscale_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_value_spinbutton_adj), 1, 4);
+  gtk_widget_show (hscale_value_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hscale_value_spinbutton, 1, 2, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_value_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hscale_value_spinbutton), TRUE);
+  gtk_widget_set_sensitive( GTK_WIDGET( hscale_value_spinbutton ), FALSE );
+
+  vscale_value_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  vscale_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_value_spinbutton_adj), 1, 4);
+  gtk_widget_show (vscale_value_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vscale_value_spinbutton, 1, 2, 8, 9,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_value_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vscale_value_spinbutton), TRUE);
+  gtk_widget_set_sensitive( GTK_WIDGET( vscale_value_spinbutton ), FALSE );
+
+  rotate_value_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);
+  rotate_value_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_value_spinbutton_adj), 1, 0);
+  gtk_widget_show (rotate_value_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), rotate_value_spinbutton, 1, 2, 10, 11,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_value_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rotate_value_spinbutton), TRUE);
+  gtk_widget_set_sensitive( GTK_WIDGET( rotate_value_spinbutton ), FALSE );
+
+  // Offset Spins
+  hshift_offset_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  hshift_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_offset_spinbutton_adj), 0, 2);
+  gtk_widget_show (hshift_offset_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hshift_offset_spinbutton, 2, 3, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 4, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (hshift_offset_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_offset_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hshift_offset_spinbutton), TRUE);
+
+  vshift_offset_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  vshift_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_offset_spinbutton_adj), 0, 2);
+  gtk_widget_show (vshift_offset_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vshift_offset_spinbutton, 2, 3, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 4, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (vshift_offset_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_offset_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vshift_offset_spinbutton), TRUE);
+
+  hscale_offset_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  hscale_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_offset_spinbutton_adj), 0, 4);
+  gtk_widget_show (hscale_offset_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hscale_offset_spinbutton, 2, 3, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 4, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (hscale_offset_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_offset_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (hscale_offset_spinbutton), TRUE);
+
+  vscale_offset_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  vscale_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_offset_spinbutton_adj), 0, 4);
+  gtk_widget_show (vscale_offset_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vscale_offset_spinbutton, 2, 3, 8, 9,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 4, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (vscale_offset_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_offset_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (vscale_offset_spinbutton), TRUE);
+
+  rotate_offset_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);
+  rotate_offset_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_offset_spinbutton_adj), 0, 2);
+  gtk_widget_show (rotate_offset_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), rotate_offset_spinbutton, 2, 3, 10, 11,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 4, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (rotate_offset_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_offset_spinbutton), GTK_UPDATE_IF_VALID);
+  gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rotate_offset_spinbutton), TRUE);
+
+    // Step Spins
+  hshift_step_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  hshift_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hshift_step_spinbutton_adj), 1, 2);
+  gtk_widget_show (hshift_step_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hshift_step_spinbutton, 3, 4, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hshift_step_spinbutton), GTK_UPDATE_IF_VALID);
+
+  vshift_step_spinbutton_adj = gtk_adjustment_new (0.0, -8192.0, 8192.0, 2.0, 8.0, 8.0);
+  vshift_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vshift_step_spinbutton_adj), 1, 2);
+  gtk_widget_show (vshift_step_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vshift_step_spinbutton, 3, 4, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vshift_step_spinbutton), GTK_UPDATE_IF_VALID);
+
+  hscale_step_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  hscale_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (hscale_step_spinbutton_adj), 1, 4);
+  gtk_widget_show (hscale_step_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), hscale_step_spinbutton, 3, 4, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (hscale_step_spinbutton), GTK_UPDATE_IF_VALID);
+
+  vscale_step_spinbutton_adj = gtk_adjustment_new (0.0, -1024.0, 1024.0, 1.0, 4.0, 4.0);
+  vscale_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (vscale_step_spinbutton_adj), 1, 4);
+  gtk_widget_show (vscale_step_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), vscale_step_spinbutton, 3, 4, 8, 9,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (vscale_step_spinbutton), GTK_UPDATE_IF_VALID);
+
+  rotate_step_spinbutton_adj = gtk_adjustment_new (0.0, -360.0, 360.0, 1.0, 10.0, 10.0);
+  rotate_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rotate_step_spinbutton_adj), 1, 2);
+  gtk_widget_show (rotate_step_spinbutton);
+  gtk_table_attach (GTK_TABLE (table1), rotate_step_spinbutton, 3, 4, 10, 11,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (rotate_step_spinbutton), GTK_UPDATE_IF_VALID);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 2, 3, 12, 13,
+                    (GtkAttachOptions) (0),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 12, 13,
+                    (GtkAttachOptions) (0),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table1), eventbox, 0, 1, 0, 1,
+                    (GtkAttachOptions) (0),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  viewport7 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport7);
+  gtk_box_pack_start (GTK_BOX (vbox7), viewport7, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport7), 2);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport7), GTK_SHADOW_ETCHED_IN);
+
+  table4 = gtk_table_new (4, 7, FALSE);
+  gtk_widget_show (table4);
+  gtk_container_add (GTK_CONTAINER (viewport7), table4);
+
+  viewport5 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport5);
+  gtk_table_attach (GTK_TABLE (table4), viewport5, 1, 7, 0, 4,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport5), 6);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport5), GTK_SHADOW_ETCHED_OUT);
+
+  table5 = gtk_table_new (2, 3, FALSE);
+  gtk_widget_show (table5);
+  gtk_container_add (GTK_CONTAINER (viewport5), table5);
+  gtk_container_set_border_width (GTK_CONTAINER (table5), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (table5), 2);
+
+  label = gtk_label_new ("Height");
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table5), label, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);
+
+  label = gtk_label_new ("Width");
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table5), label, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.5, 1);
+
+  fit_width_spinbutton_adj = gtk_adjustment_new (1, 1, 32, 1, 10, 10);
+  fit_width_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fit_width_spinbutton_adj), 1, 0);
+  gtk_widget_show (fit_width_spinbutton);
+  gtk_table_attach (GTK_TABLE (table5), fit_width_spinbutton, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fit_width_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fit_width_spinbutton), GTK_UPDATE_IF_VALID);
+
+  fit_height_spinbutton_adj = gtk_adjustment_new (1, 1, 32, 1, 10, 10);
+  fit_height_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fit_height_spinbutton_adj), 1, 0);
+  gtk_widget_show (fit_height_spinbutton);
+  gtk_table_attach (GTK_TABLE (table5), fit_height_spinbutton, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 3, 0);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fit_height_spinbutton), TRUE);
+  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fit_height_spinbutton), GTK_UPDATE_IF_VALID);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table5), eventbox, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table5), eventbox, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 4, 0);
+
+  fit_button = gtk_button_new_with_mnemonic ("    Fit    ");
+  gtk_widget_show (fit_button);
+  gtk_container_add (GTK_CONTAINER (eventbox), fit_button);
+
+  viewport6 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport6);
+  gtk_table_attach (GTK_TABLE (table4), viewport6, 0, 1, 0, 4,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport6), 4);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport6), GTK_SHADOW_NONE);
+
+  table7 = gtk_table_new (2, 1, FALSE);
+  gtk_widget_show (table7);
+  gtk_container_add (GTK_CONTAINER (viewport6), table7);
+
+  eventbox = gtk_event_box_new ();
+  gtk_widget_show (eventbox);
+  gtk_table_attach (GTK_TABLE (table7), eventbox, 0, 1, 0, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+
+  axial_button = gtk_button_new_with_mnemonic ("Axial");
+  gtk_widget_show (axial_button);
+  gtk_container_add (GTK_CONTAINER (eventbox), axial_button);
+  gtk_widget_set_size_request (axial_button, 56, 29);
+  gtk_container_set_border_width (GTK_CONTAINER (axial_button), 4);
+
+  // Fit in Flags sub-dialog
+  Create_Heretic2FlagsDialog(vbox7);
+
+  viewport10 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport10);
+  gtk_box_pack_start (GTK_BOX (vbox7), viewport10, FALSE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (viewport10), 2);
+  gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport10), GTK_SHADOW_ETCHED_IN);
+
+  hbuttonbox1 = gtk_hbutton_box_new ();
+  gtk_widget_show (hbuttonbox1);
+  gtk_container_add (GTK_CONTAINER (viewport10), hbuttonbox1);
+  gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox1), 4);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_SPREAD);
+
+  done_button = gtk_button_new ();
+  gtk_widget_show (done_button);
+  gtk_container_add (GTK_CONTAINER (hbuttonbox1), done_button);
+  GTK_WIDGET_SET_FLAGS (done_button, GTK_CAN_DEFAULT);
+
+  alignment1 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment1);
+  gtk_container_add (GTK_CONTAINER (done_button), alignment1);
+
+  hbox2 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox2);
+  gtk_container_add (GTK_CONTAINER (alignment1), hbox2);
+
+  image1 = gtk_image_new_from_stock ("gtk-yes", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image1);
+  gtk_box_pack_start (GTK_BOX (hbox2), image1, FALSE, FALSE, 0);
+
+  label = gtk_label_new_with_mnemonic ("Done");
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+  apply_button = gtk_button_new ();
+  gtk_widget_show (apply_button);
+  gtk_container_add (GTK_CONTAINER (hbuttonbox1), apply_button);
+  GTK_WIDGET_SET_FLAGS (apply_button, GTK_CAN_DEFAULT);
+
+  alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment3);
+  gtk_container_add (GTK_CONTAINER (apply_button), alignment3);
+
+  hbox4 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox4);
+  gtk_container_add (GTK_CONTAINER (alignment3), hbox4);
+
+  image3 = gtk_image_new_from_stock ("gtk-apply", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image3);
+  gtk_box_pack_start (GTK_BOX (hbox4), image3, FALSE, FALSE, 0);
+
+  label = gtk_label_new_with_mnemonic ("Apply");
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (hbox4), label, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+  cancel_button = gtk_button_new ();
+  gtk_widget_show (cancel_button);
+  gtk_container_add (GTK_CONTAINER (hbuttonbox1), cancel_button);
+  GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
+
+  alignment2 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment2);
+  gtk_container_add (GTK_CONTAINER (cancel_button), alignment2);
+
+  hbox3 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox3);
+  gtk_container_add (GTK_CONTAINER (alignment2), hbox3);
+
+  image2 = gtk_image_new_from_stock ("gtk-no", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image2);
+  gtk_box_pack_start (GTK_BOX (hbox3), image2, FALSE, FALSE, 0);
+
+  label = gtk_label_new_with_mnemonic ("Cancel");
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (hbox3), label, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+
+  g_signal_connect ( (gpointer) SurfaceInspector,
+                      "delete_event",
+                      G_CALLBACK (delete_event_callback),
+                     NULL );
+  g_signal_connect ((gpointer) SurfaceInspector, "destroy",
+                    G_CALLBACK (gtk_widget_destroy),
+                    NULL);
+
+  g_signal_connect ((gpointer) texture_combo_entry, "key_press_event",
+                    G_CALLBACK (on_texture_combo_entry_key_press_event),
+                    NULL);
+  g_signal_connect ((gpointer) texture_combo_entry, "activate",
+                    G_CALLBACK (on_texture_combo_entry_activate),
+                    NULL);
+
+
+  g_signal_connect ((gpointer) hshift_offset_spinbutton, "value_changed",
+                    G_CALLBACK (on_hshift_offset_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vshift_offset_spinbutton, "value_changed",
+                    G_CALLBACK (on_vshift_offset_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) hscale_offset_spinbutton, "value_changed",
+                    G_CALLBACK (on_hscale_offset_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vscale_offset_spinbutton, "value_changed",
+                    G_CALLBACK (on_vscale_offset_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) rotate_offset_spinbutton, "value_changed",
+                    G_CALLBACK (on_rotate_offset_spinbutton_value_changed),
+                    NULL);
+
+  g_signal_connect ((gpointer) hshift_value_spinbutton, "value_changed",
+                    G_CALLBACK (on_hshift_value_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vshift_value_spinbutton, "value_changed",
+                    G_CALLBACK (on_vshift_value_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) hscale_value_spinbutton, "value_changed",
+                    G_CALLBACK (on_hscale_value_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vscale_value_spinbutton, "value_changed",
+                    G_CALLBACK (on_vscale_value_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) rotate_value_spinbutton, "value_changed",
+                    G_CALLBACK (on_rotate_value_spinbutton_value_changed),
+                    NULL);
+
+  g_signal_connect ((gpointer) hshift_step_spinbutton, "value_changed",
+                    G_CALLBACK (on_hshift_step_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vshift_step_spinbutton, "value_changed",
+                    G_CALLBACK (on_vshift_step_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) hscale_step_spinbutton, "value_changed",
+                    G_CALLBACK (on_hscale_step_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) vscale_step_spinbutton, "value_changed",
+                    G_CALLBACK (on_vscale_step_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) rotate_step_spinbutton, "value_changed",
+                    G_CALLBACK (on_rotate_step_spinbutton_value_changed),
+                    NULL);
+
+  g_signal_connect ((gpointer) match_grid_button, "clicked",
+                    G_CALLBACK (on_match_grid_button_clicked),
+                    NULL);
+  g_signal_connect ((gpointer) lock_valuechange_togglebutton, "toggled",
+                    G_CALLBACK (on_lock_valuechange_togglebutton_toggled),
+                    NULL);
+
+  g_signal_connect ((gpointer) fit_width_spinbutton, "value_changed",
+                    G_CALLBACK (on_fit_width_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) fit_height_spinbutton, "value_changed",
+                    G_CALLBACK (on_fit_height_spinbutton_value_changed),
+                    NULL);
+  g_signal_connect ((gpointer) fit_button, "clicked",
+                    G_CALLBACK (on_fit_button_clicked),
+                    NULL);
+
+  g_signal_connect ((gpointer) axial_button, "clicked",
+                    G_CALLBACK (on_axial_button_clicked),
+                    NULL);
+
+  g_signal_connect ((gpointer) done_button, "clicked",
+                    G_CALLBACK (on_done_button_clicked),
+                    NULL);
+  g_signal_connect ((gpointer) apply_button, "clicked",
+                    G_CALLBACK (on_apply_button_clicked),
+                    NULL);
+  g_signal_connect ((gpointer) cancel_button, "clicked",
+                    G_CALLBACK (on_cancel_button_clicked),
+                    NULL);
+
+
+  return SurfaceInspector;
+}
+
+
+// Texture Combo
+gboolean on_texture_combo_entry_key_press_event (GtkWidget *widget, GdkEventKey *event,
+                                                 gpointer user_data)
+{
+  // Have Tab activate selection as well as Return
+  if (event->keyval == GDK_Tab)
+    g_signal_emit_by_name ( texture_combo_entry, "activate" );
+
+  return FALSE;
+}
+
+void on_texture_combo_entry_activate (GtkEntry *entry, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+  char text[128] = { 0 };
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    // activate only on entry change
+    strcpy( text, gtk_entry_get_text(entry));
+    if ( strcmp( old_texture_entry, text ))
+    {
+      // Check for spaces in shader name
+      if (text[0] <= ' ' || strchr(text, ' '))
+        Sys_FPrintf(SYS_WRN, "WARNING: spaces in shader names are not allowed, ignoring '%s'\n", text);
+      else
+      {
+        for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+        {
+          tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+          tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+          strcpy( old_texture_entry, text );
+          tmp_texdef->SetName( text );
+        }
+        GetTexMods();
+      }
+    }
+  }
+}
+
+// Offset Spins
+static void on_hshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_offset.shift[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_offset_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      if (is_HShift_conflicting)
+        tmp_texdef->shift[0] = tmp_orig_texdef->shift[0] + texdef_offset.shift[0];
+      else
+        tmp_texdef->shift[0] = texdef_SI_values.shift[0] + texdef_offset.shift[0];
+    }
+    GetTexMods();
+  }
+}
+
+static void on_vshift_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_offset.shift[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_offset_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      if (is_VShift_conflicting)
+        tmp_texdef->shift[1] = tmp_orig_texdef->shift[1] + texdef_offset.shift[1];
+      else
+        tmp_texdef->shift[1] = texdef_SI_values.shift[1] + texdef_offset.shift[1];
+    }
+    GetTexMods();
+  }
+
+}
+
+static void on_hscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_offset.scale[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_offset_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      if (is_HScale_conflicting)
+        tmp_texdef->scale[0] = tmp_orig_texdef->scale[0] + texdef_offset.scale[0];
+      else
+        tmp_texdef->scale[0] = texdef_SI_values.scale[0] + texdef_offset.scale[0];
+    }
+    GetTexMods();
+  }
+
+
+}
+
+static void on_vscale_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_offset.scale[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_offset_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      if (is_VScale_conflicting)
+        tmp_texdef->scale[1] = tmp_orig_texdef->scale[1] + texdef_offset.scale[1];
+      else
+        tmp_texdef->scale[1] = texdef_SI_values.scale[1] + texdef_offset.scale[1];
+    }
+    GetTexMods();
+  }
+
+}
+
+static void on_rotate_offset_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_offset.rotate = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_offset_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      if (is_Rotate_conflicting)
+        tmp_texdef->rotate = tmp_orig_texdef->rotate + texdef_offset.rotate;
+      else
+        tmp_texdef->rotate = texdef_SI_values.rotate + texdef_offset.rotate;
+    }
+    GetTexMods();
+  }
+
+}
+
+
+// Match Grid
+static void on_match_grid_button_clicked (GtkButton *button, gpointer user_data)
+{
+  float hscale, vscale;
+
+  if( !strcmp(gtk_entry_get_text (GTK_ENTRY (hscale_value_spinbutton)), "") )
+    hscale = 0.0;
+  else
+    hscale = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_value_spinbutton) );
+
+  if( !strcmp( gtk_entry_get_text (GTK_ENTRY (vscale_value_spinbutton)), "") )
+    vscale = 0.0;
+  else
+    vscale = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_value_spinbutton) );
+  DoSnapTToGrid (hscale, vscale);
+}
+
+
+// Lock out changes to Value
+static void on_lock_valuechange_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data)
+{
+  bool is_Locked;
+
+  is_Locked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lock_valuechange_togglebutton));
+
+  gtk_widget_set_sensitive( GTK_WIDGET( hscale_value_spinbutton ), is_Locked );
+  gtk_widget_set_sensitive( GTK_WIDGET( vscale_value_spinbutton ), is_Locked );
+  gtk_widget_set_sensitive( GTK_WIDGET( hshift_value_spinbutton ), is_Locked );
+  gtk_widget_set_sensitive( GTK_WIDGET( vshift_value_spinbutton ), is_Locked );
+  gtk_widget_set_sensitive( GTK_WIDGET( rotate_value_spinbutton ), is_Locked );
+}
+
+
+// Value Spins
+static void on_hshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_SI_values.shift[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_value_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      tmp_texdef->shift[0] = texdef_SI_values.shift[0] + texdef_offset.shift[0];
+      is_HShift_conflicting = FALSE;
+    }
+    GetTexMods();
+  }
+}
+
+static void on_vshift_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_SI_values.shift[1]  = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_value_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      tmp_texdef->shift[1] = texdef_SI_values.shift[1] + texdef_offset.shift[1];
+      is_VShift_conflicting = FALSE;
+    }
+    GetTexMods();
+  }
+}
+
+static void on_hscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_SI_values.scale[0] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_value_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      tmp_texdef->scale[0] = texdef_SI_values.scale[0] + texdef_offset.scale[0];
+      is_HScale_conflicting = FALSE;
+    }
+    GetTexMods();
+  }
+}
+
+static void on_vscale_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_SI_values.scale[1] = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_value_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      tmp_texdef->scale[1] = texdef_SI_values.scale[1] + texdef_offset.scale[1];
+      is_VScale_conflicting = FALSE;
+    }
+    GetTexMods();
+  }
+}
+
+static void on_rotate_value_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  texdef_SI_values.rotate = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_value_spinbutton) );
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_orig_texdef = (texdef_t *) &temp_texdef_face_list->orig_texdef;
+      tmp_texdef->rotate = texdef_SI_values.rotate + texdef_offset.rotate;
+      is_Rotate_conflicting = FALSE;
+    }
+    GetTexMods();
+  }
+}
+
+
+// Step Spins
+static void on_hshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  gfloat val;
+  GtkAdjustment * adjust;
+
+  if (!g_bListenChanged)
+    return;
+
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("OnIncrementChanged HShift\n");
+#endif
+
+  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hshift_step_spinbutton) ) ;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hshift_offset_spinbutton ));
+  adjust->step_increment = val;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hshift_value_spinbutton ));
+  adjust->step_increment = val;
+  l_pIncrement->shift[0] = val;
+}
+
+static void on_vshift_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  gfloat val;
+  GtkAdjustment * adjust;
+
+  if (!g_bListenChanged)
+    return;
+
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("OnIncrementChanged VShift\n");
+#endif
+
+  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vshift_step_spinbutton) ) ;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vshift_offset_spinbutton ));
+  adjust->step_increment = val;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vshift_value_spinbutton ));
+  adjust->step_increment = val;
+  l_pIncrement->shift[1] = val;
+}
+
+static void on_hscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  gfloat val;
+  GtkAdjustment * adjust;
+
+  if (!g_bListenChanged)
+    return;
+
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("OnIncrementChanged HShift\n");
+#endif
+
+  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(hscale_step_spinbutton) ) ;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hscale_offset_spinbutton ));
+  adjust->step_increment = val;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( hscale_value_spinbutton ));
+  adjust->step_increment = val;
+  l_pIncrement->scale[0] = val;
+}
+
+static void on_vscale_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  gfloat val;
+  GtkAdjustment * adjust;
+
+  if (!g_bListenChanged)
+    return;
+
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("OnIncrementChanged HShift\n");
+#endif
+
+  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(vscale_step_spinbutton) ) ;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vscale_offset_spinbutton ));
+  adjust->step_increment = val;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( vscale_value_spinbutton ));
+  adjust->step_increment = val;
+  l_pIncrement->scale[1] = val;
+}
+
+static void on_rotate_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  gfloat val;
+  GtkAdjustment * adjust;
+
+  if (!g_bListenChanged)
+    return;
+
+  l_pIncrement = Get_SI_Inc();
+
+#ifdef DBG_SI
+  Sys_Printf("OnIncrementChanged HShift\n");
+#endif
+
+  val = gtk_spin_button_get_value ( GTK_SPIN_BUTTON(rotate_step_spinbutton) ) ;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( rotate_offset_spinbutton ));
+  adjust->step_increment = val;
+  adjust = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON ( rotate_value_spinbutton ));
+  adjust->step_increment = val;
+  l_pIncrement->rotate = val;
+}
+
+
+// Fit Texture
+static void on_fit_width_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  m_nWidth = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(fit_width_spinbutton) );
+}
+
+static void on_fit_height_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data)
+{
+  m_nHeight = gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(fit_height_spinbutton) );
+}
+
+static void on_fit_button_clicked (GtkButton *button, gpointer user_data)
+{
+  FaceList_FitTexture(get_texdef_face_list(), m_nHeight, m_nWidth);
+  Sys_UpdateWindows(W_ALL);
+}
+
+
+// Axial Button
+static void on_axial_button_clicked (GtkButton *button, gpointer user_data)
+{
+  texdef_t* tmp_texdef;
+  texdef_t* tmp_orig_texdef;
+  texdef_to_face_t* temp_texdef_face_list;
+
+  if (!texdef_face_list_empty() && g_bListenChanged)
+  {
+    for (temp_texdef_face_list = get_texdef_face_list(); temp_texdef_face_list; temp_texdef_face_list = temp_texdef_face_list->next)
+    {
+      tmp_texdef = (texdef_t *) &temp_texdef_face_list->texdef;
+      tmp_texdef->shift[0] = 0.0;
+      tmp_texdef->shift[1] = 0.0;
+      tmp_texdef->scale[0] = 0.5;
+      tmp_texdef->scale[1] = 0.5;
+      tmp_texdef->rotate = 0.0;
+    }
+  }
+
+  SetTexdef_FaceList( get_texdef_face_list(), FALSE, TRUE );
+  Sys_UpdateWindows(W_ALL);
+}
+
+
+// Action Buttons
+static void on_done_button_clicked (GtkButton *button, gpointer user_data)
+{
+  if ( !texdef_face_list_empty() )
+    GetTexMods(TRUE);
+  HideDlg();
+  Sys_UpdateWindows(W_ALL);
+}
+
+static void on_apply_button_clicked (GtkButton *button, gpointer user_data)
+{
+  if (!g_bListenChanged)
+    return;
+
+  if ( !texdef_face_list_empty() )
+  {
+    GetTexMods (TRUE);
+    Sys_UpdateWindows(W_CAMERA);
+    GetTexdefInfo_from_Radiant();
+    SetTexMods();
+  }
+}
+
+static void on_cancel_button_clicked (GtkButton *button, gpointer user_data)
+{
+  texturewin = Texturewin ();
+  texturewin->texdef = g_old_texdef;
+  // cancel the last do if we own it
+  if ( (m_nUndoId == Undo_GetUndoId()) && ( m_nUndoId != 0 ))
+  {
+#ifdef DBG_SI
+    Sys_Printf("OnCancel calling Undo_Undo\n");
+#endif
+    g_bListenUpdate = false;
+    Undo_Undo(TRUE);
+    g_bListenUpdate = true;
+    m_nUndoId = 0;
+  }
+  HideDlg();
+}
+
+