From: Thomas Debesse Date: Mon, 25 May 2020 18:01:54 +0000 (+0200) Subject: Merge commit 'dce6730b39a2e6484015e483c46edbe93054f6a0' into garux-merge X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b25e4389ba4d089fc94cc3860774c8510b843042;p=xonotic%2Fnetradiant.git Merge commit 'dce6730b39a2e6484015e483c46edbe93054f6a0' into garux-merge --- b25e4389ba4d089fc94cc3860774c8510b843042 diff --cc radiant/csg.cpp index 4ecbf5cc,1b824b6a..374384b3 --- a/radiant/csg.cpp +++ b/radiant/csg.cpp @@@ -566,15 -608,17 +606,19 @@@ class SubtractBrushesFromUnselected : p const brush_vector_t& m_brushlist; std::size_t& m_before; std::size_t& m_after; + mutable bool m_eraseParent; public: SubtractBrushesFromUnselected( const brush_vector_t& brushlist, std::size_t& before, std::size_t& after ) - : m_brushlist( brushlist ), m_before( before ), m_after( after ){ + : m_brushlist( brushlist ), m_before( before ), m_after( after ), m_eraseParent( false ){ } + bool pre( const scene::Path& path, scene::Instance& instance ) const { - return true; + if ( path.top().get().visible() ) { + return true; + } + return false; } + void post( const scene::Path& path, scene::Instance& instance ) const { if ( path.top().get().visible() ) { Brush* brush = Node_getBrush( path.top() ); diff --cc radiant/filterbar.cpp index 424280ce,6317fa47..af2c829d --- a/radiant/filterbar.cpp +++ b/radiant/filterbar.cpp @@@ -13,7 -11,9 +13,7 @@@ #include "gtkutil/accelerator.h" #include "generic/callback.h" - + #include "entity.h" - - int ToggleActions = 0; int ButtonNum = 0; @@@ -152,8 -147,17 +152,18 @@@ gboolean Trigger_button_press( ui::Widg return FALSE; } + gboolean Func_Groups_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){ + if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) { + UndoableCommand undo( "create func_group" ); + Entity_createFromSelection( "func_group", g_vector3_identity ); + ToggleActions = 0; + return TRUE; + } + return FALSE; + } + -gboolean Detail_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){ + +gboolean Detail_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) { GlobalCommands_find( "MakeDetail" ).m_callback(); ToggleActions = 0; @@@ -173,78 -176,59 +183,86 @@@ gboolean Structural_button_press( ui::W } -GtkToolbar* create_filter_toolbar(){ - GtkToolbar* filter_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); - gtk_widget_show( GTK_WIDGET( filter_toolbar ) ); - g_signal_connect( G_OBJECT( filter_toolbar ), "enter_notify_event", G_CALLBACK( ToggleActions0 ), 0 ); +ui::Toolbar create_filter_toolbar(){ + auto filter_toolbar = ui::Toolbar::from( gtk_toolbar_new() ); + gtk_orientable_set_orientation( GTK_ORIENTABLE(filter_toolbar), GTK_ORIENTATION_HORIZONTAL ); + gtk_toolbar_set_style( filter_toolbar, GTK_TOOLBAR_ICONS ); + filter_toolbar.show(); - GtkToggleButton* button; - toolbar_append_toggle_button( filter_toolbar, "World (ALT + 1)", "f-world.png", "FilterWorldBrushes" ); + auto space = [&]() { + auto btn = ui::ToolItem::from(gtk_separator_tool_item_new()); + btn.show(); + filter_toolbar.add(btn); + }; - button = toolbar_append_toggle_button( filter_toolbar, "Structural (CTRL + SHIFT + D)\nRightClick: MakeStructural", "f-structural.png", "FilterStructural" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Structural_button_press ), 0 ); + g_signal_connect( G_OBJECT( filter_toolbar ), "enter_notify_event", G_CALLBACK( ToggleActions0 ), 0 ); - button = toolbar_append_toggle_button( filter_toolbar, "Details (CTRL + D)\nRightClick: MakeDetail", "f-details.png", "FilterDetails" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Detail_button_press ), 0 ); + toolbar_append_toggle_button( filter_toolbar, "World (ALT + 1)", "f-world.png", "FilterWorldBrushes" ); + + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Structural (CTRL + SHIFT + D)\nRightClick: MakeStructural", "f-structural.png", "FilterStructural" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Structural_button_press ), 0 ); + } - button = toolbar_append_toggle_button( filter_toolbar, "Func_Groups\nRightClick: create func_group", "f-funcgroups.png", "FilterFuncGroups" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Func_Groups_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Details (CTRL + D)\nRightClick: MakeDetail", "f-details.png", "FilterDetails" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Detail_button_press ), 0 ); + } -- toolbar_append_toggle_button( filter_toolbar, "Patches (CTRL + P)", "patch_wireframe.png", "FilterPatches" ); - gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) ); ++ { ++ auto button = toolbar_append_toggle_button( filter_toolbar, "Func_Groups\nRightClick: create func_group", "f-funcgroups.png", "FilterFuncGroups" ); ++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Func_Groups_button_press ), 0 ); + - button = toolbar_append_toggle_button( filter_toolbar, "Areaportals (ALT + 3)\nRightClick: toggle tex\n\tnoDraw\n\tnoDrawNonSolid", "f-areaportal.png", "FilterAreaportals" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Areaportals_button_press ), 0 ); ++ toolbar_append_toggle_button( filter_toolbar, "Patches (CTRL + P)", "patch_wireframe.png", "FilterPatches" ); ++ } + + space(); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Areaportals (ALT + 3)\nRightClick: toggle tex\n\tnoDraw\n\tnoDrawNonSolid", "f-areaportal.png", "FilterAreaportals" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Areaportals_button_press ), 0 ); + } - toolbar_append_toggle_button( filter_toolbar, "Translucent (ALT + 4)", "f-translucent.png", "FilterTranslucent" ); - button = toolbar_append_toggle_button( filter_toolbar, "Liquids (ALT + 5)\nRightClick: toggle tex\n\twaterCaulk\n\tlavaCaulk\n\tslimeCaulk", "f-liquids.png", "FilterLiquids" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Liquids_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Liquids (ALT + 5)\nRightClick: toggle tex\n\twaterCaulk\n\tlavaCaulk\n\tslimeCaulk", "f-liquids.png", "FilterLiquids" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Liquids_button_press ), 0 ); + } - button = toolbar_append_toggle_button( filter_toolbar, "Caulk (ALT + 6)\nRightClick: tex Caulk", "f-caulk.png", "FilterCaulk" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Caulk_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Caulk (ALT + 6)\nRightClick: tex Caulk", "f-caulk.png", "FilterCaulk" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Caulk_button_press ), 0 ); + } - button = toolbar_append_toggle_button( filter_toolbar, "Clips (ALT + 7)\nRightClick: toggle tex\n\tplayerClip\n\tweapClip", "f-clip.png", "FilterClips" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Clip_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Clips (ALT + 7)\nRightClick: toggle tex\n\tplayerClip\n\tweapClip", "f-clip.png", "FilterClips" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Clip_button_press ), 0 ); + } - button = toolbar_append_toggle_button( filter_toolbar, "HintsSkips (CTRL + H)\nRightClick: toggle tex\n\thint\n\thintLocal\n\thintSkip", "f-hint.png", "FilterHintsSkips" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Hint_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "HintsSkips (CTRL + H)\nRightClick: toggle tex\n\thint\n\thintLocal\n\thintSkip", "f-hint.png", "FilterHintsSkips" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Hint_button_press ), 0 ); + } //toolbar_append_toggle_button( filter_toolbar, "Paths (ALT + 8)", "texture_lock.png", "FilterPaths" ); - gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) ); ++ + space(); ++ toolbar_append_toggle_button( filter_toolbar, "Entities (ALT + 2)", "f-entities.png", "FilterEntities" ); toolbar_append_toggle_button( filter_toolbar, "Lights (ALT + 0)", "f-lights.png", "FilterLights" ); toolbar_append_toggle_button( filter_toolbar, "Models (SHIFT + M)", "f-models.png", "FilterModels" ); - button = toolbar_append_toggle_button( filter_toolbar, "Triggers (CTRL + SHIFT + T)\nRightClick: tex Trigger", "f-triggers.png", "FilterTriggers" ); - g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Trigger_button_press ), 0 ); + { + auto button = toolbar_append_toggle_button( filter_toolbar, "Triggers (CTRL + SHIFT + T)\nRightClick: tex Trigger", "f-triggers.png", "FilterTriggers" ); + g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Trigger_button_press ), 0 ); + } //toolbar_append_toggle_button( filter_toolbar, "Decals (SHIFT + D)", "f-decals.png", "FilterDecals" ); - gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) ); + space(); toolbar_append_button( filter_toolbar, "InvertFilters", "f-invert.png", "InvertFilters" ); + toolbar_append_button( filter_toolbar, "ResetFilters", "f-reset.png", "ResetFilters" ); return filter_toolbar; } diff --cc radiant/mainframe.cpp index 9c8784b5,4c8ddd7c..99d49965 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@@ -2924,11 -2773,12 +2924,12 @@@ void MainFrame::Create() g_MainWindowActive.connect( window ); - GetPlugInMgr().Init( GTK_WIDGET( window ) ); + GetPlugInMgr().Init( window ); - GtkWidget* vbox = gtk_vbox_new( FALSE, 0 ); - gtk_container_add( GTK_CONTAINER( window ), vbox ); - gtk_widget_show( vbox ); + auto vbox = ui::VBox( FALSE, 0 ); + window.add(vbox); + vbox.show(); + gtk_container_set_focus_chain( GTK_CONTAINER( vbox ), NULL ); global_accel_connect_window( window ); diff --cc radiant/patchmanip.cpp index e0ab819c,b941e2ae..7a764976 --- a/radiant/patchmanip.cpp +++ b/radiant/patchmanip.cpp @@@ -378,12 -420,22 +378,26 @@@ void Scene_PatchGetShader_Selected( sce } } + class PatchSelectByShader + { + const char* m_name; + public: + inline PatchSelectByShader( const char* name ) + : m_name( name ){ + } + void operator()( PatchInstance& patch ) const { + if ( shader_equal( patch.getPatch().GetShader(), m_name ) ) { + patch.setSelected( true ); + } + } + }; + void Scene_PatchSelectByShader( scene::Graph& graph, const char* name ){ - Scene_forEachVisiblePatchInstance( PatchSelectByShader( name ) ); + Scene_forEachVisiblePatchInstance([&](PatchInstance &patch) { + if (shader_equal(patch.getPatch().GetShader(), name)) { + patch.setSelected(true); + } + }); }