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_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_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_SMOOTH = 1 << 10; // glShadeModel
const unsigned int RENDER_FOG = 1 << 11; // glEnable(GL_FOG)

View File

@ -87,15 +87,16 @@ MotionDeltaFunction m_function;
void* m_data;
static gboolean deferred_motion( gpointer data ){
reinterpret_cast<DeferredMotionDelta*>( data )->m_function(
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_x,
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_y,
reinterpret_cast<DeferredMotionDelta*>( data )->m_state,
reinterpret_cast<DeferredMotionDelta*>( data )->m_data
DeferredMotionDelta* self = reinterpret_cast<DeferredMotionDelta*>( data );
self->m_function(
self->m_delta_x,
self->m_delta_y,
self->m_state,
self->m_data
);
reinterpret_cast<DeferredMotionDelta*>( data )->m_motion_handler = 0;
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_x = 0;
reinterpret_cast<DeferredMotionDelta*>( data )->m_delta_y = 0;
self->m_motion_handler = 0;
self->m_delta_x = 0;
self->m_delta_y = 0;
return FALSE;
}
public:
@ -121,7 +122,8 @@ class FreezePointer
{
unsigned int handle_motion;
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 );
MotionDeltaFunction m_function;
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 ){
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
| GDK_POINTER_MOTION_HINT_MASK
@ -178,19 +180,18 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
GdkCursor* cursor = gdk_cursor_new( GDK_BLANK_CURSOR );
//GdkCursor* cursor = create_blank_cursor();
//GdkGrabStatus status =
/* fixes cursor runaways during srsly quick drags in camera
drags with pressed buttons have no problem at all w/o this */
/* fixes cursor runaways during srsly quick drags in camera
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_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 );
m_weedjet = widget;
gdk_cursor_unref( cursor );
Sys_GetCursorPos( window, &recorded_x, &recorded_y );
/* using center for tracking for max safety */
/* using center for tracking for max safety */
gdk_window_get_origin( widget->window, &center_x, &center_y );
center_y += widget->allocation.height / 2;
center_x += widget->allocation.width / 2;
@ -200,28 +201,33 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
last_x = center_x;
last_y = center_y;
m_widget = widget;
m_window = window;
m_function = function;
m_data = data;
handle_motion = g_signal_connect( G_OBJECT( window ), "motion_notify_event", G_CALLBACK( motion_delta ), this );
}
void unfreeze_pointer( GtkWindow* window, bool centerize ){
g_signal_handler_disconnect( G_OBJECT( window ), handle_motion );
void unfreeze_pointer( bool centerize ){
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_data = 0;
if( centerize ){
Sys_SetCursorPos( window, center_x, center_y );
Sys_SetCursorPos( m_window, center_x, center_y );
}
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 );
if( m_weedjet )
gtk_grab_remove( m_weedjet );
gtk_grab_remove( m_widget );
}
};
@ -238,12 +244,13 @@ ValueChangedFunction m_function;
void* m_data;
static gboolean deferred_value_changed( gpointer data ){
reinterpret_cast<DeferredAdjustment*>( data )->m_function(
reinterpret_cast<DeferredAdjustment*>( data )->m_data,
reinterpret_cast<DeferredAdjustment*>( data )->m_value
DeferredAdjustment* self = reinterpret_cast<DeferredAdjustment*>( data );
self->m_function(
self->m_data,
self->m_value
);
reinterpret_cast<DeferredAdjustment*>( data )->m_handler = 0;
reinterpret_cast<DeferredAdjustment*>( data )->m_value = 0;
self->m_handler = 0;
self->m_value = 0;
return FALSE;
}
public:

View File

@ -1856,7 +1856,7 @@ void CamWnd::DisableFreeMove(){
CamWnd_Remove_Handlers_FreeMove( *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 );
CamWnd_Update( *this );

View File

@ -432,6 +432,8 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
entitypath.push( makeReference( node.get() ) );
scene::Instance& instance = findInstance( entitypath );
Entity* entity = Node_getEntity( node );
if ( entityClass->fixedsize || ( isModel && !brushesSelected ) ) {
//Select_Delete();
@ -449,7 +451,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
else
{
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 );
@ -470,7 +472,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){
g_iLastLightIntensity = intensity;
char buf[30];
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;
char buf[10];
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
AABB bounds( Doom3Light_getBounds( workzone ) );
StringOutputStream key( 64 );
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 << 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 ) {
const char* model = misc_model_dialog( GTK_WIDGET( MainFrame_getWindow() ) );
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() ) {
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,49 +3152,47 @@ void MainFrame::Create(){
gtk_widget_show( GTK_WIDGET( window ) );
if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft ) {
GtkWidget* hsplit = gtk_hpaned_new();
m_hSplit = hsplit;
gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 );
gtk_widget_show( hsplit );
{
GtkWidget* hsplit = gtk_hpaned_new();
m_hSplit = hsplit;
gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 );
gtk_widget_show( hsplit );
GtkWidget* vsplit = gtk_vpaned_new();
gtk_widget_show( vsplit );
m_vSplit = vsplit;
GtkWidget* vsplit2 = gtk_vpaned_new();
gtk_widget_show( vsplit2 );
m_vSplit2 = vsplit2;
if ( CurrentStyle() == eRegular ){
gtk_paned_pack1( GTK_PANED( hsplit ), vsplit, TRUE, TRUE );
gtk_paned_pack2( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE );
}
else{
gtk_paned_pack2( GTK_PANED( hsplit ), vsplit, TRUE, TRUE );
gtk_paned_pack1( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE );
}
// console
GtkWidget* console_window = Console_constructWindow( window );
gtk_paned_pack2( GTK_PANED( vsplit ), console_window, TRUE, TRUE );
// xy
m_pXYWnd = new XYWnd();
m_pXYWnd->SetViewType( XY );
GtkWidget* xy_window = GTK_WIDGET( create_framed_widget( m_pXYWnd->GetWidget() ) );
gtk_paned_pack1( GTK_PANED( vsplit ), xy_window, TRUE, TRUE );
{
GtkWidget* vsplit = gtk_vpaned_new();
gtk_widget_show( vsplit );
m_vSplit = vsplit;
GtkWidget* vsplit2 = gtk_vpaned_new();
gtk_widget_show( vsplit2 );
m_vSplit2 = vsplit2;
if ( CurrentStyle() == eRegular ){
gtk_paned_pack1( GTK_PANED( hsplit ), vsplit, TRUE, TRUE );
gtk_paned_pack2( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE );
}
else{
gtk_paned_pack2( GTK_PANED( hsplit ), vsplit, TRUE, TRUE );
gtk_paned_pack1( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE );
}
// console
GtkWidget* console_window = Console_constructWindow( window );
gtk_paned_pack2( GTK_PANED( vsplit ), console_window, TRUE, TRUE );
// camera
m_pCamWnd = NewCamWnd();
GlobalCamera_setCamWnd( *m_pCamWnd );
CamWnd_setParent( *m_pCamWnd, window );
GtkFrame* camera_window = create_framed_widget( CamWnd_getWidget( *m_pCamWnd ) );
// xy
m_pXYWnd = new XYWnd();
m_pXYWnd->SetViewType( XY );
GtkWidget* xy_window = GTK_WIDGET( create_framed_widget( m_pXYWnd->GetWidget() ) );
gtk_paned_pack1( GTK_PANED( vsplit ), xy_window, TRUE, TRUE );
{
// camera
m_pCamWnd = NewCamWnd();
GlobalCamera_setCamWnd( *m_pCamWnd );
CamWnd_setParent( *m_pCamWnd, window );
GtkFrame* camera_window = create_framed_widget( CamWnd_getWidget( *m_pCamWnd ) );
gtk_paned_pack1( GTK_PANED( vsplit2 ), GTK_WIDGET( camera_window ), TRUE, TRUE );
gtk_paned_pack1( GTK_PANED( vsplit2 ), GTK_WIDGET( camera_window ), TRUE, TRUE );
// textures
GtkFrame* texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) );
// textures
GtkFrame* texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) );
gtk_paned_pack2( GTK_PANED( vsplit2 ), GTK_WIDGET( texture_window ), TRUE, TRUE );
}
gtk_paned_pack2( GTK_PANED( vsplit2 ), GTK_WIDGET( texture_window ), TRUE, TRUE );
}
}
}
@ -3277,13 +3281,6 @@ void MainFrame::Create(){
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_hSplit = 0;
m_vSplit2 = 0;
@ -3315,13 +3312,6 @@ void MainFrame::Create(){
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 );
{
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 );

View File

@ -718,7 +718,7 @@ void Map_ImportSelected( TextInputStream& in, const MapFormat& format ){
EBrushType brush_type = GlobalBrushCreator().getFormat();
format.readGraph( node, in, GlobalEntityCreator() );
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 );
}
Map_gatherNamespaced( node );

