minor refactoring

This commit is contained in:
Garux 2020-04-28 08:30:25 +03:00
parent 06cd1e98ff
commit 7ae79b263d
9 changed files with 141 additions and 173 deletions

View File

@ -39,7 +39,7 @@ const unsigned int RENDER_ALPHATEST = 1 << 4; // glEnable(GL_ALPHA_TEST)
const unsigned int RENDER_DEPTHTEST = 1 << 5; // glEnable(GL_DEPTH_TEST) const unsigned int RENDER_DEPTHTEST = 1 << 5; // glEnable(GL_DEPTH_TEST)
const unsigned int RENDER_DEPTHWRITE = 1 << 6; // glDepthMask(GL_TRUE) const unsigned int RENDER_DEPTHWRITE = 1 << 6; // glDepthMask(GL_TRUE)
const unsigned int RENDER_COLOURWRITE = 1 << 7; // glColorMask(GL_TRUE; GL_TRUE; GL_TRUE; GL_TRUE) const unsigned int RENDER_COLOURWRITE = 1 << 7; // glColorMask(GL_TRUE; GL_TRUE; GL_TRUE; GL_TRUE)
const unsigned int RENDER_CULLFACE = 1 << 8; // glglEnable(GL_CULL_FACE) const unsigned int RENDER_CULLFACE = 1 << 8; // glEnable(GL_CULL_FACE)
const unsigned int RENDER_SCALED = 1 << 9; // glEnable(GL_NORMALIZE) const unsigned int RENDER_SCALED = 1 << 9; // glEnable(GL_NORMALIZE)
const unsigned int RENDER_SMOOTH = 1 << 10; // glShadeModel const unsigned int RENDER_SMOOTH = 1 << 10; // glShadeModel
const unsigned int RENDER_FOG = 1 << 11; // glEnable(GL_FOG) const unsigned int RENDER_FOG = 1 << 11; // glEnable(GL_FOG)

View File

