forked from Mirrors/openclonk
Add an option to build against GTK+ 3
parent
537fdcba66
commit
bd2f63bf1d
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "C4Control.h"
|
||||
|
||||
#ifdef WITH_DEVELOPER_MODE
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include <gtk/gtk.h>
|
||||
#endif
|
||||
|
||||
class C4EditCursor
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "C4ObjectList.h"
|
||||
|
||||
#ifdef WITH_DEVELOPER_MODE
|
||||
# include <gtk/gtkwidget.h>
|
||||
# include <gtk/gtk.h>
|
||||
#endif
|
||||
|
||||
class C4PropertyDlg
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#define INC_C4ToolsDlg
|
||||
|
||||
#ifdef WITH_DEVELOPER_MODE
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include <gtk/gtk.h>
|
||||
#endif
|
||||
|
||||
#include "C4Constants.h"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <StdWindow.h>
|
||||
|
||||
#include <gtk/gtkwindow.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
class CStdGtkWindow: public CStdWindow
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue