X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Ftexwindow.cpp;h=00969834e90e47146e3a65723589043bb39c1885;hb=54a2bda443aace9c00a1615af10cc1dc8b1f0cd1;hp=416d31789184d02b77e4c610fdbd282296918f86;hpb=70b21eafbe10c90172922d8a7af4f06b9a3b242d;p=xonotic%2Fnetradiant.git diff --git a/radiant/texwindow.cpp b/radiant/texwindow.cpp index 416d3178..00969834 100644 --- a/radiant/texwindow.cpp +++ b/radiant/texwindow.cpp @@ -334,6 +334,7 @@ bool m_move_started; int m_uniformTextureSize; int m_uniformTextureMinSize; +bool m_hideNonShadersInCommon; // Return the display width of a texture in the texture browser void getTextureWH( qtexture_t* tex, int &W, int &H ){ // Don't use uniform size @@ -392,9 +393,10 @@ TextureBrowser() : m_rmbSelected( false ), m_searchedTags( false ), m_tags( false ), + m_move_started( false ), m_uniformTextureSize( 160 ), m_uniformTextureMinSize( 48 ), - m_move_started( false ){ + m_hideNonShadersInCommon( true ){ } }; @@ -532,7 +534,7 @@ bool TextureSearch_IsShown( const char* name ){ } // if texture_showinuse jump over non in-use textures -bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bool hideUnused ){ +bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bool hideUnused, bool hideNonShadersInCommon ){ // filter missing shaders // ugly: filter on built-in fallback name after substitution if ( g_TextureBrowser_filterMissing ) { @@ -579,6 +581,11 @@ bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bo return false; } + if( hideNonShadersInCommon && shader->IsDefault() && !shader->IsInUse() //&& g_TextureBrowser_currentDirectory != "" + && shader_equal_prefix( shader_get_textureName( shader->getName() ), TextureBrowser_getComonShadersDir() ) ){ + return false; + } + if ( GlobalTextureBrowser().m_searchedTags ) { if ( !TextureSearch_IsShown( shader->getName() ) ) { return false; @@ -615,7 +622,7 @@ void TextureBrowser_evaluateHeight( TextureBrowser& textureBrowser ){ { IShader* shader = QERApp_ActiveShaders_IteratorCurrent(); - if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) { + if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) { continue; } @@ -861,6 +868,7 @@ void visit( const char* minor, const _QERPlugImageTable& table ) const { }; void TextureBrowser_ShowDirectory( TextureBrowser& textureBrowser, const char* directory ){ + textureBrowser.m_searchedTags = false; if ( TextureBrowser_showWads() ) { Archive* archive = GlobalFileSystem().getArchive( directory ); ASSERT_NOTNULL( archive ); @@ -967,13 +975,7 @@ void TextureBrowser_enableAlpha( const Callback & importer ){ typedef FreeCaller &), TextureBrowser_enableAlpha> TextureBrowser_enableAlphaExport; void TextureBrowser_SetHideUnused( TextureBrowser& textureBrowser, bool hideUnused ){ - if ( hideUnused ) { - textureBrowser.m_hideUnused = true; - } - else - { - textureBrowser.m_hideUnused = false; - } + textureBrowser.m_hideUnused = hideUnused; textureBrowser.m_hideunused_item.update(); @@ -1001,7 +1003,7 @@ void TextureBrowser_Focus( TextureBrowser& textureBrowser, const char* name ){ { IShader* shader = QERApp_ActiveShaders_IteratorCurrent(); - if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) { + if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) { continue; } @@ -1045,7 +1047,7 @@ IShader* Texture_At( TextureBrowser& textureBrowser, int mx, int my ){ { IShader* shader = QERApp_ActiveShaders_IteratorCurrent(); - if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) { + if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) { continue; } @@ -1074,19 +1076,10 @@ IShader* Texture_At( TextureBrowser& textureBrowser, int mx, int my ){ By mouse click ============== */ -void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, bool bShift ){ - IShader* shader = Texture_At( textureBrowser, mx, my ); - if ( shader != 0 ) { - if ( bShift ) { - if ( shader->IsDefault() ) { - globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n"; - } - else{ - ViewShader( shader->getShaderFileName(), shader->getName() ); - } - } - else - { +void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, guint32 flags ){ + if ( ( flags & GDK_SHIFT_MASK ) == 0 ) { + IShader* shader = Texture_At( textureBrowser, mx, my ); + if ( shader != 0 ) { TextureBrowser_SetSelectedShader( textureBrowser, shader->getName() ); TextureBrowser_textureSelected( shader->getName() ); @@ -1123,7 +1116,7 @@ void TextureBrowser_trackingDelta( int x, int y, unsigned int state, void* data void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){ textureBrowser.m_move_started = false; - textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent ); + textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent, false ); } void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){ @@ -1135,7 +1128,21 @@ void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){ } void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){ - SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, ( flags & GDK_SHIFT_MASK ) != 0 ); + SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, flags ); +} + +void TextureBrowser_Selection_MouseUp( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){ + if ( ( flags & GDK_SHIFT_MASK ) != 0 ) { + IShader* shader = Texture_At( textureBrowser, pointx, textureBrowser.height - 1 - pointy ); + if ( shader != 0 ) { + if ( shader->IsDefault() ) { + globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n"; + } + else{ + ViewShader( shader->getShaderFileName(), shader->getName(), ( flags & GDK_CONTROL_MASK ) != 0 ); + } + } + } } /* @@ -1190,7 +1197,7 @@ void Texture_Draw( TextureBrowser& textureBrowser ){ { IShader* shader = QERApp_ActiveShaders_IteratorCurrent(); - if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) { + if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) { continue; } @@ -1471,6 +1478,7 @@ void BuildStoreAvailableTags( ui::ListStore storeAvailable, gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event, TextureBrowser* textureBrowser ){ if ( event->type == GDK_BUTTON_PRESS ) { + gtk_widget_grab_focus( widget ); if ( event->button == 3 ) { if ( GlobalTextureBrowser().m_tags ) { textureBrowser->m_rmbSelected = true; @@ -1503,7 +1511,8 @@ gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event, #define GARUX_DISABLE_2BUTTON #ifndef GARUX_DISABLE_2BUTTON CopiedString texName = textureBrowser->shader; - const char* sh = textureBrowser->shader.c_str(); + //const char* sh = texName.c_str(); + char* sh = const_cast( texName.c_str() ); char* dir = strrchr( sh, '/' ); if( dir != NULL ){ *(dir + 1) = '\0'; @@ -1535,6 +1544,9 @@ gboolean TextureBrowser_button_release( ui::Widget widget, GdkEventButton* event TextureBrowser_Tracking_MouseUp( *textureBrowser ); } } + if ( event->button == 1 ) { + TextureBrowser_Selection_MouseUp( *textureBrowser, event->state, static_cast( event->x ), static_cast( event->y ) ); + } } return FALSE; } @@ -1544,6 +1556,10 @@ gboolean TextureBrowser_motion( ui::Widget widget, GdkEventMotion *event, Textur } gboolean TextureBrowser_scroll( ui::Widget widget, GdkEventScroll* event, TextureBrowser* textureBrowser ){ + gtk_widget_grab_focus( widget ); + if( !gtk_window_is_active( textureBrowser->m_parent ) ) + gtk_window_present( textureBrowser->m_parent ); + if ( event->direction == GDK_SCROLL_UP ) { TextureBrowser_MouseWheel( *textureBrowser, true ); } @@ -1765,6 +1781,8 @@ void TextureBrowser_createContextMenu( ui::Widget treeview, GdkEventButton *even gdk_event_get_time( (GdkEvent*)event ) ); } +void TextureBrowser_searchTags(); + gboolean TreeViewTags_onButtonPressed( ui::TreeView treeview, GdkEventButton *event ){ if ( event->type == GDK_BUTTON_PRESS && event->button == 3 ) { GtkTreePath *path; @@ -1779,6 +1797,10 @@ gboolean TreeViewTags_onButtonPressed( ui::TreeView treeview, GdkEventButton *ev TextureBrowser_createContextMenu( treeview, event ); return TRUE; } + if( event->type == GDK_2BUTTON_PRESS && event->button == 1 ){ + TextureBrowser_searchTags(); + return TRUE; + } return FALSE; } @@ -2209,7 +2231,8 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ TextureBrowser_createTreeViewTree(); - gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tree ), g_TextureBrowser.m_treeViewTree ); + //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tree ), g_TextureBrowser.m_treeViewTree ); + gtk_container_add( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tree ), GTK_WIDGET( g_TextureBrowser.m_treeViewTree ) ); g_TextureBrowser.m_treeViewTree.show(); } { // gl_widget scrollbar @@ -2254,6 +2277,7 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ } { // tag menu bar auto menu_tags = ui::Menu(ui::New); + gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" ); // auto tags_item = TextureBrowser_constructTagsMenu( menu_tags ); TextureBrowser_constructTagsMenu( menu_tags ); // gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags ); @@ -2262,6 +2286,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ auto button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png" ); button.dimensions( 22, 22 ); button.connect( "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags ); + + //to show detached menu over floating tex bro and main wnd... + gtk_menu_attach_to_widget( GTK_MENU( menu_tags ), GTK_WIDGET( button ), NULL ); } { // Tag TreeView g_TextureBrowser.m_scr_win_tags = ui::ScrolledWindow(ui::New); @@ -2275,7 +2302,8 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ auto selection = gtk_tree_view_get_selection(g_TextureBrowser.m_treeViewTags ); gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE ); - gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tags ), g_TextureBrowser.m_treeViewTags ); + //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tags ), g_TextureBrowser.m_treeViewTags ); + gtk_container_add( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tags ), GTK_WIDGET( g_TextureBrowser.m_treeViewTags ) ); g_TextureBrowser.m_treeViewTags.show(); } { // Texture/Tag notebook @@ -2324,7 +2352,8 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ g_TextureBrowser.m_assigned_tree.show(); scrolled_win.show(); - gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), g_TextureBrowser.m_assigned_tree ); + //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), g_TextureBrowser.m_assigned_tree ); + gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( g_TextureBrowser.m_available_tree ) ); frame_table.attach(scrolled_win, {0, 1, 1, 3}, {GTK_FILL, GTK_FILL}); } @@ -2352,7 +2381,8 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){ g_TextureBrowser.m_available_tree.show(); scrolled_win.show(); - gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), g_TextureBrowser.m_available_tree ); + //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), g_TextureBrowser.m_available_tree ); + gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( g_TextureBrowser.m_available_tree ) ); frame_table.attach(scrolled_win, {2, 3, 1, 3}, {GTK_FILL, GTK_FILL}); } @@ -2814,6 +2844,14 @@ void TextureBrowser_constructPreferences( PreferencesPage& page ){ const char* startup_shaders[] = { "None", TextureBrowser_getComonShadersName() }; page.appendCombo( "Load Shaders at Startup", reinterpret_cast( GlobalTextureBrowser().m_startupShaders ), STRING_ARRAY_RANGE( startup_shaders ) ); } + { + StringOutputStream sstream( 256 ); + sstream << "Hide nonShaders in " << TextureBrowser_getComonShadersDir() << " folder"; + page.appendCheckBox( + "", sstream.c_str(), + GlobalTextureBrowser().m_hideNonShadersInCommon + ); + } } void TextureBrowser_constructPage( PreferenceGroup& group ){ @@ -2866,6 +2904,7 @@ void TextureBrowser_Construct(){ GlobalPreferenceSystem().registerPreference( "LoadShaders", make_property_string( reinterpret_cast( GlobalTextureBrowser().m_startupShaders ) ) ); GlobalPreferenceSystem().registerPreference( "WheelMouseInc", make_property_string( GlobalTextureBrowser().m_mouseWheelScrollIncrement ) ); GlobalPreferenceSystem().registerPreference( "SI_Colors0", make_property_string( GlobalTextureBrowser().color_textureback ) ); + GlobalPreferenceSystem().registerPreference( "HideNonShadersInCommon", make_property_string( GlobalTextureBrowser().m_hideNonShadersInCommon ) ); g_TextureBrowser.shader = texdef_name_default();