@ -87,15 +87,16 @@ MotionDeltaFunction m_function;
void* m_data; void* m_data;
static gboolean deferred_motion( gpointer data ){ static gboolean deferred_motion( gpointer data ){
reinterpret_cast<DeferredMotionDelta*>( data )->m_function( DeferredMotionDelta* self = reinterpret_cast<DeferredMotionDelta*>( data );
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_x, self->m_function(
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_y, self->m_delta_x,
reinterpret_cast<DeferredMotionDelta*>( data )->m_state, self->m_delta_y,
reinterpret_cast<DeferredMotionDelta*>( data )->m_data self->m_state,
self->m_data
); );
reinterpret_cast<DeferredMotionDelta*>( data )->m_motion_handler = 0; self->m_motion_handler = 0;
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_x = 0; self->m_delta_x = 0;
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_y = 0; self->m_delta_y = 0;
return FALSE; return FALSE;
} }
public: public:
@ -121,7 +122,8 @@ class FreezePointer
{ {
unsigned int handle_motion; unsigned int handle_motion;
int recorded_x, recorded_y, last_x, last_y, center_x, center_y; int recorded_x, recorded_y, last_x, last_y, center_x, center_y;
GtkWidget* m_weedjet; GtkWindow* m_window;
GtkWidget* m_widget;
typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data ); typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data );
MotionDeltaFunction m_function; MotionDeltaFunction m_function;
void* m_data; void* m_data;
@ -163,7 +165,7 @@ static gboolean motion_delta( GtkWidget *widget, GdkEventMotion *event, FreezePo
} }
void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction function, void* data ){ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction function, void* data ){
ASSERT_MESSAGE( m_function == 0, "can't freeze pointer" ); ASSERT_MESSAGE( m_function == 0, "can't freeze pointer: already frozen" );
const GdkEventMask mask = static_cast<GdkEventMask>( GDK_POINTER_MOTION_MASK const GdkEventMask mask = static_cast<GdkEventMask>( GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_HINT_MASK
@ -182,9 +184,8 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
drags with pressed buttons have no problem at all w/o this */ drags with pressed buttons have no problem at all w/o this */
gdk_pointer_grab( GTK_WIDGET( window )->window, TRUE, mask, 0, cursor, GDK_CURRENT_TIME ); gdk_pointer_grab( GTK_WIDGET( window )->window, TRUE, mask, 0, cursor, GDK_CURRENT_TIME );
//gdk_window_set_cursor ( GTK_WIDGET( window )->window, cursor ); //gdk_window_set_cursor ( GTK_WIDGET( window )->window, cursor );
/* is needed to fix activating neighbour widgets, that happens, if using upper one */ /* is needed to fix activating neighbor widgets, that happens, if using upper one */
gtk_grab_add( widget ); gtk_grab_add( widget );
m_weedjet = widget;
gdk_cursor_unref( cursor ); gdk_cursor_unref( cursor );
@ -200,28 +201,33 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
last_x = center_x; last_x = center_x;
last_y = center_y; last_y = center_y;
m_widget = widget;
m_window = window;
m_function = function; m_function = function;
m_data = data; m_data = data;
handle_motion = g_signal_connect( G_OBJECT( window ), "motion_notify_event", G_CALLBACK( motion_delta ), this ); handle_motion = g_signal_connect( G_OBJECT( window ), "motion_notify_event", G_CALLBACK( motion_delta ), this );
} }
void unfreeze_pointer( GtkWindow* window, bool centerize ){ void unfreeze_pointer( bool centerize ){
g_signal_handler_disconnect( G_OBJECT( window ), handle_motion ); ASSERT_MESSAGE( m_function != 0, "can't unfreeze pointer: is not frozen" );
g_signal_handler_disconnect( G_OBJECT( m_window ), handle_motion );
m_function = 0; m_function = 0;
m_data = 0; m_data = 0;
if( centerize ){ if( centerize ){
Sys_SetCursorPos( window, center_x, center_y ); Sys_SetCursorPos( m_window, center_x, center_y );
} }
else{ else{
Sys_SetCursorPos( window, recorded_x, recorded_y ); Sys_SetCursorPos( m_window, recorded_x, recorded_y );
} }
// gdk_window_set_cursor( GTK_WIDGET( window )->window, 0 ); // gdk_window_set_cursor( GTK_WIDGET( m_window )->window, 0 );
gdk_pointer_ungrab( GDK_CURRENT_TIME ); gdk_pointer_ungrab( GDK_CURRENT_TIME );
if( m_weedjet )
gtk_grab_remove( m_weedjet ); gtk_grab_remove( m_widget );
} }
}; };
@ -238,12 +244,13 @@ ValueChangedFunction m_function;
void* m_data; void* m_data;
static gboolean deferred_value_changed( gpointer data ){ static gboolean deferred_value_changed( gpointer data ){
reinterpret_cast<DeferredAdjustment*>( data )->m_function( DeferredAdjustment* self = reinterpret_cast<DeferredAdjustment*>( data );
reinterpret_cast<DeferredAdjustment*>( data )->m_data, self->m_function(
reinterpret_cast<DeferredAdjustment*>( data )->m_value self->m_data,
self->m_value
); );
reinterpret_cast<DeferredAdjustment*>( data )->m_handler = 0; self->m_handler = 0;
reinterpret_cast<DeferredAdjustment*>( data )->m_value = 0; self->m_value = 0;
return FALSE; return FALSE;
} }
public: public:

View File

@ -1856,7 +1856,7 @@ void CamWnd::DisableFreeMove(){
CamWnd_Remove_Handlers_FreeMove( *this ); CamWnd_Remove_Handlers_FreeMove( *this );
CamWnd_Add_Handlers_Move( *this ); CamWnd_Add_Handlers_Move( *this );
m_freezePointer.unfreeze_pointer( m_parent, true ); m_freezePointer.unfreeze_pointer( true );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_freemove_handle_focusout ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_freemove_handle_focusout );
CamWnd_Update( *this ); CamWnd_Update( *this );

View File

