]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge commit 'f8b2b1f25e7e195c0c11e3d2e2ddf308562de77f' into garux-merge
authorThomas Debesse <dev@illwieckz.net>
Mon, 11 Feb 2019 14:44:28 +0000 (15:44 +0100)
committerThomas Debesse <dev@illwieckz.net>
Mon, 11 Feb 2019 14:44:28 +0000 (15:44 +0100)
1  2 
radiant/main.cpp
radiant/patchmanip.cpp
tools/quake3/q3map2/q3map2.h

index f19bec378977c67d158f5012731ea6d23b08ee57,f19eb4db68f5301d0779caa600622f3001bbb40b..e338baeb0358cc6c8975d96c0fac6eb6a10400e2
@@@ -550,35 -559,11 +550,36 @@@ int main( int argc, char* argv[] )
                }
                FreeLibrary( lib );
        }
+       _setmaxstdio(2048);
  #endif
  
 -      gtk_disable_setlocale();
 -      gtk_init( &argc, &argv );
 +      const char* mapname = NULL;
 +    char const *error = NULL;
 +      if ( !ui::init( &argc, &argv, "<filename.map>", &error) ) {
 +              g_print( "%s\n", error );
 +              return -1;
 +      }
 +
 +      // Gtk already removed parsed `--options`
 +      if (argc == 2) {
 +              if ( strlen( argv[1] ) > 1 ) {
 +                      if ( g_str_has_suffix( argv[1], ".map" ) ) {
 +                              if ( g_path_is_absolute( argv[1] ) ) {
 +                                      mapname = argv[1];
 +                              }
 +                              else {
 +                                      mapname = g_build_filename( g_get_current_dir(), argv[1], NULL );
 +                              }
 +                      }
 +                      else {
 +                              g_print( "bad file name, will not load: %s\n", argv[1] );
 +                      }
 +              }
 +      }
 +      else if (argc > 2) {
 +              g_print ( "%s\n", "too many arguments" );
 +              return -1;
 +      }
  
        // redirect Gtk warnings to the console
        g_log_set_handler( "Gdk", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING |
index 7ae19fb4af6d6b65a8fc133f8ac398014b2bee87,9ea7c5d81cf015b14e99761bcf3c6139a68fafcd..15faff88c81b31ffeb5b5a86c9d2d497e2fa0a37
@@@ -145,8 -112,20 +145,9 @@@ void Patch_makeCaps( Patch& patch, scen
        }
  }
  
  typedef std::vector<scene::Instance*> InstanceVector;
  
 -class PatchStoreInstance
 -{
 -InstanceVector& m_instances;
 -public:
 -PatchStoreInstance( InstanceVector& instances ) : m_instances( instances ){
 -}
 -void operator()( PatchInstance& patch ) const {
 -      m_instances.push_back( &patch );
 -}
 -};
 -
  enum ECapDialog {
        PATCHCAP_BEVEL = 0,
        PATCHCAP_ENDCAP,
@@@ -195,6 -172,30 +196,32 @@@ void Scene_PatchDoCap_Selected( scene::
        }
  }
  
 -      Scene_forEachVisibleSelectedPatchInstance( PatchStoreInstance( instances ) );
