Add an option to build against GTK+ 3

Armin Burgmeier 2010-09-22 17:11:19 +02:00
parent 537fdcba66
commit bd2f63bf1d
18 changed files with 123 additions and 81 deletions

View File

@ -41,9 +41,11 @@ endif()
if(UNIX AND NOT USE_SDL_MAINLOOP)
option(USE_X11 "Use X11 to create windows etc." ON)
option(USE_GTK "Use GTK for the developer mode" ON)
option(USE_GTK3 "Use GTK3 instead of GTK2" OFF)
else()
SET(USE_X11 OFF)
SET(USE_GTK OFF)
SET(USE_GTK3 OFF)
endif()
if(NOT USE_GL AND NOT USE_DIRECTX)
message(STATUS "No graphics display enabled; building dedicated server")
@ -707,6 +709,7 @@ macro(FINDLIB lib)
find_library(${ARGV})
mark_as_advanced(${lib})
endmacro(FINDLIB)
# isilkor 09-05-29: Don't use FindOpenSSL, because that wants to link to ssleay
FINDLIB(OPENSSL_LIBRARIES NAMES crypto libeay32)
FIND_PATH(OPENSSL_INCLUDE_DIR NAMES openssl/sha.h)
@ -745,11 +748,29 @@ endif()
############################################################################
# Generate output files
############################################################################
# Set GTK link directory. This needs to be done before add_executable,
# otherwise the path is not used for linking clonk
if(USE_GTK)
include(FindPkgConfig)
if (PKG_CONFIG_FOUND)
if (USE_GTK3)
pkg_check_modules(GTK glib-2.0>=2.4 gtk+-3.0)
else()
pkg_check_modules(GTK glib-2.0>=2.4 gtk+-2.0>=2.4)
endif()
endif()
if(GTK_FOUND)
link_directories(${GTK_LIBRARY_DIRS})
endif()
endif()
add_definitions(-DHAVE_CONFIG_H)
add_executable(clonk WIN32 MACOSX_BUNDLE
${OC_SYSTEM_SOURCES}
${OC_CLONK_SOURCES}
)
add_executable(c4group
src/c4group/c4group_ng.cpp
src/c4group/C4Group.cpp
@ -842,6 +863,7 @@ endforeach()
############################################################################
# Locate optional libraries (if so desired)
############################################################################
if(USE_GL)
include(FindOpenGL)
FINDLIB(GLEW_LIBRARIES NAMES GLEW glew32 glew32s)
@ -867,15 +889,11 @@ if(USE_DIRECTX)
)
endif()
if(USE_GTK)
include(FindPkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(GTK glib-2.0>=2.4 gtk+-2.0>=2.4)
endif()
if(GTK_FOUND)
include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
SET(WITH_DEVELOPER_MODE ${GTK_FOUND})
SET(WITH_GLIB ${GTK_FOUND})
SET(WITH_GTK3 ${USE_GTK3})
target_link_libraries(clonk
${GTK_LIBRARIES}
)
@ -942,4 +960,5 @@ if(NOT HAVE_FMOD OR USE_SDL_MAINLOOP)
endif()
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)

View File

@ -173,6 +173,9 @@
/* Glib */
#cmakedefine WITH_GLIB 1
/* Use GTK+3 for the developer mode */
#cmakedefine WITH_GTK3 1
/* Define to 1 if the X Window System is missing or not being used. */
#cmakedefine X_DISPLAY_MISSING 1

View File

@ -139,8 +139,7 @@ int main()
#ifdef WITH_DEVELOPER_MODE
# include "c4x.xpm"
# include <gtk/gtkmain.h>
# include <gtk/gtkwindow.h>
# include <gtk/gtk.h>
#endif
#ifdef HAVE_SIGNAL_H

View File