@ -432,6 +432,8 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
entitypath.push( makeReference( node.get() ) ); entitypath.push( makeReference( node.get() ) );
scene::Instance& instance = findInstance( entitypath ); scene::Instance& instance = findInstance( entitypath );
Entity* entity = Node_getEntity( node );
if ( entityClass->fixedsize || ( isModel && !brushesSelected ) ) { if ( entityClass->fixedsize || ( isModel && !brushesSelected ) ) {
//Select_Delete(); //Select_Delete();
@ -449,7 +451,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
else else
{ {
if ( g_pGameDescription->mGameType == "doom3" ) { if ( g_pGameDescription->mGameType == "doom3" ) {
Node_getEntity( node )->setKeyValue( "model", Node_getEntity( node )->getKeyValue( "name" ) ); entity->setKeyValue( "model", entity->getKeyValue( "name" ) );
} }
Scene_parentSelectedBrushesToEntity( GlobalSceneGraph(), node ); Scene_parentSelectedBrushesToEntity( GlobalSceneGraph(), node );
@ -470,7 +472,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
g_iLastLightIntensity = intensity; g_iLastLightIntensity = intensity;
char buf[30]; char buf[30];
sprintf( buf, "255 255 255 %d", intensity ); sprintf( buf, "255 255 255 %d", intensity );
Node_getEntity( node )->setKeyValue( "_light", buf ); entity->setKeyValue( "_light", buf );
} }
} }
} }
@ -482,24 +484,24 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
g_iLastLightIntensity = intensity; g_iLastLightIntensity = intensity;
char buf[10]; char buf[10];
sprintf( buf, "%d", intensity ); sprintf( buf, "%d", intensity );
Node_getEntity( node )->setKeyValue( "light", buf ); entity->setKeyValue( "light", buf );
} }
} }
else if ( brushesSelected ) { // use workzone to set light position/size for doom3 lights, if there are brushes selected else if ( brushesSelected ) { // use workzone to set light position/size for doom3 lights, if there are brushes selected
AABB bounds( Doom3Light_getBounds( workzone ) ); AABB bounds( Doom3Light_getBounds( workzone ) );
StringOutputStream key( 64 ); StringOutputStream key( 64 );
key << bounds.origin[0] << " " << bounds.origin[1] << " " << bounds.origin[2]; key << bounds.origin[0] << " " << bounds.origin[1] << " " << bounds.origin[2];
Node_getEntity( node )->setKeyValue( "origin", key.c_str() ); entity->setKeyValue( "origin", key.c_str() );
key.clear(); key.clear();
key << bounds.extents[0] << " " << bounds.extents[1] << " " << bounds.extents[2]; key << bounds.extents[0] << " " << bounds.extents[1] << " " << bounds.extents[2];
Node_getEntity( node )->setKeyValue( "light_radius", key.c_str() ); entity->setKeyValue( "light_radius", key.c_str() );
} }
} }
if ( isModel ) { if ( isModel ) {
const char* model = misc_model_dialog( GTK_WIDGET( MainFrame_getWindow() ) ); const char* model = misc_model_dialog( GTK_WIDGET( MainFrame_getWindow() ) );
if ( model != 0 ) { if ( model != 0 ) {
Node_getEntity( node )->setKeyValue( entityClass->miscmodel_key() , model ); entity->setKeyValue( entityClass->miscmodel_key(), model );
} }
} }
} }

View File