+ void Patch_deform( Patch& patch, scene::Instance& instance, const int deform ){
+       patch.undoSave();
+       for (PatchControlIter i = patch.begin(); i != patch.end(); ++i)
+       {
+               PatchControl& control = *i;
+               int randomNumber = int( deform * (float(std::rand()) / float(RAND_MAX)));
+               control.m_vertex[2] += randomNumber;
+       }
+       patch.controlPointsChanged();
+ }
+ void Scene_PatchDeform( scene::Graph& graph, const int deform )
+ {
+       InstanceVector instances;
++      Scene_forEachVisibleSelectedPatchInstance([&](PatchInstance &patch) {
++                      instances.push_back(&patch);
++      });
+       for ( InstanceVector::const_iterator i = instances.begin(); i != instances.end(); ++i )
+       {
+               Patch_deform( *Node_getPatch( ( *i )->path().top() ), *( *i ), deform );
+       }
+ }
  Patch* Scene_GetUltimateSelectedVisiblePatch(){
        if ( GlobalSelectionSystem().countSelected() != 0 ) {
                scene::Node& node = GlobalSelectionSystem().ultimateSelected().path().top();
@@@ -523,26 -610,17 +550,34 @@@ void Patch_NaturalTexture()
        Scene_PatchNaturalTexture_Selected( GlobalSceneGraph() );
  }
  
 -
 -
 -
 +void Patch_CapTexture(){
 +      UndoableCommand command( "patchCapTexture" );
 +
 +      Scene_PatchCapTexture_Selected( GlobalSceneGraph() );
 +}
 +
 +void Patch_ResetTexture(){
 +      float fx, fy;
 +      if ( DoTextureLayout( &fx, &fy ) == eIDOK ) {
 +              UndoableCommand command( "patchTileTexture" );
 +              Scene_PatchTileTexture_Selected( GlobalSceneGraph(), fx, fy );
 +      }
 +}
 +
 +void Patch_FitTexture(){
 +      UndoableCommand command( "patchFitTexture" );
 +
 +      Scene_PatchTileTexture_Selected( GlobalSceneGraph(), 1, 1 );
 +}
 +
+ void DoPatchDeformDlg();
+ void Patch_Deform(){
+       UndoableCommand undo( "patchDeform" );
+       DoPatchDeformDlg();
+ }
  #include "ifilter.h"
  
  
@@@ -614,55 -692,56 +649,56 @@@ void PatchPreferences_construct()
  #include "generic/callback.h"
  
  void Patch_registerCommands(){
 -      GlobalCommands_insert( "InvertCurveTextureX", FreeCaller<Patch_FlipTextureX>(), Accelerator( 'I', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "InvertCurveTextureY", FreeCaller<Patch_FlipTextureY>(), Accelerator( 'I', (GdkModifierType)GDK_SHIFT_MASK ) );
 -      GlobalCommands_insert( "IncPatchColumn", FreeCaller<Patch_InsertInsertColumn>(), Accelerator( GDK_KP_Add, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "IncPatchRow", FreeCaller<Patch_InsertInsertRow>(), Accelerator( GDK_KP_Add, (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "DecPatchColumn", FreeCaller<Patch_DeleteLastColumn>(), Accelerator( GDK_KP_Subtract, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "DecPatchRow", FreeCaller<Patch_DeleteLastRow>(), Accelerator( GDK_KP_Subtract, (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "NaturalizePatch", FreeCaller<Patch_NaturalTexture>(), Accelerator( 'N', (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "PatchCylinder", FreeCaller<Patch_Cylinder>() );
 -      GlobalCommands_insert( "PatchDenseCylinder", FreeCaller<Patch_DenseCylinder>() );
 -      GlobalCommands_insert( "PatchVeryDenseCylinder", FreeCaller<Patch_VeryDenseCylinder>() );
 -      GlobalCommands_insert( "PatchSquareCylinder", FreeCaller<Patch_SquareCylinder>() );
 -      GlobalCommands_insert( "PatchXactCylinder", FreeCaller<Patch_XactCylinder>() );
 -      GlobalCommands_insert( "PatchXactSphere", FreeCaller<Patch_XactSphere>() );
 -      GlobalCommands_insert( "PatchXactCone", FreeCaller<Patch_XactCone>() );
 -      GlobalCommands_insert( "PatchEndCap", FreeCaller<Patch_Endcap>() );
 -      GlobalCommands_insert( "PatchBevel", FreeCaller<Patch_Bevel>() );
 -      GlobalCommands_insert( "PatchSquareBevel", FreeCaller<Patch_SquareBevel>() );
 -      GlobalCommands_insert( "PatchSquareEndcap", FreeCaller<Patch_SquareEndcap>() );
 -      GlobalCommands_insert( "PatchCone", FreeCaller<Patch_Cone>() );
 -      GlobalCommands_insert( "PatchSphere", FreeCaller<Patch_Sphere>() );
 -      GlobalCommands_insert( "SimplePatchMesh", FreeCaller<Patch_Plane>(), Accelerator( 'P', (GdkModifierType)GDK_SHIFT_MASK ) );
 -      GlobalCommands_insert( "PatchInsertInsertColumn", FreeCaller<Patch_InsertInsertColumn>() );
 -      GlobalCommands_insert( "PatchInsertAddColumn", FreeCaller<Patch_InsertAddColumn>() );
 -      GlobalCommands_insert( "PatchInsertInsertRow", FreeCaller<Patch_InsertInsertRow>() );
 -      GlobalCommands_insert( "PatchInsertAddRow", FreeCaller<Patch_InsertAddRow>() );
 -      GlobalCommands_insert( "PatchDeleteFirstColumn", FreeCaller<Patch_DeleteFirstColumn>() );
 -      GlobalCommands_insert( "PatchDeleteLastColumn", FreeCaller<Patch_DeleteLastColumn>() );
 -      GlobalCommands_insert( "PatchDeleteFirstRow", FreeCaller<Patch_DeleteFirstRow>() );
 -      GlobalCommands_insert( "PatchDeleteLastRow", FreeCaller<Patch_DeleteLastRow>() );
 -      GlobalCommands_insert( "InvertCurve", FreeCaller<Patch_Invert>(), Accelerator( 'I', (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "RedisperseRows", FreeCaller<Patch_RedisperseRows>(), Accelerator( 'E', (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "RedisperseCols", FreeCaller<Patch_RedisperseCols>(), Accelerator( 'E', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "SmoothRows", FreeCaller<Patch_SmoothRows>(), Accelerator( 'W', (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "SmoothCols", FreeCaller<Patch_SmoothCols>(), Accelerator( 'W', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "MatrixTranspose", FreeCaller<Patch_Transpose>(), Accelerator( 'M', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 -      GlobalCommands_insert( "CapCurrentCurve", FreeCaller<Patch_Cap>(), Accelerator( 'C', (GdkModifierType)GDK_SHIFT_MASK ) );
 -      GlobalCommands_insert( "CycleCapTexturePatch", FreeCaller<Patch_CycleProjection>(), Accelerator( 'N', (GdkModifierType)GDK_SHIFT_MASK ) );
 -      GlobalCommands_insert( "MakeOverlayPatch", FreeCaller<Patch_OverlayOn>(), Accelerator( 'Y' ) );
 -      GlobalCommands_insert( "ClearPatchOverlays", FreeCaller<Patch_OverlayOff>(), Accelerator( 'L', (GdkModifierType)GDK_CONTROL_MASK ) );
 -      GlobalCommands_insert( "PatchDeform", FreeCaller<Patch_Deform>() );
 -}
 -
 -void Patch_constructToolbar( GtkToolbar* toolbar ){
 -      toolbar_append_button( toolbar, "Put caps on the current patch (SHIFT + C)", "curve_cap.bmp", "CapCurrentCurve" );
 -}
 -
 -void Patch_constructMenu( GtkMenu* menu ){
 +      GlobalCommands_insert( "InvertCurveTextureX", makeCallbackF(Patch_FlipTextureX), Accelerator( 'I', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "InvertCurveTextureY", makeCallbackF(Patch_FlipTextureY), Accelerator( 'I', (GdkModifierType)GDK_SHIFT_MASK ) );
 +      GlobalCommands_insert( "IncPatchColumn", makeCallbackF(Patch_InsertInsertColumn), Accelerator( GDK_KP_Add, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "IncPatchRow", makeCallbackF(Patch_InsertInsertRow), Accelerator( GDK_KP_Add, (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "DecPatchColumn", makeCallbackF(Patch_DeleteLastColumn), Accelerator( GDK_KP_Subtract, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "DecPatchRow", makeCallbackF(Patch_DeleteLastRow), Accelerator( GDK_KP_Subtract, (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "NaturalizePatch", makeCallbackF(Patch_NaturalTexture), Accelerator( 'N', (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "PatchCylinder", makeCallbackF(Patch_Cylinder) );
 +      GlobalCommands_insert( "PatchDenseCylinder", makeCallbackF(Patch_DenseCylinder) );
 +      GlobalCommands_insert( "PatchVeryDenseCylinder", makeCallbackF(Patch_VeryDenseCylinder) );
 +      GlobalCommands_insert( "PatchSquareCylinder", makeCallbackF(Patch_SquareCylinder) );
 +      GlobalCommands_insert( "PatchXactCylinder", makeCallbackF(Patch_XactCylinder) );
 +      GlobalCommands_insert( "PatchXactSphere", makeCallbackF(Patch_XactSphere) );
 +      GlobalCommands_insert( "PatchXactCone", makeCallbackF(Patch_XactCone) );
 +      GlobalCommands_insert( "PatchEndCap", makeCallbackF(Patch_Endcap) );
 +      GlobalCommands_insert( "PatchBevel", makeCallbackF(Patch_Bevel) );
 +      GlobalCommands_insert( "PatchSquareBevel", makeCallbackF(Patch_SquareBevel) );
 +      GlobalCommands_insert( "PatchSquareEndcap", makeCallbackF(Patch_SquareEndcap) );
 +      GlobalCommands_insert( "PatchCone", makeCallbackF(Patch_Cone) );
 +      GlobalCommands_insert( "PatchSphere", makeCallbackF(Patch_Sphere) );
 +      GlobalCommands_insert( "SimplePatchMesh", makeCallbackF(Patch_Plane), Accelerator( 'P', (GdkModifierType)GDK_SHIFT_MASK ) );
 +      GlobalCommands_insert( "PatchInsertInsertColumn", makeCallbackF(Patch_InsertInsertColumn), Accelerator( GDK_KEY_KP_Add, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "PatchInsertAddColumn", makeCallbackF(Patch_InsertAddColumn) );
 +      GlobalCommands_insert( "PatchInsertInsertRow", makeCallbackF(Patch_InsertInsertRow), Accelerator( GDK_KEY_KP_Add, (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "PatchInsertAddRow", makeCallbackF(Patch_InsertAddRow) );
 +      GlobalCommands_insert( "PatchDeleteFirstColumn", makeCallbackF(Patch_DeleteFirstColumn) );
 +      GlobalCommands_insert( "PatchDeleteLastColumn", makeCallbackF(Patch_DeleteLastColumn), Accelerator( GDK_KEY_KP_Subtract, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "PatchDeleteFirstRow", makeCallbackF(Patch_DeleteFirstRow), Accelerator( GDK_KEY_KP_Subtract, (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "PatchDeleteLastRow", makeCallbackF(Patch_DeleteLastRow) );
 +      GlobalCommands_insert( "InvertCurve", makeCallbackF(Patch_Invert), Accelerator( 'I', (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "RedisperseRows", makeCallbackF(Patch_RedisperseRows), Accelerator( 'E', (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "RedisperseCols", makeCallbackF(Patch_RedisperseCols), Accelerator( 'E', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "SmoothRows", makeCallbackF(Patch_SmoothRows), Accelerator( 'W', (GdkModifierType)GDK_CONTROL_MASK ) );
 +      GlobalCommands_insert( "SmoothCols", makeCallbackF(Patch_SmoothCols), Accelerator( 'W', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "MatrixTranspose", makeCallbackF(Patch_Transpose), Accelerator( 'M', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "CapCurrentCurve", makeCallbackF(Patch_Cap), Accelerator( 'C', (GdkModifierType)GDK_SHIFT_MASK ) );
 +      GlobalCommands_insert( "CycleCapTexturePatch", makeCallbackF(Patch_CycleProjection), Accelerator( 'N', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 +      GlobalCommands_insert( "MakeOverlayPatch", makeCallbackF(Patch_OverlayOn), Accelerator( 'Y' ) );
 +      GlobalCommands_insert( "ClearPatchOverlays", makeCallbackF(Patch_OverlayOff), Accelerator( 'L', (GdkModifierType)GDK_CONTROL_MASK ) );
++      GlobalCommands_insert( "PatchDeform", makeCallbackF(Patch_Deform) );
 +}
 +
 +void Patch_constructToolbar( ui::Toolbar toolbar ){
 +      toolbar_append_button( toolbar, "Put caps on the current patch (SHIFT + C)", "cap_curve.png", "CapCurrentCurve" );
 +}
 +
 +void Patch_constructMenu( ui::Menu menu ){
        create_menu_item_with_mnemonic( menu, "Cylinder", "PatchCylinder" );
        {
 -              GtkMenu* menu_in_menu = create_sub_menu_with_mnemonic( menu, "More Cylinders" );
 +              auto menu_in_menu = create_sub_menu_with_mnemonic( menu, "More Cylinders" );
                if ( g_Layout_enableDetachableMenus.m_value ) {
                        menu_tearoff( menu_in_menu );
                }
@@@ -873,6 -972,66 +911,66 @@@ void DoNewPatchDlg( EPatchPrefab prefab
  }
  
  
 -      GtkWindow* window = create_dialog_window( MainFrame_getWindow(), "Patch deform", G_CALLBACK( dialog_delete_callback ), &dialog );
+ void DoPatchDeformDlg(){
+       ModalDialog dialog;
+       GtkWidget* deformW;
 -                      GtkVBox* vbox = create_dialog_vbox( 4 );
++      ui::Window window = create_dialog_window( MainFrame_getWindow(), "Patch deform", G_CALLBACK( dialog_delete_callback ), &dialog );
+       GtkAccelGroup* accel = gtk_accel_group_new();
+       gtk_window_add_accel_group( window, accel );
+       {
+               GtkHBox* hbox = create_dialog_hbox( 4, 4 );
+               gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( hbox ) );
+               {
+                       GtkTable* table = create_dialog_table( 2, 2, 4, 4 );
+                       gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( table ), TRUE, TRUE, 0 );
+                       {
+                               GtkLabel* label = GTK_LABEL( gtk_label_new( "Max deform:" ) );
+                               gtk_widget_show( GTK_WIDGET( label ) );
+                               gtk_table_attach( table, GTK_WIDGET( label ), 0, 1, 0, 1,
+                                                                 (GtkAttachOptions) ( GTK_FILL ),
+                                                                 (GtkAttachOptions) ( 0 ), 0, 0 );
+                               gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+                       }
+                       {
+                               GtkWidget* entry = gtk_entry_new();
+                               gtk_entry_set_text( GTK_ENTRY( entry ), "16" );
+                               gtk_widget_show( entry );
+                               gtk_table_attach( table, entry, 1, 2, 0, 1,
+                                                                 (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+                                                                 (GtkAttachOptions) ( 0 ), 0, 0 );
+                               deformW = entry;
+                       }
+               }
+               {
 -                              GtkButton* button = create_dialog_button( "OK", G_CALLBACK( dialog_button_ok ), &dialog );
 -                              gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
 -                              widget_make_default( GTK_WIDGET( button ) );
 -                              gtk_widget_grab_focus( GTK_WIDGET( button ) );
 -                              gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
++                      auto vbox = create_dialog_vbox( 4 );
+                       gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), TRUE, TRUE, 0 );
+                       {
 -                              GtkButton* button = create_dialog_button( "Cancel", G_CALLBACK( dialog_button_cancel ), &dialog );
 -                              gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
 -                              gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
++                              auto button = create_dialog_button( "OK", G_CALLBACK( dialog_button_ok ), &dialog );
++                              vbox.pack_start( button, FALSE, FALSE, 0 );
++                              widget_make_default( button );
++                              gtk_widget_grab_focus( button  );
++                              gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+                       }
+                       {
++                              auto button = create_dialog_button( "Cancel", G_CALLBACK( dialog_button_cancel ), &dialog );
++                              vbox.pack_start( button, FALSE, FALSE, 0 );
++                              gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+                       }
+               }
+       }
+       if ( modal_dialog_show( window, dialog ) == eIDOK ) {
+               int deform = static_cast<int>( atoi( gtk_entry_get_text( GTK_ENTRY( deformW ) ) ) );
+               Scene_PatchDeform( GlobalSceneGraph(), deform );
+       }
+       gtk_widget_destroy( GTK_WIDGET( window ) );
+ }
  
  
  EMessageBoxReturn DoCapDlg( ECapDialog* type ){
Simple merge