@ -64,26 +64,8 @@ namespace
#endif // _WIN32
#ifdef WITH_DEVELOPER_MODE
# include <gdk/gdkcursor.h>
# include <gdk/gdkx.h>
# include <gtk/gtkstock.h>
# include <gtk/gtkwindow.h>
# include <gtk/gtkmessagedialog.h>
# include <gtk/gtkfilechooserdialog.h>
# include <gtk/gtkaboutdialog.h>
# include <gtk/gtklabel.h>
# include <gtk/gtkbutton.h>
# include <gtk/gtktogglebutton.h>
# include <gtk/gtkhbox.h>
# include <gtk/gtkvbox.h>
# include <gtk/gtkscrolledwindow.h>
# include <gtk/gtkentry.h>
# include <gtk/gtkframe.h>
# include <gtk/gtkvseparator.h>
# include <gtk/gtktextview.h>
# include <gtk/gtkmenubar.h>
# include <gtk/gtkmenuitem.h>
# include <gtk/gtkseparatormenuitem.h>
# include <gtk/gtk.h>
# include <res/Play.h>
# include <res/Halt.h>
@ -765,7 +747,11 @@ bool C4Console::SaveGame(bool fSaveGame)
SetCursor(LoadCursor(0,IDC_WAIT));
#elif defined(WITH_DEVELOPER_MODE)
// Seems not to work. Don't know why...
#if GTK_CHECK_VERSION(2,14,0)
gdk_window_set_cursor(gtk_widget_get_window(window), cursorWait);
#else
gdk_window_set_cursor(window->window, cursorWait);
#endif
#endif
C4GameSave *pGameSave;
@ -786,7 +772,11 @@ bool C4Console::SaveGame(bool fSaveGame)
#ifdef _WIN32
SetCursor(LoadCursor(0,IDC_ARROW));
#elif defined(WITH_DEVELOPER_MODE)
#if GTK_CHECK_VERSION(2,14,0)
gdk_window_set_cursor(gtk_widget_get_window(window), NULL);
#else
gdk_window_set_cursor(window->window, NULL);
#endif
#endif
// Initialize/script notification

View File

@ -32,7 +32,7 @@
#include <StdWindow.h>
#ifdef WITH_DEVELOPER_MODE
# include <gtk/gtkwidget.h>
# include <gtk/gtk.h>
#endif
const int C4CNS_ModePlay = 0,

View File