@ -3125,6 +3125,12 @@ void MainFrame::Create(){
if ( FloatingGroupDialog() ) { if ( FloatingGroupDialog() ) {
g_page_console = GroupDialog_addPage( "Console", Console_constructWindow( GroupDialog_getWindow() ), RawStringExportCaller( "Console" ) ); g_page_console = GroupDialog_addPage( "Console", Console_constructWindow( GroupDialog_getWindow() ), RawStringExportCaller( "Console" ) );
{
GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) );
g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() );
}
} }
{ {
@ -3146,7 +3152,6 @@ void MainFrame::Create(){
gtk_widget_show( GTK_WIDGET( window ) ); gtk_widget_show( GTK_WIDGET( window ) );
if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft ) { if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft ) {
{
GtkWidget* hsplit = gtk_hpaned_new(); GtkWidget* hsplit = gtk_hpaned_new();
m_hSplit = hsplit; m_hSplit = hsplit;
gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 );
@ -3191,7 +3196,6 @@ void MainFrame::Create(){
} }
} }
} }
}
else if ( CurrentStyle() == eFloating ) { else if ( CurrentStyle() == eFloating ) {
{ {
GtkWindow* window = create_persistent_floating_window( "Camera", m_window ); GtkWindow* window = create_persistent_floating_window( "Camera", m_window );
@ -3277,13 +3281,6 @@ void MainFrame::Create(){
g_floating_windows.push_back( GTK_WIDGET( window ) ); g_floating_windows.push_back( GTK_WIDGET( window ) );
} }
{
GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) );
g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() );
}
m_vSplit = 0; m_vSplit = 0;
m_hSplit = 0; m_hSplit = 0;
m_vSplit2 = 0; m_vSplit2 = 0;
@ -3315,13 +3312,6 @@ void MainFrame::Create(){
m_hSplit = create_split_views( camera, yz, xy, xz, m_vSplit, m_vSplit2 ); m_hSplit = create_split_views( camera, yz, xy, xz, m_vSplit, m_vSplit2 );
gtk_box_pack_start( GTK_BOX( vbox ), m_hSplit, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), m_hSplit, TRUE, TRUE, 0 );
{
GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) );
g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() );
}
} }
EntityList_constructWindow( window ); EntityList_constructWindow( window );

View File