View File

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

View File

@ -68,6 +68,7 @@
#include "gtkutil/widget.h"
#include "gtkutil/glwidget.h"
#include "gtkutil/messagebox.h"
#include "gtkutil/toolbar.h"
#include "error.h"
#include "map.h"
@ -88,8 +89,6 @@
#include "preferences.h"
#include "commands.h"
void TextureBrowser_queueDraw( TextureBrowser& textureBrowser );
bool string_equal_start( const char* string, StringRange start ){
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 );
@ -259,11 +254,9 @@ bool m_hideNonShadersInCommon;
static bool wads;
// 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
W = (int)( tex->width * ( (float)m_textureScale / 100 ) );
H = (int)( tex->height * ( (float)m_textureScale / 100 ) );
if ( W < 1 ) W = 1;
if ( H < 1 ) H = 1;
// Don't use uniform size
W = std::max( std::size_t( 1 ), tex->width * m_textureScale / 100 );
H = std::max( std::size_t( 1 ), tex->height * m_textureScale / 100 );
if ( g_TextureBrowser_fixedSize ){
if ( W >= H ) {
@ -329,6 +322,12 @@ void ( *TextureBrowser_textureSelected )( const char* shader );
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* value = g_pGameDescription->getKeyValue( "common_shaders_name" );
if ( !string_empty( value ) ) {
@ -612,8 +611,6 @@ void TextureBrowser_addActiveShadersChangedCallback( const SignalHandler& handle
g_activeShadersChangedCallbacks.connectLast( handler );
}
void TextureBrowser_constructTreeStore();
class ShadersObserver : public ModuleObserver
{
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 ){
if( textureBrowser.m_move_started ){
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 ){
if( textureBrowser.m_move_started ){
TextureBrowser_Tracking_MouseUp( textureBrowser );
}
TextureBrowser_Tracking_MouseUp( textureBrowser );
textureBrowser.m_move_started = true;
textureBrowser.m_move_amount = 0;
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();
}
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 ){
textureBrowser.m_textureScale = scale;
@ -1728,7 +1717,7 @@ GtkMenuItem* TextureBrowser_constructViewMenu( GtkMenu* menu ){
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() );
}
#if 0
@ -2089,26 +2078,19 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
GtkToolbar* toolbar;
{ // menu bar
GtkWidget* menu_view = gtk_menu_new();
TextureBrowser_constructViewMenu( GTK_MENU( menu_view ) );
gtk_menu_set_title( GTK_MENU( menu_view ), "View" );
GtkMenu* menu_view = GTK_MENU( gtk_menu_new() );
TextureBrowser_constructViewMenu( menu_view );
gtk_menu_set_title( menu_view, "View" );
toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 );
//view menu button
GtkButton* button = GTK_BUTTON( gtk_button_new() );
button_set_icon( button, "texbro_view.png" );
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 );
GtkButton* button = toolbar_append_button( toolbar, "View", "texbro_view.png", PointerCaller<GtkMenu, Popup_View_Menu>( menu_view ) );
gtk_widget_set_size_request( GTK_WIDGET( button ), 24, 24 ); // 24 is minimal here for non scissored icon with any gtk theme
//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" );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
@ -2117,16 +2099,15 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
gtk_widget_show( GTK_WIDGET( toolbar ) );
}
{//filter entry
GtkWidget* entry = gtk_entry_new();
gtk_widget_set_size_request( GTK_WIDGET( entry ), 64, -1 );
gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( entry ), FALSE, FALSE, 0 );
{ // filter entry
GtkWidget* entry = g_TextureBrowser.m_filter_entry = gtk_entry_new();
gtk_widget_set_size_request( entry, 64, -1 );
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_sensitive( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, FALSE );
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_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 ), "icon-press", G_CALLBACK( TextureBrowser_filterIconPress ), 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 );
}
{ // Texture TreeView
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 );
GtkWidget* w = g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL );
gtk_container_set_border_width( GTK_CONTAINER( w ), 0 );
// 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();
//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 ), 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_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( w ), g_TextureBrowser.m_treeViewTree );
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( g_TextureBrowser.m_treeViewTree );
}
{ // 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_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 );
widget_set_visible( g_TextureBrowser.m_texture_scroll, g_TextureBrowser.m_showTextureScrollbar );
widget_set_visible( w, g_TextureBrowser.m_showTextureScrollbar );
}
{ // gl_widget
#if NV_DRIVER_GAMMA_BUG
g_TextureBrowser.m_gl_widget = glwidget_new( TRUE );
GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( TRUE );
#else
g_TextureBrowser.m_gl_widget = glwidget_new( FALSE );
GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( FALSE );
#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_FLAGS( g_TextureBrowser.m_gl_widget, GTK_CAN_FOCUS );
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( w, GTK_CAN_FOCUS );
gtk_table_attach_defaults( GTK_TABLE( table ), g_TextureBrowser.m_gl_widget, 1, 2, 1, 2 );
gtk_widget_show( g_TextureBrowser.m_gl_widget );
gtk_table_attach_defaults( GTK_TABLE( table ), w, 1, 2, 1, 2 );
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_exposeHandler = g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "expose_event", G_CALLBACK( TextureBrowser_expose ), &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( 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( g_TextureBrowser.m_gl_widget ), "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( g_TextureBrowser.m_gl_widget ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( w ), "button_press_event", G_CALLBACK( TextureBrowser_button_press ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( w ), "button_release_event", G_CALLBACK( TextureBrowser_button_release ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( w ), "motion_notify_event", G_CALLBACK( TextureBrowser_motion ), &g_TextureBrowser );
g_signal_connect( G_OBJECT( w ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser );
}
// tag stuff
@ -2193,26 +2173,15 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
TextureBrowser_buildTagList();
}
{ // tag menu bar
GtkWidget* menu_tags = gtk_menu_new();
gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" );
TextureBrowser_constructTagsMenu( GTK_MENU( menu_tags ) );
GtkMenu* menu_tags = GTK_MENU( gtk_menu_new() );
gtk_menu_set_title( menu_tags, "Tags" );
TextureBrowser_constructTagsMenu( menu_tags );
GtkButton* button = GTK_BUTTON( gtk_button_new() );
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 );
GtkButton* button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png", PointerCaller<GtkMenu, Popup_View_Menu>( menu_tags ) );
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...
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
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(){
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 );
}
@ -1127,7 +1127,7 @@ void XYWnd::Zoom_Begin( int x, int y ){
void XYWnd::Zoom_End(){
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 );
}