@ -23,8 +23,7 @@
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtknotebook.h>
#include <gtk/gtklabel.h>
#include <gtk/gtk.h>
GtkWidget* C4DevmodeDlg::window = NULL;
GtkWidget* C4DevmodeDlg::notebook = NULL;
@ -90,7 +89,11 @@ void C4DevmodeDlg::RemovePage(GtkWidget* widget)
void C4DevmodeDlg::SwitchPage(GtkWidget* widget)
{
#if GTK_CHECK_VERSION(2,18,0)
bool is_visible = gtk_widget_get_visible(GTK_WIDGET(window));
#else
bool is_visible = GTK_WIDGET_VISIBLE(GTK_WIDGET(window));
#endif
// Remember window position
if (window != NULL && is_visible)

View File

@ -22,8 +22,7 @@
#define INC_C4DevmodeDlg
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtkwidget.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtk.h>
#endif // WITH_DEVELOPER_MODE
// TODO: Threadsafety?

View File

@ -45,11 +45,7 @@
#ifdef WITH_DEVELOPER_MODE
# include <C4Language.h>
# include <gtk/gtklabel.h>
# include <gtk/gtkmenushell.h>
# include <gtk/gtkmenu.h>
# include <gtk/gtkmenuitem.h>
# include <gtk/gtkseparatormenuitem.h>
# include <gtk/gtk.h>
#endif
C4EditCursor::C4EditCursor()

View File

@ -27,7 +27,7 @@
#include "C4Control.h"
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtkwidget.h>
#include <gtk/gtk.h>
#endif
class C4EditCursor

View File

@ -30,8 +30,6 @@
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtk.h>
#include <gtk/gtknotebook.h>
#include <gtk/gtklabel.h>
/* Some boilerplate GObject defines. 'klass' is used instead of 'class', because 'class' is a C++ keyword */

View File

@ -22,9 +22,7 @@
#define INC_C4ObjectListDlg
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtkwidget.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtktreeselection.h>
#include <gtk/gtk.h>
#endif // WITH_DEVELOPER_MODE
#include "C4ObjectList.h"

View File

@ -40,11 +40,7 @@
# include <C4DevmodeDlg.h>
# include <C4Language.h>
# include <gtk/gtkentry.h>
# include <gtk/gtkvbox.h>
# include <gtk/gtktextview.h>
# include <gtk/gtkwindow.h>
# include <gtk/gtkscrolledwindow.h>
# include <gtk/gtk.h>
#endif
#ifdef _WIN32

View File

@ -27,7 +27,7 @@
#include "C4ObjectList.h"
#ifdef WITH_DEVELOPER_MODE
# include <gtk/gtkwidget.h>
# include <gtk/gtk.h>
#endif
class C4PropertyDlg

View File

@ -45,14 +45,6 @@
# include <C4Language.h>
# include <C4DevmodeDlg.h>
# include <gtk/gtkwindow.h>
# include <gtk/gtkimage.h>
# include <gtk/gtktogglebutton.h>
# include <gtk/gtkvscale.h>
# include <gtk/gtkhbox.h>
# include <gtk/gtkvbox.h>
# include <gtk/gtkcombobox.h>
# include <gtk/gtkstock.h>
# include <gtk/gtk.h>
# include <res/Brush.h>
@ -700,8 +692,12 @@ void C4ToolsDlg::UpdatePreview()
if (IsWindowEnabled(GetDlgItem(hDialog,IDC_PREVIEW)))
#else
#ifdef WITH_DEVELOPER_MODE
#if GTK_CHECK_VERSION(2,18,0)
if (gtk_widget_is_sensitive(preview))
#else
if (GTK_WIDGET_SENSITIVE(preview))
#endif
#endif
#endif
Application.DDraw->DrawPatternedCircle( sfcPreview,
iPrvWdt/2,iPrvHgt/2,

View File

@ -25,7 +25,7 @@
#define INC_C4ToolsDlg
#ifdef WITH_DEVELOPER_MODE
#include <gtk/gtkwidget.h>
#include <gtk/gtk.h>
#endif
#include "C4Constants.h"

View File

@ -59,12 +59,7 @@
#ifdef WITH_DEVELOPER_MODE
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtktable.h>
#include <gtk/gtkdnd.h>
#include <gtk/gtkselection.h>
#include <gtk/gtkdrawingarea.h>
#include <gtk/gtkhscrollbar.h>
#include <gtk/gtkvscrollbar.h>
#include <gtk/gtk.h>
#endif
#endif
@ -441,16 +436,23 @@ bool C4Viewport::TogglePlayerLock()
bool C4Viewport::ScrollBarsByViewPosition()
{
if (PlayerLock) return false;
GtkAllocation allocation;
#if GTK_CHECK_VERSION(2,18,0)
gtk_widget_get_allocation(pWindow->drawing_area, &allocation);
#else
allocation = pWindow->drawing_area->allocation;
#endif
GtkAdjustment* adjustment = gtk_range_get_adjustment(GTK_RANGE(pWindow->h_scrollbar));
adjustment->page_increment = pWindow->drawing_area->allocation.width;
adjustment->page_size = pWindow->drawing_area->allocation.width;
adjustment->page_increment = allocation.width;
adjustment->page_size = allocation.width;
adjustment->value = ViewX;
gtk_adjustment_changed(adjustment);
adjustment = gtk_range_get_adjustment(GTK_RANGE(pWindow->v_scrollbar));
adjustment->page_increment = pWindow->drawing_area->allocation.height;
adjustment->page_size = pWindow->drawing_area->allocation.height;
adjustment->page_increment = allocation.height;
adjustment->page_size = allocation.height;
adjustment->value = ViewY;
gtk_adjustment_changed(adjustment);
@ -510,7 +512,11 @@ void C4ViewportWindow::OnRealizeStatic(GtkWidget* widget, gpointer user_data)
gboolean C4ViewportWindow::OnKeyPressStatic(GtkWidget* widget, GdkEventKey* event, gpointer user_data)
{
#if GTK_CHECK_VERSION(2,90,7)
if (event->keyval == GDK_KEY_Scroll_Lock)
#else
if (event->keyval == GDK_Scroll_Lock)
#endif
static_cast<C4ViewportWindow*>(user_data)->cvp->TogglePlayerLock();
DWORD key = XKeycodeToKeysym(GDK_WINDOW_XDISPLAY(event->window), event->hardware_keycode, 0);
@ -818,11 +824,19 @@ bool C4Viewport::UpdateOutputSize()
// Output size
RECT rect;
#ifdef WITH_DEVELOPER_MODE
GtkAllocation allocation;
#if GTK_CHECK_VERSION(2,18,0)
gtk_widget_get_allocation(pWindow->drawing_area, &allocation);
#else
allocation = pWindow->drawing_area->allocation;
#endif
// Use only size of drawing area without scrollbars
rect.left = pWindow->drawing_area->allocation.x;
rect.top = pWindow->drawing_area->allocation.y;
rect.right = rect.left + pWindow->drawing_area->allocation.width;
rect.bottom = rect.top + pWindow->drawing_area->allocation.height;
rect.left = allocation.x;
rect.top = allocation.y;
rect.right = rect.left + allocation.width;
rect.bottom = rect.top + allocation.height;
#else
if (!pWindow->GetSize(&rect)) return false;
#endif

View File

@ -24,7 +24,7 @@
#include <X11/Xlib.h>
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtklayout.h>
#include <gtk/gtk.h>
#include "C4Version.h"
@ -77,19 +77,41 @@ CStdWindow* CStdGtkWindow::Init(CStdApp * pApp, const char * Title, CStdWindow *
gtk_window_set_title(GTK_WINDOW(window), Title);
#if GTK_CHECK_VERSION(2,14,0)
GdkWindow* window_wnd = gtk_widget_get_window(window);
#else
GdkWindow* window_wnd = window->window;
#endif
// Wait until window is mapped to get the window's XID
gtk_widget_show_now(window);
wnd = GDK_WINDOW_XWINDOW(window->window);
gdk_window_add_filter(window->window, OnFilter, this);
wnd = GDK_WINDOW_XWINDOW(window_wnd);
gdk_window_add_filter(window_wnd, OnFilter, this);
XWMHints * wm_hint = XGetWMHints(dpy, wnd);
if (!wm_hint) wm_hint = XAllocWMHints();
Hints = wm_hint;
if (GTK_IS_LAYOUT(render_widget))
renderwnd = GDK_WINDOW_XWINDOW(GTK_LAYOUT(render_widget)->bin_window);
{
#if GTK_CHECK_VERSION(2,14,0)
GdkWindow* bin_wnd = gtk_layout_get_bin_window(GTK_LAYOUT(render_widget));
#else
GdkWindow* bin_wnd = GTK_LAYOUT(render_widget)->bin_window;
#endif
renderwnd = GDK_WINDOW_XWINDOW(bin_wnd);
}
else
renderwnd = GDK_WINDOW_XWINDOW(render_widget->window);
{
#if GTK_CHECK_VERSION(2,14,0)
GdkWindow* render_wnd = gtk_widget_get_window(render_widget);
#else
GdkWindow* render_wnd = render_widget->window;
#endif
renderwnd = GDK_WINDOW_XWINDOW(render_wnd);
}
if (pParent) XSetTransientForHint(dpy, wnd, pParent->wnd);
@ -97,7 +119,7 @@ CStdWindow* CStdGtkWindow::Init(CStdApp * pApp, const char * Title, CStdWindow *
{
// TODO!
// GdkCursor* cursor = gdk_cursor_new_from_pixmap(NULL, NULL, NULL, NULL, 0, 0);
gdk_window_set_cursor(window->window, NULL);
gdk_window_set_cursor(window_wnd, NULL);
}
// Make sure the window is shown and ready to be rendered into,
@ -162,9 +184,18 @@ gboolean CStdGtkWindow::OnUpdateKeyMask(GtkWidget* widget, GdkEventKey* event, g
// For keypress/relases, event->state contains the state _before_
// the event, but we need to store the current state.
if (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R) mask ^= MK_SHIFT;
if (event->keyval == GDK_Control_L || event->keyval == GDK_Control_R) mask ^= MK_CONTROL;
if (event->keyval == GDK_Alt_L || event->keyval == GDK_Alt_R) mask ^= (1 << 3);
#if !GTK_CHECK_VERSION(2,90,7)
# define GDK_KEY_Shift_L GDK_Shift_L
# define GDK_KEY_Shift_R GDK_Shift_R
# define GDK_KEY_Control_L GDK_Control_L
# define GDK_KEY_Control_R GDK_Control_R
# define GDK_KEY_Alt_L GDK_Alt_L
# define GDK_KEY_Alt_R GDK_Alt_R
#endif
if (event->keyval == GDK_KEY_Shift_L || event->keyval == GDK_KEY_Shift_R) mask ^= MK_SHIFT;
if (event->keyval == GDK_KEY_Control_L || event->keyval == GDK_KEY_Control_R) mask ^= MK_CONTROL;
if (event->keyval == GDK_KEY_Alt_L || event->keyval == GDK_KEY_Alt_R) mask ^= (1 << 3);
static_cast<CStdApp*>(user_data)->KeyMask = mask;
return false;

View File

@ -23,7 +23,7 @@
#include <StdWindow.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtk.h>
class CStdGtkWindow: public CStdWindow
{