@ -718,7 +718,7 @@ void Map_ImportSelected( TextInputStream& in, const MapFormat& format ){
EBrushType brush_type = GlobalBrushCreator().getFormat(); EBrushType brush_type = GlobalBrushCreator().getFormat();
format.readGraph( node, in, GlobalEntityCreator() ); format.readGraph( node, in, GlobalEntityCreator() );
if ( brush_type != GlobalBrushCreator().getFormat() ) { if ( brush_type != GlobalBrushCreator().getFormat() ) {
Node_getTraversable( *node.get_pointer() )->traverse( Convert_Brushes( BrushType_getTexdefType( GlobalBrushCreator().getFormat() ), BrushType_getTexdefType( brush_type ) ) ); Node_getTraversable( node )->traverse( Convert_Brushes( BrushType_getTexdefType( GlobalBrushCreator().getFormat() ), BrushType_getTexdefType( brush_type ) ) );
GlobalBrushCreator().toggleFormat( brush_type ); GlobalBrushCreator().toggleFormat( brush_type );
} }
Map_gatherNamespaced( node ); Map_gatherNamespaced( node );

View File

@ -620,7 +620,7 @@ public:
void tracking_MouseUp(){ void tracking_MouseUp(){
if( m_move_started ){ if( m_move_started ){
m_move_started = false; m_move_started = false;
m_freezePointer.unfreeze_pointer( m_parent, false ); m_freezePointer.unfreeze_pointer( false );
} }
} }
void tracking_MouseDown(){ void tracking_MouseDown(){

View File

@ -68,6 +68,7 @@
#include "gtkutil/widget.h" #include "gtkutil/widget.h"
#include "gtkutil/glwidget.h" #include "gtkutil/glwidget.h"
#include "gtkutil/messagebox.h" #include "gtkutil/messagebox.h"
#include "gtkutil/toolbar.h"
#include "error.h" #include "error.h"
#include "map.h" #include "map.h"
@ -88,8 +89,6 @@
#include "preferences.h" #include "preferences.h"
#include "commands.h" #include "commands.h"
void TextureBrowser_queueDraw( TextureBrowser& textureBrowser );
bool string_equal_start( const char* string, StringRange start ){ bool string_equal_start( const char* string, StringRange start ){
return string_equal_n( string, start.first, start.last - start.first ); return string_equal_n( string, start.first, start.last - start.first );
} }
@ -135,10 +134,6 @@ bool g_TextureBrowser_filter_searchFromStart = false;
class TextureBrowser;
typedef ReferenceCaller<TextureBrowser, TextureBrowser_queueDraw> TextureBrowserQueueDrawCaller;
void TextureBrowser_scrollChanged( void* data, gdouble value ); void TextureBrowser_scrollChanged( void* data, gdouble value );
@ -260,10 +255,8 @@ static bool wads;
// Return the display width of a texture in the texture browser // Return the display width of a texture in the texture browser
void getTextureWH( qtexture_t* tex, int &W, int &H ){ void getTextureWH( qtexture_t* tex, int &W, int &H ){
// Don't use uniform size // Don't use uniform size
W = (int)( tex->width * ( (float)m_textureScale / 100 ) ); W = std::max( std::size_t( 1 ), tex->width * m_textureScale / 100 );
H = (int)( tex->height * ( (float)m_textureScale / 100 ) ); H = std::max( std::size_t( 1 ), tex->height * m_textureScale / 100 );
if ( W < 1 ) W = 1;
if ( H < 1 ) H = 1;
if ( g_TextureBrowser_fixedSize ){ if ( g_TextureBrowser_fixedSize ){
if ( W >= H ) { if ( W >= H ) {
@ -329,6 +322,12 @@ void ( *TextureBrowser_textureSelected )( const char* shader );
void TextureBrowser_updateScroll( TextureBrowser& textureBrowser ); void TextureBrowser_updateScroll( TextureBrowser& textureBrowser );
void TextureBrowser_queueDraw( TextureBrowser& textureBrowser ){
if ( textureBrowser.m_gl_widget != 0 ) {
gtk_widget_queue_draw( textureBrowser.m_gl_widget );
}
}
const char* TextureBrowser_getComonShadersName(){ const char* TextureBrowser_getComonShadersName(){
const char* value = g_pGameDescription->getKeyValue( "common_shaders_name" ); const char* value = g_pGameDescription->getKeyValue( "common_shaders_name" );
if ( !string_empty( value ) ) { if ( !string_empty( value ) ) {
@ -612,8 +611,6 @@ void TextureBrowser_addActiveShadersChangedCallback( const SignalHandler& handle
g_activeShadersChangedCallbacks.connectLast( handler ); g_activeShadersChangedCallbacks.connectLast( handler );
} }
void TextureBrowser_constructTreeStore();
class ShadersObserver : public ModuleObserver class ShadersObserver : public ModuleObserver
{ {
Signal0 m_realiseCallbacks; Signal0 m_realiseCallbacks;
@ -989,14 +986,12 @@ void TextureBrowser_trackingDelta( int x, int y, unsigned int state, void* data
void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){ void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){
if( textureBrowser.m_move_started ){ if( textureBrowser.m_move_started ){
textureBrowser.m_move_started = false; textureBrowser.m_move_started = false;
textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent, false ); textureBrowser.m_freezePointer.unfreeze_pointer( false );
} }
} }
void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){ void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
if( textureBrowser.m_move_started ){
TextureBrowser_Tracking_MouseUp( textureBrowser ); TextureBrowser_Tracking_MouseUp( textureBrowser );
}
textureBrowser.m_move_started = true; textureBrowser.m_move_started = true;
textureBrowser.m_move_amount = 0; textureBrowser.m_move_amount = 0;
textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser ); textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser );
@ -1199,12 +1194,6 @@ void Texture_Draw( TextureBrowser& textureBrowser ){
//qglFinish(); //qglFinish();
} }
void TextureBrowser_queueDraw( TextureBrowser& textureBrowser ){
if ( textureBrowser.m_gl_widget != 0 ) {
gtk_widget_queue_draw( textureBrowser.m_gl_widget );
}
}
void TextureBrowser_setScale( TextureBrowser& textureBrowser, std::size_t scale ){ void TextureBrowser_setScale( TextureBrowser& textureBrowser, std::size_t scale ){
textureBrowser.m_textureScale = scale; textureBrowser.m_textureScale = scale;
@ -1728,7 +1717,7 @@ GtkMenuItem* TextureBrowser_constructViewMenu( GtkMenu* menu ){
return textures_menu_item; return textures_menu_item;
} }
void Popup_View_Menu( GtkWidget *widget, GtkMenu *menu ){ void Popup_View_Menu( GtkMenu *menu ){
gtk_menu_popup( menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time() ); gtk_menu_popup( menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time() );
} }
#if 0 #if 0
@ -2089,26 +2078,19 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
GtkToolbar* toolbar; GtkToolbar* toolbar;
{ // menu bar { // menu bar
GtkWidget* menu_view = gtk_menu_new(); GtkMenu* menu_view = GTK_MENU( gtk_menu_new() );
TextureBrowser_constructViewMenu( GTK_MENU( menu_view ) ); TextureBrowser_constructViewMenu( menu_view );
gtk_menu_set_title( GTK_MENU( menu_view ), "View" ); gtk_menu_set_title( menu_view, "View" );
toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 );
//view menu button //view menu button
GtkButton* button = GTK_BUTTON( gtk_button_new() ); GtkButton* button = toolbar_append_button( toolbar, "View", "texbro_view.png", PointerCaller<GtkMenu, Popup_View_Menu>( menu_view ) );
button_set_icon( button, "texbro_view.png" ); gtk_widget_set_size_request( GTK_WIDGET( button ), 24, 24 ); // 24 is minimal here for non scissored icon with any gtk theme
gtk_widget_show( GTK_WIDGET( button ) );
gtk_button_set_relief( button, GTK_RELIEF_NONE );
gtk_widget_set_size_request( GTK_WIDGET( button ), 24, 24 );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT );
gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "View", "", 0, 0, 0 );
g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_view );
//show detached menu over floating tex bro //show detached menu over floating tex bro
gtk_menu_attach_to_widget( GTK_MENU( menu_view ), GTK_WIDGET( button ), NULL ); gtk_menu_attach_to_widget( menu_view, GTK_WIDGET( button ), NULL );
button = toolbar_append_button( toolbar, "Find / Replace...", "texbro_gtk-find-and-replace.png", "FindReplaceTextures" ); button = toolbar_append_button( toolbar, "Find / Replace...", "texbro_gtk-find-and-replace.png", "FindReplaceTextures" );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 ); gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
@ -2118,15 +2100,14 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
gtk_widget_show( GTK_WIDGET( toolbar ) ); gtk_widget_show( GTK_WIDGET( toolbar ) );
} }
{ // filter entry { // filter entry
GtkWidget* entry = gtk_entry_new(); GtkWidget* entry = g_TextureBrowser.m_filter_entry = gtk_entry_new();
gtk_widget_set_size_request( GTK_WIDGET( entry ), 64, -1 ); gtk_widget_set_size_request( entry, 64, -1 );
gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( entry ), FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 );
gtk_entry_set_icon_from_stock( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR ); gtk_entry_set_icon_from_stock( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR );
gtk_entry_set_icon_sensitive( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, FALSE ); gtk_entry_set_icon_sensitive( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, FALSE );
TextureBrowser_filterSetModeIcon( GTK_ENTRY( entry ) ); TextureBrowser_filterSetModeIcon( GTK_ENTRY( entry ) );
gtk_entry_set_icon_tooltip_text( GTK_ENTRY( entry ), GTK_ENTRY_ICON_PRIMARY, "toggle match mode ( start / any position )" ); gtk_entry_set_icon_tooltip_text( GTK_ENTRY( entry ), GTK_ENTRY_ICON_PRIMARY, "toggle match mode ( start / any position )" );
gtk_widget_show( entry ); gtk_widget_show( entry );
g_TextureBrowser.m_filter_entry = entry;
g_signal_connect( G_OBJECT( entry ), "changed", G_CALLBACK( TextureBrowser_filterChanged ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( entry ), "changed", G_CALLBACK( TextureBrowser_filterChanged ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( entry ), "icon-press", G_CALLBACK( TextureBrowser_filterIconPress ), 0 ); g_signal_connect( G_OBJECT( entry ), "icon-press", G_CALLBACK( TextureBrowser_filterIconPress ), 0 );
g_signal_connect( G_OBJECT( entry ), "key_press_event", G_CALLBACK( TextureBrowser_filterKeypress ), 0 ); g_signal_connect( G_OBJECT( entry ), "key_press_event", G_CALLBACK( TextureBrowser_filterKeypress ), 0 );
@ -2134,52 +2115,51 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
g_signal_connect( G_OBJECT( entry ), "leave_notify_event", G_CALLBACK( TextureBrowser_filterEntryUnfocus ), 0 ); g_signal_connect( G_OBJECT( entry ), "leave_notify_event", G_CALLBACK( TextureBrowser_filterEntryUnfocus ), 0 );
} }
{ // Texture TreeView { // Texture TreeView
g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL ); GtkWidget* w = g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL );
gtk_container_set_border_width( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tree ), 0 ); gtk_container_set_border_width( GTK_CONTAINER( w ), 0 );
// vertical only scrolling for treeview // vertical only scrolling for treeview
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tree ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS );
gtk_widget_show( g_TextureBrowser.m_scr_win_tree ); gtk_widget_show( w );
TextureBrowser_createTreeViewTree(); 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( w ), g_TextureBrowser.m_treeViewTree );
gtk_container_add( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tree ), g_TextureBrowser.m_treeViewTree ); //GtkTreeView has native scrolling support; should not be used with the GtkViewport proxy. gtk_container_add( GTK_CONTAINER( w ), g_TextureBrowser.m_treeViewTree ); //GtkTreeView has native scrolling support; should not be used with the GtkViewport proxy.
gtk_widget_show( GTK_WIDGET( g_TextureBrowser.m_treeViewTree ) ); gtk_widget_show( g_TextureBrowser.m_treeViewTree );
} }
{ // gl_widget scrollbar { // gl_widget scrollbar
GtkWidget* w = gtk_vscrollbar_new( GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 0, 1, 1, 0 ) ) ); GtkWidget* w = g_TextureBrowser.m_texture_scroll = gtk_vscrollbar_new( GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 0, 1, 1, 0 ) ) );
gtk_table_attach( GTK_TABLE( table ), w, 2, 3, 1, 2, GTK_SHRINK, GTK_FILL, 0, 0 ); gtk_table_attach( GTK_TABLE( table ), w, 2, 3, 1, 2, GTK_SHRINK, GTK_FILL, 0, 0 );
gtk_widget_show( w ); gtk_widget_show( w );
g_TextureBrowser.m_texture_scroll = w;
GtkAdjustment *vadjustment = gtk_range_get_adjustment( GTK_RANGE( g_TextureBrowser.m_texture_scroll ) ); GtkAdjustment *vadjustment = gtk_range_get_adjustment( GTK_RANGE( w ) );
g_signal_connect( G_OBJECT( vadjustment ), "value_changed", G_CALLBACK( TextureBrowser_verticalScroll ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( vadjustment ), "value_changed", G_CALLBACK( TextureBrowser_verticalScroll ), &g_TextureBrowser );
widget_set_visible( g_TextureBrowser.m_texture_scroll, g_TextureBrowser.m_showTextureScrollbar ); widget_set_visible( w, g_TextureBrowser.m_showTextureScrollbar );
} }
{ // gl_widget { // gl_widget
#if NV_DRIVER_GAMMA_BUG #if NV_DRIVER_GAMMA_BUG
g_TextureBrowser.m_gl_widget = glwidget_new( TRUE ); GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( TRUE );
#else #else
g_TextureBrowser.m_gl_widget = glwidget_new( FALSE ); GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( FALSE );
#endif #endif
gtk_widget_ref( g_TextureBrowser.m_gl_widget ); gtk_widget_ref( w );
gtk_widget_set_events( g_TextureBrowser.m_gl_widget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK ); gtk_widget_set_events( w, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK );
GTK_WIDGET_SET_FLAGS( g_TextureBrowser.m_gl_widget, GTK_CAN_FOCUS ); GTK_WIDGET_SET_FLAGS( w, GTK_CAN_FOCUS );
gtk_table_attach_defaults( GTK_TABLE( table ), g_TextureBrowser.m_gl_widget, 1, 2, 1, 2 ); gtk_table_attach_defaults( GTK_TABLE( table ), w, 1, 2, 1, 2 );
gtk_widget_show( g_TextureBrowser.m_gl_widget ); gtk_widget_show( w );
g_TextureBrowser.m_sizeHandler = g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "size_allocate", G_CALLBACK( TextureBrowser_size_allocate ), &g_TextureBrowser ); g_TextureBrowser.m_sizeHandler = g_signal_connect( G_OBJECT( w ), "size_allocate", G_CALLBACK( TextureBrowser_size_allocate ), &g_TextureBrowser );
g_TextureBrowser.m_exposeHandler = g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "expose_event", G_CALLBACK( TextureBrowser_expose ), &g_TextureBrowser ); g_TextureBrowser.m_exposeHandler = g_signal_connect( G_OBJECT( w ), "expose_event", G_CALLBACK( TextureBrowser_expose ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "button_press_event", G_CALLBACK( TextureBrowser_button_press ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( w ), "button_press_event", G_CALLBACK( TextureBrowser_button_press ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "button_release_event", G_CALLBACK( TextureBrowser_button_release ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( w ), "button_release_event", G_CALLBACK( TextureBrowser_button_release ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "motion_notify_event", G_CALLBACK( TextureBrowser_motion ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( w ), "motion_notify_event", G_CALLBACK( TextureBrowser_motion ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( w ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser );
} }
// tag stuff // tag stuff
@ -2193,26 +2173,15 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
TextureBrowser_buildTagList(); TextureBrowser_buildTagList();
} }
{ // tag menu bar { // tag menu bar
GtkWidget* menu_tags = gtk_menu_new(); GtkMenu* menu_tags = GTK_MENU( gtk_menu_new() );
gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" ); gtk_menu_set_title( menu_tags, "Tags" );
TextureBrowser_constructTagsMenu( GTK_MENU( menu_tags ) ); TextureBrowser_constructTagsMenu( menu_tags );
GtkButton* button = GTK_BUTTON( gtk_button_new() ); GtkButton* button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png", PointerCaller<GtkMenu, Popup_View_Menu>( menu_tags ) );
button_set_icon( button, "texbro_tags.png" );
// GtkWidget *label = gtk_label_new ( ">t" );
// gtk_container_add( GTK_CONTAINER( button ), label );
// gtk_widget_show( label );
gtk_widget_show( GTK_WIDGET( button ) );
gtk_button_set_relief( button, GTK_RELIEF_NONE );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 ); gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT );
gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "Tags", "", 0, 0, 0 );
g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags );
//show detached menu over floating tex bro and main wnd... //show detached menu over floating tex bro and main wnd...
gtk_menu_attach_to_widget( GTK_MENU( menu_tags ), GTK_WIDGET( button ), NULL ); gtk_menu_attach_to_widget( menu_tags, GTK_WIDGET( button ), NULL );
} }
{ // Tag TreeView { // Tag TreeView
g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new( NULL, NULL ); g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new( NULL, NULL );

View File

@ -1077,7 +1077,7 @@ void XYWnd::Move_Begin(){
void XYWnd::Move_End(){ void XYWnd::Move_End(){
m_move_started = false; m_move_started = false;
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false ); g_xywnd_freezePointer.unfreeze_pointer( false );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_move_focusOut ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_move_focusOut );
} }
@ -1127,7 +1127,7 @@ void XYWnd::Zoom_Begin( int x, int y ){
void XYWnd::Zoom_End(){ void XYWnd::Zoom_End(){
m_zoom_started = false; m_zoom_started = false;
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false ); g_xywnd_freezePointer.unfreeze_pointer( false );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_zoom_focusOut ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_zoom_focusOut );
} }