]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/xywindow.cpp
Remove <gtk/gtk.h> from most of radiant/*
[xonotic/netradiant.git] / radiant / xywindow.cpp
index b094b7744d5f034f57216469357dc65d59068734..86b3657291f5720bcbeb2b503ee90b740e03f1a7 100644 (file)
@@ -39,8 +39,8 @@
 #include "image.h"
 #include "gtkutil/messagebox.h"
 
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmenuitem.h>
+#include <uilib/uilib.h>
+#include <gdk/gdkkeysyms.h>
 
 #include "generic/callback.h"
 #include "string/string.h"
@@ -536,7 +536,7 @@ VIEWTYPE GlobalXYWnd_getCurrentViewType(){
 
 bool g_bCrossHairs = false;
 
-GtkMenu* XYWnd::m_mnuDrop = 0;
+ui::Menu XYWnd::m_mnuDrop{nullptr};
 
 // this is disabled, and broken
 // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=394
@@ -548,7 +548,7 @@ void WXY_Print(){
        unsigned char* img;
        const char* filename;
 
-       filename = file_dialog( GTK_WIDGET( MainFrame_getWindow() ), FALSE, "Save Image", 0, FILTER_BMP );
+       filename = ui::file_dialog( GTK_WIDGET( MainFrame_getWindow() ), FALSE, "Save Image", 0, FILTER_BMP );
        if ( !filename ) {
                return;
        }
@@ -705,12 +705,12 @@ bool XYWnd::chaseMouseMotion( int pointx, int pointy ){
 Shader* XYWnd::m_state_selected = 0;
 
 void xy_update_xor_rectangle( XYWnd& self, rect_t area ){
-       if ( GTK_WIDGET_VISIBLE( self.GetWidget() ) ) {
+       if ( gtk_widget_get_visible( self.GetWidget() ) ) {
                self.m_XORRectangle.set( rectangle_from_area( area.min, area.max, self.Width(), self.Height() ) );
        }
 }
 
-gboolean xywnd_button_press( GtkWidget* widget, GdkEventButton* event, XYWnd* xywnd ){
+gboolean xywnd_button_press( ui::Widget widget, GdkEventButton* event, XYWnd* xywnd ){
        if ( event->type == GDK_BUTTON_PRESS ) {
                g_pParentWnd->SetActiveXY( xywnd );
 
@@ -721,7 +721,7 @@ gboolean xywnd_button_press( GtkWidget* widget, GdkEventButton* event, XYWnd* xy
        return FALSE;
 }
 
-gboolean xywnd_button_release( GtkWidget* widget, GdkEventButton* event, XYWnd* xywnd ){
+gboolean xywnd_button_release( ui::Widget widget, GdkEventButton* event, XYWnd* xywnd ){
        if ( event->type == GDK_BUTTON_RELEASE ) {
                xywnd->XY_MouseUp( static_cast<int>( event->x ), static_cast<int>( event->y ), buttons_for_event_button( event ) );
 
@@ -730,7 +730,7 @@ gboolean xywnd_button_release( GtkWidget* widget, GdkEventButton* event, XYWnd*
        return FALSE;
 }
 
-gboolean xywnd_focus_in( GtkWidget* widget, GdkEventFocus* event, XYWnd* xywnd ){
+gboolean xywnd_focus_in( ui::Widget widget, GdkEventFocus* event, XYWnd* xywnd ){
        if ( event->type == GDK_FOCUS_CHANGE ) {
                if ( event->in ) {
                        g_pParentWnd->SetActiveXY( xywnd );
@@ -746,7 +746,7 @@ void xywnd_motion( gdouble x, gdouble y, guint state, void* data ){
        reinterpret_cast<XYWnd*>( data )->XY_MouseMoved( static_cast<int>( x ), static_cast<int>( y ), buttons_for_state( state ) );
 }
 
-gboolean xywnd_wheel_scroll( GtkWidget* widget, GdkEventScroll* event, XYWnd* xywnd ){
+gboolean xywnd_wheel_scroll( ui::Widget widget, GdkEventScroll* event, XYWnd* xywnd ){
        if ( event->direction == GDK_SCROLL_UP ) {
                XYWnd_ZoomIn( xywnd );
        }
@@ -756,7 +756,7 @@ gboolean xywnd_wheel_scroll( GtkWidget* widget, GdkEventScroll* event, XYWnd* xy
        return FALSE;
 }
 
-gboolean xywnd_size_allocate( GtkWidget* widget, GtkAllocation* allocation, XYWnd* xywnd ){
+gboolean xywnd_size_allocate( ui::Widget widget, GtkAllocation* allocation, XYWnd* xywnd ){
        xywnd->m_nWidth = allocation->width;
        xywnd->m_nHeight = allocation->height;
        xywnd->updateProjection();
@@ -764,7 +764,7 @@ gboolean xywnd_size_allocate( GtkWidget* widget, GtkAllocation* allocation, XYWn
        return FALSE;
 }
 
-gboolean xywnd_expose( GtkWidget* widget, GdkEventExpose* event, XYWnd* xywnd ){
+gboolean xywnd_expose( ui::Widget widget, GdkEventExpose* event, XYWnd* xywnd ){
        if ( glwidget_make_current( xywnd->GetWidget() ) != FALSE ) {
                if ( Map_Valid( g_map ) && ScreenUpdates_Enabled() ) {
                        GlobalOpenGL_debugAssertNoErrors();
@@ -818,7 +818,7 @@ XYWnd::XYWnd() :
 
        m_entityCreate = false;
 
-       m_mnuDrop = 0;
+       m_mnuDrop = ui::Menu{nullptr};
 
        GlobalWindowObservers_add( m_window_observer );
        GlobalWindowObservers_connectWidget( m_gl_widget );
@@ -826,10 +826,10 @@ XYWnd::XYWnd() :
        m_window_observer->setRectangleDrawCallback( ReferenceCaller1<XYWnd, rect_t, xy_update_xor_rectangle>( *this ) );
        m_window_observer->setView( m_view );
 
-       gtk_widget_ref( m_gl_widget );
+       g_object_ref( m_gl_widget );
 
        gtk_widget_set_events( 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( m_gl_widget, GTK_CAN_FOCUS );
+       gtk_widget_set_can_focus( m_gl_widget, true );
 
        m_sizeHandler = g_signal_connect( G_OBJECT( m_gl_widget ), "size_allocate", G_CALLBACK( xywnd_size_allocate ), this );
        m_exposeHandler = g_signal_connect( G_OBJECT( m_gl_widget ), "expose_event", G_CALLBACK( xywnd_expose ), this );
@@ -857,15 +857,15 @@ XYWnd::XYWnd() :
 XYWnd::~XYWnd(){
        onDestroyed();
 
-       if ( m_mnuDrop != 0 ) {
+       if ( m_mnuDrop ) {
                gtk_widget_destroy( GTK_WIDGET( m_mnuDrop ) );
-               m_mnuDrop = 0;
+               m_mnuDrop = ui::Menu{nullptr};
        }
 
        g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_sizeHandler );
        g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_exposeHandler );
 
-       gtk_widget_unref( m_gl_widget );
+       g_object_unref( m_gl_widget );
 
        m_window_observer->release();
 }
@@ -944,12 +944,12 @@ void XYWnd::Clipper_Crosshair_OnMouseMoved( int x, int y ){
        if ( ClipMode() && GlobalClipPoints_Find( mousePosition, (VIEWTYPE)m_viewType, m_fScale ) != 0 ) {
                GdkCursor *cursor;
                cursor = gdk_cursor_new( GDK_CROSSHAIR );
-               gdk_window_set_cursor( m_gl_widget->window, cursor );
+               gdk_window_set_cursor( gtk_widget_get_window(m_gl_widget), cursor );
                gdk_cursor_unref( cursor );
        }
        else
        {
-               gdk_window_set_cursor( m_gl_widget->window, 0 );
+               gdk_window_set_cursor( gtk_widget_get_window(m_gl_widget), 0 );
        }
 }
 
@@ -1058,15 +1058,15 @@ void XYWnd::NewBrushDrag( int x, int y ){
                                                                "textures/common/caulk" : TextureBrowser_GetSelectedShader( GlobalTextureBrowser() ) );
 }
 
-void entitycreate_activated( GtkWidget* item ){
+void entitycreate_activated( ui::Widget item ){
        scene::Node* world_node = Map_FindWorldspawn( g_map );
-       const char* entity_name = gtk_label_get_text( GTK_LABEL( GTK_BIN( item )->child ) );
+       const char* entity_name = gtk_label_get_text( GTK_LABEL( gtk_bin_get_child(GTK_BIN( item )) ) );
 
        if ( !( world_node && string_equal( entity_name, "worldspawn" ) ) ) {
                g_pParentWnd->ActiveXY()->OnEntityCreate( entity_name );
        }
        else {
-               GlobalRadiant().m_pfnMessageBox( GTK_WIDGET( MainFrame_getWindow() ), "There's already a worldspawn in your map!"
+               GlobalRadiant().m_pfnMessageBox( MainFrame_getWindow(), "There's already a worldspawn in your map!"
                                                                                                                                                          "",
                                                                                 "Info",
                                                                                 eMB_OK,
@@ -1074,21 +1074,21 @@ void entitycreate_activated( GtkWidget* item ){
        }
 }
 
-void EntityClassMenu_addItem( GtkMenu* menu, const char* name ){
-       GtkMenuItem* item = GTK_MENU_ITEM( gtk_menu_item_new_with_label( name ) );
+void EntityClassMenu_addItem( ui::Menu menu, const char* name ){
+       auto item = ui::MenuItem( name );
        g_signal_connect( G_OBJECT( item ), "activate", G_CALLBACK( entitycreate_activated ), item );
-       gtk_widget_show( GTK_WIDGET( item ) );
+       item.show();
        menu_add_item( menu, item );
 }
 
 class EntityClassMenuInserter : public EntityClassVisitor
 {
-typedef std::pair<GtkMenu*, CopiedString> MenuPair;
+typedef std::pair<ui::Menu, CopiedString> MenuPair;
 typedef std::vector<MenuPair> MenuStack;
 MenuStack m_stack;
 CopiedString m_previous;
 public:
-EntityClassMenuInserter( GtkMenu* menu ){
+EntityClassMenuInserter( ui::Menu menu ){
        m_stack.reserve( 2 );
        m_stack.push_back( MenuPair( menu, "" ) );
 }
@@ -1105,11 +1105,11 @@ void visit( EntityClass* e ){
        m_previous = e->name();
 }
 void pushMenu( const CopiedString& name ){
-       GtkMenuItem* item = GTK_MENU_ITEM( gtk_menu_item_new_with_label( name.c_str() ) );
-       gtk_widget_show( GTK_WIDGET( item ) );
+       auto item = ui::MenuItem( name.c_str() );
+       item.show();
        container_add_widget( GTK_CONTAINER( m_stack.back().first ), GTK_WIDGET( item ) );
 
-       GtkMenu* submenu = GTK_MENU( gtk_menu_new() );
+       auto submenu = ui::Menu();
        gtk_menu_item_set_submenu( item, GTK_WIDGET( submenu ) );
 
        m_stack.push_back( MenuPair( submenu, name ) );
@@ -1151,8 +1151,8 @@ void XYWnd::OnContextMenu(){
                return;
        }
 
-       if ( m_mnuDrop == 0 ) { // first time, load it up
-               GtkMenu* menu = m_mnuDrop = GTK_MENU( gtk_menu_new() );
+       if ( !m_mnuDrop ) { // first time, load it up
+               auto menu = m_mnuDrop = ui::Menu();
 
                EntityClassMenuInserter inserter( menu );
                GlobalEntityClassManager().forEach( inserter );
@@ -1172,7 +1172,7 @@ void XYWnd_moveDelta( int x, int y, unsigned int state, void* data ){
        reinterpret_cast<XYWnd*>( data )->Scroll( -x, y );
 }
 
-gboolean XYWnd_Move_focusOut( GtkWidget* widget, GdkEventFocus* event, XYWnd* xywnd ){
+gboolean XYWnd_Move_focusOut( ui::Widget widget, GdkEventFocus* event, XYWnd* xywnd ){
        xywnd->Move_End();
        return FALSE;
 }
@@ -1182,13 +1182,13 @@ void XYWnd::Move_Begin(){
                Move_End();
        }
        m_move_started = true;
-       g_xywnd_freezePointer.freeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), XYWnd_moveDelta, this );
+       g_xywnd_freezePointer.freeze_pointer( m_parent  ? m_parent : MainFrame_getWindow(), XYWnd_moveDelta, this );
        m_move_focusOut = g_signal_connect( G_OBJECT( m_gl_widget ), "focus_out_event", G_CALLBACK( XYWnd_Move_focusOut ), this );
 }
 
 void XYWnd::Move_End(){
        m_move_started = false;
-       g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow() );
+       g_xywnd_freezePointer.unfreeze_pointer( m_parent ? m_parent : MainFrame_getWindow() );
        g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_move_focusOut );
 }
 
@@ -1217,7 +1217,7 @@ void XYWnd_zoomDelta( int x, int y, unsigned int state, void* data ){
        }
 }
 
-gboolean XYWnd_Zoom_focusOut( GtkWidget* widget, GdkEventFocus* event, XYWnd* xywnd ){
+gboolean XYWnd_Zoom_focusOut( ui::Widget widget, GdkEventFocus* event, XYWnd* xywnd ){
        xywnd->Zoom_End();
        return FALSE;
 }
@@ -1228,13 +1228,13 @@ void XYWnd::Zoom_Begin(){
        }
        m_zoom_started = true;
        g_dragZoom = 0;
-       g_xywnd_freezePointer.freeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), XYWnd_zoomDelta, this );
+       g_xywnd_freezePointer.freeze_pointer( m_parent ? m_parent : MainFrame_getWindow(), XYWnd_zoomDelta, this );
        m_zoom_focusOut = g_signal_connect( G_OBJECT( m_gl_widget ), "focus_out_event", G_CALLBACK( XYWnd_Zoom_focusOut ), this );
 }
 
 void XYWnd::Zoom_End(){
        m_zoom_started = false;
-       g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow() );
+       g_xywnd_freezePointer.unfreeze_pointer( m_parent ? m_parent : MainFrame_getWindow() );
        g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_zoom_focusOut );
 }
 
@@ -1255,7 +1255,7 @@ void XYWnd::SetViewType( VIEWTYPE viewType ){
        m_viewType = viewType;
        updateModelview();
 
-       if ( m_parent != 0 ) {
+       if ( m_parent ) {
                gtk_window_set_title( m_parent, ViewType_getTitle( m_viewType ) );
        }
 }
@@ -1485,12 +1485,12 @@ void XYWnd::XY_DisableBackground( void ){
 void WXY_BackgroundSelect( void ){
        bool brushesSelected = Scene_countSelectedBrushes( GlobalSceneGraph() ) != 0;
        if ( !brushesSelected ) {
-               gtk_MessageBox( 0, "You have to select some brushes to get the bounding box for.\n",
-                                               "No selection", eMB_OK, eMB_ICONERROR );
+               ui::root.alert( "You have to select some brushes to get the bounding box for.\n",
+                                               "No selection", ui::alert_type::OK, ui::alert_icon::Error );
                return;
        }
 
-       const char *filename = file_dialog( GTK_WIDGET( MainFrame_getWindow() ), TRUE, "Background Image", NULL, NULL );
+       const char *filename = MainFrame_getWindow().file_dialog( TRUE, "Background Image", NULL, NULL );
        g_pParentWnd->ActiveXY()->XY_DisableBackground();
        if ( filename ) {
                g_pParentWnd->ActiveXY()->XY_LoadBackgroundImage( filename );
@@ -2537,20 +2537,20 @@ void ToggleShowGrid(){
 
 ToggleShown g_xy_top_shown( true );
 
-void XY_Top_Shown_Construct( GtkWindow* parent ){
-       g_xy_top_shown.connect( GTK_WIDGET( parent ) );
+void XY_Top_Shown_Construct( ui::Window parent ){
+       g_xy_top_shown.connect( parent );
 }
 
 ToggleShown g_yz_side_shown( false );
 
-void YZ_Side_Shown_Construct( GtkWindow* parent ){
-       g_yz_side_shown.connect( GTK_WIDGET( parent ) );
+void YZ_Side_Shown_Construct( ui::Window parent ){
+       g_yz_side_shown.connect( parent );
 }
 
 ToggleShown g_xz_front_shown( false );
 
-void XZ_Front_Shown_Construct( GtkWindow* parent ){
-       g_xz_front_shown.connect( GTK_WIDGET( parent ) );
+void XZ_Front_Shown_Construct( ui::Window parent ){
+       g_xz_front_shown.connect( parent );
 }
 
 
@@ -2566,9 +2566,9 @@ void realise(){
 }
 void unrealise(){
        if ( ++m_unrealised == 1 ) {
-               if ( XYWnd::m_mnuDrop != 0 ) {
+               if ( XYWnd::m_mnuDrop ) {
                        gtk_widget_destroy( GTK_WIDGET( XYWnd::m_mnuDrop ) );
-                       XYWnd::m_mnuDrop = 0;
+                       XYWnd::m_mnuDrop = ui::Menu(nullptr);
                }
        }
 }
@@ -2744,14 +2744,14 @@ void XYWindow_Construct(){
        GlobalToggles_insert( "ToggleView", ToggleShown::ToggleCaller( g_xy_top_shown ), ToggleItem::AddCallbackCaller( g_xy_top_shown.m_item ), Accelerator( 'V', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
        GlobalToggles_insert( "ToggleSideView", ToggleShown::ToggleCaller( g_yz_side_shown ), ToggleItem::AddCallbackCaller( g_yz_side_shown.m_item ) );
        GlobalToggles_insert( "ToggleFrontView", ToggleShown::ToggleCaller( g_xz_front_shown ), ToggleItem::AddCallbackCaller( g_xz_front_shown.m_item ) );
-       GlobalCommands_insert( "NextView", FreeCaller<XY_Next>(), Accelerator( GDK_Tab, (GdkModifierType)GDK_CONTROL_MASK ) );
-       GlobalCommands_insert( "ZoomIn", FreeCaller<XY_ZoomIn>(), Accelerator( GDK_Delete ) );
-       GlobalCommands_insert( "ZoomOut", FreeCaller<XY_ZoomOut>(), Accelerator( GDK_Insert ) );
-       GlobalCommands_insert( "ViewTop", FreeCaller<XY_Top>(), Accelerator( GDK_KP_Home ) );
-       GlobalCommands_insert( "ViewSide", FreeCaller<XY_Side>(), Accelerator( GDK_KP_Page_Down ) );
-       GlobalCommands_insert( "ViewFront", FreeCaller<XY_Front>(), Accelerator( GDK_KP_End ) );
+       GlobalCommands_insert( "NextView", FreeCaller<XY_Next>(), Accelerator( GDK_KEY_Tab, (GdkModifierType)GDK_CONTROL_MASK ) ); // fixme: doesn't show its shortcut
+       GlobalCommands_insert( "ZoomIn", FreeCaller<XY_ZoomIn>(), Accelerator( GDK_KEY_Delete ) );
+       GlobalCommands_insert( "ZoomOut", FreeCaller<XY_ZoomOut>(), Accelerator( GDK_KEY_Insert ) );
+       GlobalCommands_insert( "ViewTop", FreeCaller<XY_Top>(), Accelerator( GDK_KEY_KP_Home ) );
+       GlobalCommands_insert( "ViewSide", FreeCaller<XY_Side>(), Accelerator( GDK_KEY_KP_Page_Down ) );
+       GlobalCommands_insert( "ViewFront", FreeCaller<XY_Front>(), Accelerator( GDK_KEY_KP_End ) );
        GlobalCommands_insert( "Zoom100", FreeCaller<XY_Zoom100>() );
-       GlobalCommands_insert( "CenterXYView", FreeCaller<XY_Focus>(), Accelerator( GDK_Tab, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
+       GlobalCommands_insert( "CenterXYView", FreeCaller<XY_Focus>(), Accelerator( GDK_KEY_Tab, (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) );
 
        GlobalPreferenceSystem().registerPreference( "ClipCaulk", BoolImportStringCaller( g_clip_useCaulk ), BoolExportStringCaller( g_clip_useCaulk ) );