--- a/CMakeLists.txt Tue Nov 10 15:49:55 2015 +0100
+++ b/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100
@@ -59,6 +59,8 @@
message(STATUS "Building ${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION} (${HEDGEWARS_HASH})")
+#io library paths
+include(${CMAKE_MODULE_PATH}/paths.cmake)
#general utilities
include(${CMAKE_MODULE_PATH}/utils.cmake)
#paths initialization
--- a/INSTALL Tue Nov 10 15:49:55 2015 +0100
+++ b/INSTALL Tue Nov 10 20:43:13 2015 +0100
@@ -2,10 +2,10 @@
- CMake >= 2.6.0
- FreePascal >= 2.2.4
- Qt >= 4.7.0
- - SDL >= 1.2.5
- - SDL_net >= 1.2.5
- - SDL_mixer >= 1.2
- - SDL_image >= 1.2
+ - SDL >= 2.0
+ - SDL_net >= 2.0
+ - SDL_mixer >= 2.0
+ - SDL_image >= 2.0
- SDL_ttf >= 2.0
- Lua = 5.1.0
- Physfs >= 2.0.0
@@ -16,7 +16,6 @@
- hslogger package
For videorecording:
- FFmpeg or LibAV
- - GLUT (when SDL < 2)
For compressed screenshots:
- libpng
--- a/QTfrontend/CMakeLists.txt Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100
@@ -20,8 +20,10 @@
message(FATAL_ERROR "This version of Qt is known *not* to work, please update or use a lower version")
endif()
-find_package(SDL1or2) #video in SDLInteraction
-find_package(SDL_mixer REQUIRED) #audio in SDLInteraction
+find_package(SDL2 REQUIRED)
+find_package(SDL2_mixer REQUIRED) #audio in SDLInteraction
+include_directories(${SDL2_INCLUDE_DIR})
+include_directories(${SDL2MIXER_INCLUDE_DIR})
if(LIBAV_FOUND)
add_definitions(-DVIDEOREC -D__STDC_CONSTANT_MACROS)
@@ -60,8 +62,6 @@
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ui/widget)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util/platform)
-include_directories(${SDL_INCLUDE_DIR})
-include_directories(${SDLMIXER_INCLUDE_DIR})
include_directories(BEFORE ${PHYSFS_INCLUDE_DIR})
include_directories(BEFORE ${PHYSLAYER_INCLUDE_DIR})
include_directories(${LUA_INCLUDE_DIR}) #brought by physlayer hwpacksmounter.h
@@ -204,8 +204,11 @@
list(APPEND HW_LINK_LIBS
physfs physlayer
${QT_LIBRARIES}
- ${SDL_LIBRARY}
- ${SDLMIXER_LIBRARY}
+ )
+
+list(APPEND HW_LINK_LIBS
+ ${SDL2_LIBRARY}
+ ${SDL2MIXER_LIBRARY}
)
if(WIN32 AND NOT UNIX)
--- a/QTfrontend/gameuiconfig.cpp Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/gameuiconfig.cpp Tue Nov 10 20:43:13 2015 +0100
@@ -86,10 +86,11 @@
else Form->ui.pageOptions->CBResolution->setCurrentIndex(t);
// Default the windowed resolution to 5/6 of the screen size
- int screenWidth = SDL_GetVideoInfo()->current_w * 5 / 6;
- int screenHeight = SDL_GetVideoInfo()->current_h * 5 / 6;
- QString widthStr; widthStr.setNum(screenWidth);
- QString heightStr; heightStr.setNum(screenHeight);
+ QSize screenSize = SDLInteraction::instance().getCurrentResolution();
+ screenSize *= 5.0 / 6;
+
+ QString widthStr = QString::number(screenSize.width());
+ QString heightStr = QString::number(screenSize.height());
QString wWidth = value("video/windowedWidth", widthStr).toString();
QString wHeight = value("video/windowedHeight", heightStr).toString();
// If left blank reset the resolution to the default
--- a/QTfrontend/main.cpp Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/main.cpp Tue Nov 10 20:43:13 2015 +0100
@@ -37,6 +37,8 @@
#include "FileEngine.h"
#include "MessageDialog.h"
+#include "SDLInteraction.h"
+
#ifdef _WIN32
#include <Shlobj.h>
#elif defined __APPLE__
@@ -154,6 +156,8 @@
cocoaInit = new CocoaInitializer(); // Creates the autoreleasepool preventing cocoa object leaks on OS X.
#endif
+ SDLInteraction::instance();
+
HWApplication app(argc, argv);
app.setAttribute(Qt::AA_DontShowIconsInMenus,false);
--- a/QTfrontend/ui/widget/about.cpp Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/ui/widget/about.cpp Tue Nov 10 20:43:13 2015 +0100
@@ -101,7 +101,14 @@
libinfo.append(QString(tr("Unknown Compiler")).arg(__VERSION__) + QString("<br>"));
#endif
- const SDL_version *sdl_ver = SDL_Linked_Version();
+ const SDL_version *sdl_ver;
+ SDL_version sdl_version;
+#if SDL_MAJOR_VERSION == 2
+ SDL_GetVersion(&sdl_version);
+ sdl_ver = &sdl_version;
+#else
+ sdl_ver = SDL_Linked_Version();
+#endif
libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL</a> version: %1.%2.%3<br>")
.arg(sdl_ver->major)
.arg(sdl_ver->minor)
--- a/QTfrontend/util/SDLInteraction.cpp Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/util/SDLInteraction.cpp Tue Nov 10 20:43:13 2015 +0100
@@ -85,19 +85,15 @@
{
QStringList result;
- SDL_Rect **modes;
+ int modesNumber = SDL_GetNumDisplayModes(0);
+ SDL_DisplayMode mode;
- modes = SDL_ListModes(NULL, SDL_FULLSCREEN);
-
- if((modes == (SDL_Rect **)0) || (modes == (SDL_Rect **)-1))
+ for(int i = 0; i < modesNumber; ++i)
{
- result << "640x480";
- }
- else
- {
- for(int i = 0; modes[i]; ++i)
- if ((modes[i]->w >= 640) && (modes[i]->h >= 480))
- result << QString("%1x%2").arg(modes[i]->w).arg(modes[i]->h);
+ SDL_GetDisplayMode(0, i, &mode);
+
+ if ((mode.w >= 640) && (mode.h >= 480))
+ result << QString("%1x%2").arg(mode.w).arg(mode.h);
}
return result;
@@ -108,6 +104,9 @@
{
QStringList result;
+#if SDL_VERSION_ATLEAST(2, 0, 0)
+// TODO or not TODO?
+#else
int i = 0;
while(i < 1024 && sdlkeys[i][1][0] != '\0')
i++;
@@ -181,7 +180,8 @@
// Terminate the list
sdlkeys[i][0][0] = '\0';
- sdlkeys[i][1][0] = '\0';
+ sdlkeys[i][1][0] = '\0';
+#endif
}
@@ -243,7 +243,7 @@
if (!m_audioInitialized) return;
if (m_music == NULL)
- m_music = Mix_LoadMUS_RW(PHYSFSRWOPS_openRead(m_musicTrack.toLocal8Bit().constData()));
+ m_music = Mix_LoadMUS_RW(PHYSFSRWOPS_openRead(m_musicTrack.toLocal8Bit().constData()), 0);
Mix_VolumeMusic(MIX_MAX_VOLUME/4);
Mix_FadeInMusic(m_music, -1, 1750);
@@ -264,3 +264,12 @@
m_isPlayingMusic = false;
}
+
+QSize SDLInteraction::getCurrentResolution()
+{
+ SDL_DisplayMode mode;
+
+ SDL_GetDesktopDisplayMode(0, &mode);
+
+ return QSize(mode.w, mode.h);
+}
--- a/QTfrontend/util/SDLInteraction.h Tue Nov 10 15:49:55 2015 +0100
+++ b/QTfrontend/util/SDLInteraction.h Tue Nov 10 20:43:13 2015 +0100
@@ -27,7 +27,15 @@
#include <QMap>
#include <QStringList>
+#include <QSize>
+// workaround some strange Qt and SLD2 interaction
+#ifdef Q_OS_MAC
+# ifdef MAC_OS_X_VERSION_MIN_REQUIRED
+# undef MAC_OS_X_VERSION_MIN_REQUIRED
+# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_6
+# endif
+#endif
#include "SDL_mixer.h"
/**
@@ -103,6 +111,8 @@
/// Fades out and stops the background music (if playing).
void stopMusic();
+
+ QSize getCurrentResolution();
};
--- a/cmake_modules/FindSDL1or2.cmake Tue Nov 10 15:49:55 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-find_package(SDL QUIET)
-
-if(NOT SDL_FOUND)
- find_package(SDL2 REQUIRED)
- set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIR})
- set(SDL_LIBRARY ${SDL2_LIBRARY})
-endif()
-
-if(NOT SDL_VERSION)
- #find which version of SDL we have
- find_file(sdlversion_h SDL_version.h ${SDL_INCLUDE_DIR})
- if(sdlversion_h)
- file(STRINGS ${sdlversion_h} sdl_majorversion_tmp REGEX "SDL_MAJOR_VERSION[\t' ']+[0-9]+")
- file(STRINGS ${sdlversion_h} sdl_minorversion_tmp REGEX "SDL_MINOR_VERSION[\t' ']+[0-9]+")
- file(STRINGS ${sdlversion_h} sdl_patchversion_tmp REGEX "SDL_PATCHLEVEL[\t' ']+[0-9]+")
- string(REGEX MATCH "([0-9]+)" sdl_majorversion "${sdl_majorversion_tmp}")
- string(REGEX MATCH "([0-9]+)" sdl_minorversion "${sdl_minorversion_tmp}")
- string(REGEX MATCH "([0-9]+)" sdl_patchversion "${sdl_patchversion_tmp}")
- set(SDL_VERSION "${sdl_majorversion}.${sdl_minorversion}.${sdl_patchversion}")
- endif()
-endif()
-
-mark_as_advanced(sdlversion_h sdl_majorversion sdl_minorversion sdl_patchversion)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/FindSDL2_image.cmake Tue Nov 10 20:43:13 2015 +0100
@@ -0,0 +1,88 @@
+# - Locate SDL2_image library
+# This module defines:
+# SDL2_IMAGE_LIBRARIES, the name of the library to link against
+# SDL2_IMAGE_INCLUDE_DIRS, where to find the headers
+# SDL2_IMAGE_FOUND, if false, do not try to link against
+# SDL2_IMAGE_VERSION_STRING - human-readable string containing the version of SDL2_image
+#
+# For backward compatiblity the following variables are also set:
+# SDL2IMAGE_LIBRARY (same value as SDL2_IMAGE_LIBRARIES)
+# SDL2IMAGE_INCLUDE_DIR (same value as SDL2_IMAGE_INCLUDE_DIRS)
+# SDL2IMAGE_FOUND (same value as SDL2_IMAGE_FOUND)
+#
+# $SDL2DIR is an environment variable that would
+# correspond to the ./configure --prefix=$SDL2DIR
+# used in building SDL2.
+#
+# Created by Eric Wing. This was influenced by the FindSDL2.cmake
+# module, but with modifications to recognize OS X frameworks and
+# additional Unix paths (FreeBSD, etc).
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+# Copyright 2012 Benjamin Eikel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT SDL2_IMAGE_INCLUDE_DIR AND SDL2IMAGE_INCLUDE_DIR)
+ set(SDL2_IMAGE_INCLUDE_DIR ${SDL2IMAGE_INCLUDE_DIR} CACHE PATH "directory cache
+entry initialized from old variable name")
+endif()
+find_path(SDL2_IMAGE_INCLUDE_DIR SDL_image.h
+ HINTS
+ ENV SDL2IMAGEDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES include/SDL2 include
+)
+
+if(NOT SDL2_IMAGE_LIBRARY AND SDL2IMAGE_LIBRARY)
+ set(SDL2_IMAGE_LIBRARY ${SDL2IMAGE_LIBRARY} CACHE FILEPATH "file cache entry
+initialized from old variable name")
+endif()
+find_library(SDL2_IMAGE_LIBRARY
+ NAMES SDL2_image
+ HINTS
+ ENV SDL2IMAGEDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES lib
+)
+
+if(SDL2_IMAGE_INCLUDE_DIR AND EXISTS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h")
+ file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_IMAGE_MAJOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_IMAGE_MINOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL2_image.h" SDL2_IMAGE_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_IMAGE_PATCHLEVEL[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MAJOR "${SDL2_IMAGE_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MINOR "${SDL2_IMAGE_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_IMAGE_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_PATCH "${SDL2_IMAGE_VERSION_PATCH_LINE}")
+ set(SDL2_IMAGE_VERSION_STRING ${SDL2_IMAGE_VERSION_MAJOR}.${SDL2_IMAGE_VERSION_MINOR}.${SDL2_IMAGE_VERSION_PATCH})
+ unset(SDL2_IMAGE_VERSION_MAJOR_LINE)
+ unset(SDL2_IMAGE_VERSION_MINOR_LINE)
+ unset(SDL2_IMAGE_VERSION_PATCH_LINE)
+ unset(SDL2_IMAGE_VERSION_MAJOR)
+ unset(SDL2_IMAGE_VERSION_MINOR)
+ unset(SDL2_IMAGE_VERSION_PATCH)
+endif()
+
+set(SDL2_IMAGE_LIBRARIES ${SDL2_IMAGE_LIBRARY})
+set(SDL2_IMAGE_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_image
+ REQUIRED_VARS SDL2_IMAGE_LIBRARIES SDL2_IMAGE_INCLUDE_DIRS
+ VERSION_VAR SDL2_IMAGE_VERSION_STRING)
+
+# for backward compatiblity
+set(SDL2IMAGE_LIBRARY ${SDL2_IMAGE_LIBRARIES})
+set(SDL2IMAGE_INCLUDE_DIR ${SDL2_IMAGE_INCLUDE_DIRS})
+set(SDL2IMAGE_FOUND ${SDL2_IMAGE_FOUND})
+
+mark_as_advanced(SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/FindSDL2_mixer.cmake Tue Nov 10 20:43:13 2015 +0100
@@ -0,0 +1,88 @@
+# - Locate SDL2_mixer library
+# This module defines:
+# SDL2_MIXER_LIBRARIES, the name of the library to link against
+# SDL2_MIXER_INCLUDE_DIRS, where to find the headers
+# SDL2_MIXER_FOUND, if false, do not try to link against
+# SDL2_MIXER_VERSION_STRING - human-readable string containing the version of SDL2_mixer
+#
+# For backward compatiblity the following variables are also set:
+# SDL2MIXER_LIBRARY (same value as SDL2_MIXER_LIBRARIES)
+# SDL2MIXER_INCLUDE_DIR (same value as SDL2_MIXER_INCLUDE_DIRS)
+# SDL2MIXER_FOUND (same value as SDL2_MIXER_FOUND)
+#
+# $SDL2DIR is an environment variable that would
+# correspond to the ./configure --prefix=$SDL2DIR
+# used in building SDL2.
+#
+# Created by Eric Wing. This was influenced by the FindSDL2.cmake
+# module, but with modifications to recognize OS X frameworks and
+# additional Unix paths (FreeBSD, etc).
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+# Copyright 2012 Benjamin Eikel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT SDL2_MIXER_INCLUDE_DIR AND SDL2MIXER_INCLUDE_DIR)
+ set(SDL2_MIXER_INCLUDE_DIR ${SDL2MIXER_INCLUDE_DIR} CACHE PATH "directory cache
+entry initialized from old variable name")
+endif()
+find_path(SDL2_MIXER_INCLUDE_DIR SDL_mixer.h
+ HINTS
+ ENV SDL2MIXERDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES include/SDL2 include
+)
+
+if(NOT SDL2_MIXER_LIBRARY AND SDL2MIXER_LIBRARY)
+ set(SDL2_MIXER_LIBRARY ${SDL2MIXER_LIBRARY} CACHE FILEPATH "file cache entry
+initialized from old variable name")
+endif()
+find_library(SDL2_MIXER_LIBRARY
+ NAMES SDL2_mixer
+ HINTS
+ ENV SDL2MIXERDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES lib
+)
+
+if(SDL2_MIXER_INCLUDE_DIR AND EXISTS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h")
+ file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MAJOR "${SDL2_MIXER_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MINOR "${SDL2_MIXER_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_PATCH "${SDL2_MIXER_VERSION_PATCH_LINE}")
+ set(SDL2_MIXER_VERSION_STRING ${SDL2_MIXER_VERSION_MAJOR}.${SDL2_MIXER_VERSION_MINOR}.${SDL2_MIXER_VERSION_PATCH})
+ unset(SDL2_MIXER_VERSION_MAJOR_LINE)
+ unset(SDL2_MIXER_VERSION_MINOR_LINE)
+ unset(SDL2_MIXER_VERSION_PATCH_LINE)
+ unset(SDL2_MIXER_VERSION_MAJOR)
+ unset(SDL2_MIXER_VERSION_MINOR)
+ unset(SDL2_MIXER_VERSION_PATCH)
+endif()
+
+set(SDL2_MIXER_LIBRARIES ${SDL2_MIXER_LIBRARY})
+set(SDL2_MIXER_INCLUDE_DIRS ${SDL2_MIXER_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_mixer
+ REQUIRED_VARS SDL2_MIXER_LIBRARIES SDL2_MIXER_INCLUDE_DIRS
+ VERSION_VAR SDL2_MIXER_VERSION_STRING)
+
+# for backward compatiblity
+set(SDL2MIXER_LIBRARY ${SDL2_MIXER_LIBRARIES})
+set(SDL2MIXER_INCLUDE_DIR ${SDL2_MIXER_INCLUDE_DIRS})
+set(SDL2MIXER_FOUND ${SDL2_MIXER_FOUND})
+
+mark_as_advanced(SDL2_MIXER_LIBRARY SDL2_MIXER_INCLUDE_DIR)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/FindSDL2_net.cmake Tue Nov 10 20:43:13 2015 +0100
@@ -0,0 +1,88 @@
+# - Locate SDL2_net library
+# This module defines:
+# SDL2_NET_LIBRARIES, the name of the library to link against
+# SDL2_NET_INCLUDE_DIRS, where to find the headers
+# SDL2_NET_FOUND, if false, do not try to link against
+# SDL2_NET_VERSION_STRING - human-readable string containing the version of SDL2_net
+#
+# For backward compatiblity the following variables are also set:
+# SDL2NET_LIBRARY (same value as SDL2_NET_LIBRARIES)
+# SDL2NET_INCLUDE_DIR (same value as SDL2_NET_INCLUDE_DIRS)
+# SDL2NET_FOUND (same value as SDL2_NET_FOUND)
+#
+# $SDL2DIR is an environment variable that would
+# correspond to the ./configure --prefix=$SDL2DIR
+# used in building SDL2.
+#
+# Created by Eric Wing. This was influenced by the FindSDL2.cmake
+# module, but with modifications to recognize OS X frameworks and
+# additional Unix paths (FreeBSD, etc).
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+# Copyright 2012 Benjamin Eikel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT SDL2_NET_INCLUDE_DIR AND SDL2NET_INCLUDE_DIR)
+ set(SDL2_NET_INCLUDE_DIR ${SDL2NET_INCLUDE_DIR} CACHE PATH "directory cache
+entry initialized from old variable name")
+endif()
+find_path(SDL2_NET_INCLUDE_DIR SDL_net.h
+ HINTS
+ ENV SDL2NETDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES include/SDL2 include
+)
+
+if(NOT SDL2_NET_LIBRARY AND SDL2NET_LIBRARY)
+ set(SDL2_NET_LIBRARY ${SDL2NET_LIBRARY} CACHE FILEPATH "file cache entry
+initialized from old variable name")
+endif()
+find_library(SDL2_NET_LIBRARY
+ NAMES SDL2_net
+ HINTS
+ ENV SDL2NETDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES lib
+)
+
+if(SDL2_NET_INCLUDE_DIR AND EXISTS "${SDL2_NET_INCLUDE_DIR}/SDL2_net.h")
+ file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL2_net.h" SDL2_NET_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_NET_MAJOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL2_net.h" SDL2_NET_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_NET_MINOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL2_net.h" SDL2_NET_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_NET_PATCHLEVEL[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_NET_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_NET_VERSION_MAJOR "${SDL2_NET_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_NET_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_NET_VERSION_MINOR "${SDL2_NET_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_NET_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_NET_VERSION_PATCH "${SDL2_NET_VERSION_PATCH_LINE}")
+ set(SDL2_NET_VERSION_STRING ${SDL2_NET_VERSION_MAJOR}.${SDL2_NET_VERSION_MINOR}.${SDL2_NET_VERSION_PATCH})
+ unset(SDL2_NET_VERSION_MAJOR_LINE)
+ unset(SDL2_NET_VERSION_MINOR_LINE)
+ unset(SDL2_NET_VERSION_PATCH_LINE)
+ unset(SDL2_NET_VERSION_MAJOR)
+ unset(SDL2_NET_VERSION_MINOR)
+ unset(SDL2_NET_VERSION_PATCH)
+endif()
+
+set(SDL2_NET_LIBRARIES ${SDL2_NET_LIBRARY})
+set(SDL2_NET_INCLUDE_DIRS ${SDL2_NET_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_net
+ REQUIRED_VARS SDL2_NET_LIBRARIES SDL2_NET_INCLUDE_DIRS
+ VERSION_VAR SDL2_NET_VERSION_STRING)
+
+# for backward compatiblity
+set(SDL2NET_LIBRARY ${SDL2_NET_LIBRARIES})
+set(SDL2NET_INCLUDE_DIR ${SDL2_NET_INCLUDE_DIRS})
+set(SDL2NET_FOUND ${SDL2_NET_FOUND})
+
+mark_as_advanced(SDL2_NET_LIBRARY SDL2_NET_INCLUDE_DIR)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/FindSDL2_ttf.cmake Tue Nov 10 20:43:13 2015 +0100
@@ -0,0 +1,88 @@
+# - Locate SDL2_ttf library
+# This module defines:
+# SDL2_TTF_LIBRARIES, the name of the library to link against
+# SDL2_TTF_INCLUDE_DIRS, where to find the headers
+# SDL2_TTF_FOUND, if false, do not try to link against
+# SDL2_TTF_VERSION_STRING - human-readable string containing the version of SDL2_ttf
+#
+# For backward compatiblity the following variables are also set:
+# SDL2TTF_LIBRARY (same value as SDL2_TTF_LIBRARIES)
+# SDL2TTF_INCLUDE_DIR (same value as SDL2_TTF_INCLUDE_DIRS)
+# SDL2TTF_FOUND (same value as SDL2_TTF_FOUND)
+#
+# $SDL2DIR is an environment variable that would
+# correspond to the ./configure --prefix=$SDL2DIR
+# used in building SDL2.
+#
+# Created by Eric Wing. This was influenced by the FindSDL2.cmake
+# module, but with modifications to recognize OS X frameworks and
+# additional Unix paths (FreeBSD, etc).
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+# Copyright 2012 Benjamin Eikel
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if(NOT SDL2_TTF_INCLUDE_DIR AND SDL2TTF_INCLUDE_DIR)
+ set(SDL2_TTF_INCLUDE_DIR ${SDL2TTF_INCLUDE_DIR} CACHE PATH "directory cache
+entry initialized from old variable name")
+endif()
+find_path(SDL2_TTF_INCLUDE_DIR SDL_ttf.h
+ HINTS
+ ENV SDL2TTFDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES include/SDL2 include
+)
+
+if(NOT SDL2_TTF_LIBRARY AND SDL2TTF_LIBRARY)
+ set(SDL2_TTF_LIBRARY ${SDL2TTF_LIBRARY} CACHE FILEPATH "file cache entry
+initialized from old variable name")
+endif()
+find_library(SDL2_TTF_LIBRARY
+ NAMES SDL2_ttf
+ HINTS
+ ENV SDL2TTFDIR
+ ENV SDL2DIR
+ PATH_SUFFIXES lib
+)
+
+if(SDL2_TTF_INCLUDE_DIR AND EXISTS "${SDL2_TTF_INCLUDE_DIR}/SDL2_ttf.h")
+ file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL2_ttf.h" SDL2_TTF_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_TTF_MAJOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL2_ttf.h" SDL2_TTF_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_TTF_MINOR_VERSION[ \t]+[0-9]+$")
+ file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL2_ttf.h" SDL2_TTF_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_TTF_PATCHLEVEL[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_TTF_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MAJOR "${SDL2_TTF_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_TTF_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MINOR "${SDL2_TTF_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+SDL2_TTF_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_PATCH "${SDL2_TTF_VERSION_PATCH_LINE}")
+ set(SDL2_TTF_VERSION_STRING ${SDL2_TTF_VERSION_MAJOR}.${SDL2_TTF_VERSION_MINOR}.${SDL2_TTF_VERSION_PATCH})
+ unset(SDL2_TTF_VERSION_MAJOR_LINE)
+ unset(SDL2_TTF_VERSION_MINOR_LINE)
+ unset(SDL2_TTF_VERSION_PATCH_LINE)
+ unset(SDL2_TTF_VERSION_MAJOR)
+ unset(SDL2_TTF_VERSION_MINOR)
+ unset(SDL2_TTF_VERSION_PATCH)
+endif()
+
+set(SDL2_TTF_LIBRARIES ${SDL2_TTF_LIBRARY})
+set(SDL2_TTF_INCLUDE_DIRS ${SDL2_TTF_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_ttf
+ REQUIRED_VARS SDL2_TTF_LIBRARIES SDL2_TTF_INCLUDE_DIRS
+ VERSION_VAR SDL2_TTF_VERSION_STRING)
+
+# for backward compatiblity
+set(SDL2TTF_LIBRARY ${SDL2_TTF_LIBRARIES})
+set(SDL2TTF_INCLUDE_DIR ${SDL2_TTF_INCLUDE_DIRS})
+set(SDL2TTF_FOUND ${SDL2_TTF_FOUND})
+
+mark_as_advanced(SDL2_TTF_LIBRARY SDL2_TTF_INCLUDE_DIR)
--- a/hedgewars/CMakeLists.txt Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100
@@ -1,8 +1,10 @@
-find_package(SDL1or2)
-find_package(SDL_image)
-find_package(SDL_net)
-find_package(SDL_ttf)
-find_package(SDL_mixer)
+enable_language(Pascal)
+
+find_package(SDL2 REQUIRED)
+find_package(SDL2_image REQUIRED)
+find_package(SDL2_net REQUIRED)
+find_package(SDL2_ttf REQUIRED)
+find_package(SDL2_mixer REQUIRED)
include(CheckLibraryExists)
include(${CMAKE_MODULE_PATH}/utils.cmake)
@@ -145,8 +147,6 @@
add_subdirectory(avwrapper)
list(APPEND HW_LINK_LIBS avwrapper)
add_definitions(-dUSE_VIDEO_RECORDING)
- #only for SDL < 2, linking carried out by fpc
- find_package_or_disable_msg(GLUT NOVIDEOREC "Video recording will not be built")
endif()
find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
@@ -185,21 +185,17 @@
#Mix_Init/Mix_Quit from SDL_mixer 1.2.10
-check_library_exists(${SDLMIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT)
+check_library_exists(${SDL2MIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT)
if(HAVE_MIXINIT)
add_definitions(-dSDL_MIXER_NEWER)
endif(HAVE_MIXINIT)
#IMG_Init/IMG_Quit from SDL_image 1.2.8
-check_library_exists(${SDLIMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT)
+check_library_exists(${SDL2IMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT)
if(HAVE_IMGINIT)
add_definitions(-dSDL_IMAGE_NEWER)
endif(HAVE_IMGINIT)
-if(${SDL_VERSION} VERSION_GREATER 1.3)
- add_definitions(-dSDL2)
-endif()
-
#opengl 2
IF(GL2)
add_definitions(-dGL2)
--- a/hedgewars/SDLh.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/SDLh.pas Tue Nov 10 20:43:13 2015 +0100
@@ -53,29 +53,31 @@
type PLongInt = ^LongInt;
{$ENDIF}
+{$IFDEF DARWIN}
+ {$IFNDEF HWLIBRARY}
+ {$linkframework SDL2}
+ {$linkframework SDL2_net}
+ {$linkframework SDL2_image}
+ {$linkframework SDL2_ttf}
+ {$linkframework SDL2_mixer}
+ {$ENDIF}
+{$ENDIF}
+
(* SDL *)
const
{$IFDEF WIN32}
- SDLLibName = 'SDL.dll';
- SDL_TTFLibName = 'SDL_ttf.dll';
- SDL_MixerLibName = 'SDL_mixer.dll';
- SDL_ImageLibName = 'SDL_image.dll';
- SDL_NetLibName = 'SDL_net.dll';
+ SDLLibName = 'SDL2.dll';
+ SDL_TTFLibName = 'SDL2_ttf.dll';
+ SDL_MixerLibName = 'SDL2_mixer.dll';
+ SDL_ImageLibName = 'SDL2_image.dll';
+ SDL_NetLibName = 'SDL2_net.dll';
{$ELSE}
- {$IFDEF SDL2}
- SDLLibName = 'libSDL2';
- SDL_TTFLibName = 'libSDL2_ttf';
- SDL_MixerLibName = 'libSDL2_mixer';
- SDL_ImageLibName = 'libSDL2_image';
- SDL_NetLibName = 'libSDL2_net';
- {$ELSE}
- SDLLibName = 'libSDL';
- SDL_TTFLibName = 'libSDL_ttf';
- SDL_MixerLibName = 'libSDL_mixer';
- SDL_ImageLibName = 'libSDL_image';
- SDL_NetLibName = 'libSDL_net';
- {$ENDIF}
+ SDLLibName = 'libSDL2';
+ SDL_TTFLibName = 'libSDL2_ttf';
+ SDL_MixerLibName = 'libSDL2_mixer';
+ SDL_ImageLibName = 'libSDL2_image';
+ SDL_NetLibName = 'libSDL2_net';
{$ENDIF}
/////////////////////////////////////////////////////////////////
@@ -87,14 +89,9 @@
SDL_INIT_AUDIO = $00000010;
SDL_INIT_VIDEO = $00000020; // implies SDL_INIT_EVENTS (sdl2)
SDL_INIT_JOYSTICK = $00000200; // implies SDL_INIT_EVENTS (sdl2)
-{$IFDEF SDL2}
SDL_INIT_HAPTIC = $00001000;
SDL_INIT_GAMECONTROLLER = $00002000; // implies SDL_INIT_JOYSTICK
SDL_INIT_EVENTS = $00004000;
-{$ELSE}
- SDL_INIT_CDROM = $00000100;
- SDL_INIT_EVENTTHREAD = $01000000;
-{$ENDIF}
SDL_INIT_NOPARACHUTE = $00100000;
//SDL_INIT_EVERYTHING // unsafe, init subsystems one at a time
@@ -108,7 +105,9 @@
SDL_BUTTON_WHEELDOWN = 5;
-{$IFDEF SDL2}
+ SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32;
+ SDL_TEXTINPUTEVENT_TEXT_SIZE = 32;
+
// SDL_Event types
// pascal does not support unions as is, so we list here every possible event
// and later associate a struct type each
@@ -201,39 +200,6 @@
SDL_WINDOWEVENT_FOCUS_GAINED = 12; //*< Window has gained keyboard focus
SDL_WINDOWEVENT_FOCUS_LOST = 13; //*< Window has lost keyboard focus
SDL_WINDOWEVENT_CLOSE = 14; //*< The window manager requests that the window be closed */
-{$ELSE}
- // SDL_Event types
- SDL_NOEVENT = 0;
- SDL_ACTIVEEVENT = 1;
- SDL_KEYDOWN = 2;
- SDL_KEYUP = 3;
- SDL_MOUSEMOTION = 4;
- SDL_MOUSEBUTTONDOWN = 5;
- SDL_MOUSEBUTTONUP = 6;
- SDL_JOYAXISMOTION = 7;
- SDL_JOYBALLMOTION = 8;
- SDL_JOYHATMOTION = 9;
- SDL_JOYBUTTONDOWN = 10;
- SDL_JOYBUTTONUP = 11;
- SDL_QUITEV = 12;
- SDL_VIDEORESIZE = 16;
-
- // SDL_Surface flags
- SDL_SWSURFACE = $00000000;
- SDL_HWSURFACE = $00000001;
- SDL_OPENGL = $00000002;
- SDL_ASYNCBLIT = $00000004;
- SDL_RESIZABLE = $00000010;
- SDL_NOFRAME = $00000020;
- SDL_HWACCEL = $00000100;
- SDL_SRCCOLORKEY = $00001000;
- SDL_RLEACCEL = $00004000;
- SDL_SRCALPHA = $00010000;
- SDL_ANYFORMAT = $00100000;
- SDL_HWPALETTE = $20000000;
- SDL_DOUBLEBUF = $40000000;
- SDL_FULLSCREEN = $80000000;
-{$ENDIF}
{$IFDEF ENDIAN_LITTLE}
RMask = $000000FF;
@@ -269,11 +235,13 @@
KMOD_MODE = $4000;
{* SDL_mixer *}
- MIX_MAX_VOLUME = 128;
- MIX_INIT_FLAC = $00000001;
- MIX_INIT_MOD = $00000002;
- MIX_INIT_MP3 = $00000004;
- MIX_INIT_OGG = $00000008;
+ MIX_MAX_VOLUME = 128;
+ MIX_INIT_FLAC = $00000001;
+ MIX_INIT_MOD = $00000002;
+ MIX_INIT_MODPLUG = $00000004;
+ MIX_INIT_MP3 = $00000008;
+ MIX_INIT_OGG = $00000010;
+ MIX_INIT_FLUIDSYNTH = $00000020;
{* SDL_TTF *}
TTF_STYLE_NORMAL = 0;
@@ -327,25 +295,18 @@
// http://www.freepascal.org/docs-html/prog/progsu144.html
type
-{$IFDEF SDL2}
PSDL_Window = Pointer;
PSDL_Renderer = Pointer;
PSDL_Texture = Pointer;
PSDL_GLContext= Pointer;
TSDL_TouchId = Int64;
-{$ENDIF}
TSDL_FingerId = Int64;
TSDL_eventaction = (SDL_ADDEVENT, SDL_PEEPEVENT, SDL_GETEVENT);
PSDL_Rect = ^TSDL_Rect;
TSDL_Rect = record
-{$IFDEF SDL2}
x, y, w, h: LongInt;
-{$ELSE}
- x, y: SmallInt;
- w, h: Word;
-{$ENDIF}
end;
TPoint = record
@@ -354,7 +315,6 @@
PSDL_PixelFormat = ^TSDL_PixelFormat;
TSDL_PixelFormat = record
-{$IFDEF SDL2}
format: LongWord;
palette: Pointer;
BitsPerPixel : Byte;
@@ -374,25 +334,6 @@
Ashift: Byte;
refcount: LongInt;
next: PSDL_PixelFormat;
-{$ELSE}
- palette: Pointer;
- BitsPerPixel : Byte;
- BytesPerPixel: Byte;
- Rloss : Byte;
- Gloss : Byte;
- Bloss : Byte;
- Aloss : Byte;
- Rshift: Byte;
- Gshift: Byte;
- Bshift: Byte;
- Ashift: Byte;
- RMask : LongWord;
- GMask : LongWord;
- BMask : LongWord;
- AMask : LongWord;
- colorkey: LongWord;
- alpha: Byte;
-{$ENDIF}
end;
PSDL_Surface = ^TSDL_Surface;
@@ -400,7 +341,7 @@
flags : LongWord;
format: PSDL_PixelFormat;
w, h : LongInt;
- pitch : {$IFDEF SDL2}LongInt{$ELSE}Word{$ENDIF};
+ pitch : LongInt;
pixels: Pointer;
{$IFDEF PAS2C}
hwdata : Pointer;
@@ -412,16 +353,12 @@
refcount : LongInt;
offset : LongInt;
{$ELSE}
-{$IFDEF SDL2}
userdata : Pointer;
locked : LongInt;
lock_data : Pointer;
clip_rect : TSDL_Rect;
map : Pointer;
refcount : LongInt;
-{$ELSE}
- offset : LongInt;
-{$ENDIF}
{$ENDIF}
end;
@@ -437,18 +374,14 @@
(* SDL_RWops and friends *)
PSDL_RWops = ^TSDL_RWops;
-{$IFDEF SDL2}
TSize = function( context: PSDL_RWops): Int64; cdecl;
TSeek = function( context: PSDL_RWops; offset: Int64; whence: LongInt ): Int64; cdecl;
-{$ELSE}
- TSeek = function( context: PSDL_RWops; offset: LongInt; whence: LongInt ): LongInt; cdecl;
-{$ENDIF}
TRead = function( context: PSDL_RWops; Ptr: Pointer; size: LongInt; maxnum : LongInt ): LongInt; cdecl;
TWrite = function( context: PSDL_RWops; Ptr: Pointer; size: LongInt; num: LongInt ): LongInt; cdecl;
TClose = function( context: PSDL_RWops ): LongInt; cdecl;
TStdio = record
- autoclose: {$IFDEF SDL2}Boolean{$ELSE}LongInt{$ENDIF};
+ autoclose: Boolean;
fp: Pointer;
end;
@@ -460,9 +393,7 @@
TUnknown = record
data1: Pointer;
-{$IFDEF SDL2}
data2: Pointer;
-{$ENDIF}
end;
{$IFDEF ANDROID}
@@ -479,7 +410,7 @@
size, left: LongInt;
end;
TWindowsio = record
- append : {$IFDEF SDL2}Boolean{$ELSE}LongInt{$ENDIF};
+ append : Boolean;
h : Pointer;
buffer : TWinbuffer;
end;
@@ -487,9 +418,7 @@
{$ENDIF}
TSDL_RWops = record
-{$IFDEF SDL2}
size: TSize;
-{$ENDIF}
seek: TSeek;
read: TRead;
write: TWrite;
@@ -511,7 +440,6 @@
{* SDL_Event type definition *}
-{$IFDEF SDL2}
TSDL_Keysym = record
scancode: LongInt;
sym: LongInt;
@@ -528,21 +456,20 @@
data1, data2: LongInt;
end;
- // available in sdl12 but not exposed
TSDL_TextEditingEvent = record
- type_: LongWord;
- timestamp: LongWord;
- windowID: LongWord;
- text: array[0..31] of Byte;
- start, lenght: LongInt;
+ type_: Longword;
+ timestamp: Longword;
+ windowID: Longword;
+ text: array [0..SDL_TEXTEDITINGEVENT_TEXT_SIZE - 1] of char;
+ start: LongInt;
+ length: LongInt;
end;
- // available in sdl12 but not exposed
TSDL_TextInputEvent = record
- type_: LongWord;
- timestamp: LongWord;
- windowID: LongWord;
- text: array[0..31] of Byte;
+ type_: Longword;
+ timestamp: Longword;
+ windowID: Longword;
+ text: array [0..SDL_TEXTINPUTEVENT_TEXT_SIZE - 1] of char;
end;
TSDL_TouchFingerEvent = record
@@ -613,167 +540,92 @@
end;
TSDL_OSEvent = TSDL_CommonEvent;
-{$ELSE}
- TSDL_KeySym = record
- scancode: Byte;
- sym: LongWord;
- modifier: LongWord;
- unicode: Word;
- end;
-
- TSDL_ActiveEvent = record
- type_: Byte;
- gain: Byte;
- state: Byte;
- end;
-
- TSDL_ResizeEvent = record
- type_: Byte;
- w, h: LongInt;
- end;
-{$ENDIF}
TSDL_KeyboardEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
windowID: LongWord;
state, repeat_, padding2, padding3: Byte;
-{$ELSE}
- type_, which, state: Byte;
-{$ENDIF}
keysym: TSDL_Keysym;
end;
TSDL_MouseMotionEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
windowID: LongWord;
which, state: LongWord;
x, y, xrel, yrel: LongInt;
-{$ELSE}
- type_, which, state: Byte;
- x, y, xrel, yrel: Word;
-{$ENDIF}
end;
TSDL_MouseButtonEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
windowID: LongWord;
which: LongWord;
button, state, padding1, padding2: Byte;
x, y: LongInt;
-{$ELSE}
- type_, which, button, state: Byte;
- x, y: Word;
-{$ENDIF}
end;
TSDL_MouseWheelEvent = record
type_: LongWord;
-{$IFDEF SDL2}
timestamp: LongWord;
windowID: LongWord;
which: LongWord;
-{$ELSE}
- which: Byte;
-{$ENDIF}
x, y: LongInt;
end;
TSDL_JoyAxisEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
which: LongWord;
-{$ELSE}
- type_: Byte;
- which: Byte;
-{$ENDIF}
axis: Byte;
-{$IFDEF SDL2}
padding1, padding2, padding3: Byte;
value: LongInt;
padding4: Word;
-{$ELSE}
- value: SmallInt;
-{$ENDIF}
end;
TSDL_JoyBallEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
which: LongWord;
-{$ELSE}
- type_: Byte;
- which: Byte;
-{$ENDIF}
ball: Byte;
-{$IFDEF SDL2}
padding1, padding2, padding3: Byte;
-{$ENDIF}
xrel, yrel: SmallInt;
end;
TSDL_JoyHatEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
which: LongWord;
-{$ELSE}
- type_: Byte;
- which: Byte;
-{$ENDIF}
hat: Byte;
value: Byte;
-{$IFDEF SDL2}
padding1, padding2: Byte;
-{$ENDIF}
end;
TSDL_JoyButtonEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
-{$ELSE}
- type_: Byte;
-{$ENDIF}
which: Byte;
button: Byte;
state: Byte;
-{$IFDEF SDL2}
padding1: Byte;
-{$ENDIF}
end;
TSDL_QuitEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
-{$ELSE}
- type_: Byte;
-{$ENDIF}
end;
TSDL_UserEvent = record
-{$IFDEF SDL2}
type_: LongWord;
timestamp: LongWord;
windowID: LongWord;
-{$ELSE}
- type_: Byte;
-{$ENDIF}
code: LongInt;
data1, data2: Pointer;
end;
PSDL_Event = ^TSDL_Event;
TSDL_Event = record
-{$IFDEF SDL2}
case LongInt of
SDL_FIRSTEVENT: (type_: LongWord);
SDL_COMMONDEVENT: (common: TSDL_CommonEvent);
@@ -781,7 +633,7 @@
SDL_KEYDOWN,
SDL_KEYUP: (key: TSDL_KeyboardEvent);
SDL_TEXTEDITING: (edit: TSDL_TextEditingEvent);
- SDL_TEXTINPUT: (tedit: TSDL_TextInputEvent);
+ SDL_TEXTINPUT: (text: TSDL_TextInputEvent);
SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
SDL_MOUSEBUTTONDOWN,
SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
@@ -809,25 +661,6 @@
SDL_DOLLARGESTURE: (dgesture: TSDL_DollarGestureEvent);
SDL_DROPFILE: (drop: TSDL_DropEvent);
SDL_ALLEVENTS: (foo: shortstring);
-{$ELSE}
- case Byte of
- SDL_NOEVENT: (type_: Byte);
- SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
- SDL_KEYDOWN,
- SDL_KEYUP: (key: TSDL_KeyboardEvent);
- SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
- SDL_MOUSEBUTTONDOWN,
- SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
- SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
- SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
- SDL_JOYBALLMOTION: (jball: TSDL_JoyBallEvent);
- SDL_JOYBUTTONDOWN,
- SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
- SDL_QUITEV: (quit: TSDL_QuitEvent);
- //SDL_SYSWMEVENT,SDL_EVENT_RESERVEDA,SDL_EVENT_RESERVEDB
- SDL_VIDEORESIZE: (resize: TSDL_ResizeEvent);
- SDL_ALLEVENTS: (foo: shortstring);
-{$ENDIF}
end;
TSDL_EventFilter = function( event : PSDL_Event ): Integer; cdecl;
@@ -858,7 +691,6 @@
SDL_GL_MULTISAMPLEBUFFERS,
SDL_GL_MULTISAMPLESAMPLES,
SDL_GL_ACCELERATED_VISUAL,
-{$IFDEF SDL2}
SDL_GL_RETAINED_BACKING,
SDL_GL_CONTEXT_MAJOR_VERSION,
SDL_GL_CONTEXT_MINOR_VERSION,
@@ -866,12 +698,8 @@
SDL_GL_CONTEXT_FLAGS,
SDL_GL_CONTEXT_PROFILE_MASK,
SDL_GL_SHARE_WITH_CURRENT_CONTEXT
-{$ELSE}
- SDL_GL_SWAP_CONTROL
-{$ENDIF}
);
-{$IFDEF SDL2}
TSDL_ArrayByteOrder = ( // array component order, low Byte -> high Byte
SDL_ARRAYORDER_NONE,
SDL_ARRAYORDER_RGB,
@@ -881,7 +709,6 @@
SDL_ARRAYORDER_BGRA,
SDL_ARRAYORDER_ABGR
);
-{$ENDIF}
// Joystick/Controller support
PSDL_Joystick = ^TSDL_Joystick;
@@ -986,7 +813,6 @@
function SDL_RWFromFile(filename, mode: PChar): PSDL_RWops; cdecl; external SDLLibName;
function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: LongInt): LongInt; cdecl; external SDLLibName;
-{$IFDEF SDL2}
function SDL_CreateWindow(title: PChar; x,y,w,h: LongInt; flags: LongWord): PSDL_Window; cdecl; external SDLLibName;
function SDL_CreateRenderer(window: PSDL_Window; index: LongInt; flags: LongWord): PSDL_Renderer; cdecl; external SDLLibName;
function SDL_DestroyWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName;
@@ -996,7 +822,7 @@
function SDL_GL_CreateContext(window: PSDL_Window): PSDL_GLContext; cdecl; external SDLLibName;
procedure SDL_GL_DeleteContext(context: PSDL_GLContext); cdecl; external SDLLibName;
-function SDL_GL_SwapWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName;
+procedure SDL_GL_SwapWindow(window: PSDL_Window); cdecl; external SDLLibName;
function SDL_GL_SetSwapInterval(interval: LongInt): LongInt; cdecl; external SDLLibName;
procedure SDL_VideoQuit; cdecl; external SDLLibName;
@@ -1017,18 +843,12 @@
procedure SDL_WarpMouseInWindow(window: PSDL_Window; x, y: LongInt); cdecl; external SDLLibName;
function SDL_SetHint(name, value: PChar): Boolean; cdecl; external SDLLibName;
procedure SDL_StartTextInput; cdecl; external SDLLibName;
+procedure SDL_StopTextInput; cdecl; external SDLLibName;
function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; minType, maxType: LongWord): LongInt; cdecl; external SDLLibName;
function SDL_AllocFormat(format: LongWord): PSDL_PixelFormat; cdecl; external SDLLibName;
procedure SDL_FreeFormat(pixelformat: PSDL_PixelFormat); cdecl; external SDLLibName;
-{$ELSE}
-function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: TSDL_eventaction; mask: LongWord): LongInt; cdecl; external SDLLibName;
-
-function SDL_EnableUNICODE(enable: LongInt): LongInt; cdecl; external SDLLibName;
-function SDL_EnableKeyRepeat(timedelay, interval: LongInt): LongInt; cdecl; external SDLLibName;
-function SDL_VideoDriverName(namebuf: PChar; maxlen: LongInt): PChar; cdecl; external SDLLibName;
-{$ENDIF}
function SDL_GetMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
@@ -1043,8 +863,9 @@
procedure SDL_SetEventFilter(filter: TSDL_EventFilter); cdecl; external SDLLibName;
function SDL_ShowCursor(toggle: LongInt): LongInt; cdecl; external SDLLibName;
-procedure SDL_WarpMouse(x, y: Word); {$IFDEF SDL2}inline{$ELSE}cdecl; external SDLLibName{$ENDIF};
-function SDL_GetKeyState(numkeys: PLongInt): PByteArray; cdecl; external SDLLibName {$IFDEF SDL2} name 'SDL_GetKeyboardState'{$ENDIF};
+procedure SDL_WarpMouse(x, y: Word); inline;
+
+function SDL_GetKeyState(numkeys: PLongInt): PByteArray; cdecl; external SDLLibName name 'SDL_GetKeyboardState';
procedure SDL_WM_SetIcon(icon: PSDL_Surface; mask : Byte); cdecl; external SDLLibName;
procedure SDL_WM_SetCaption(title: PChar; icon: PChar); cdecl; external SDLLibName;
@@ -1053,14 +874,14 @@
(* remember to mark the threaded functions as 'cdecl; export;'
(or have fun debugging nil arguments) *)
-function SDL_CreateThread(fn: Pointer; {$IFDEF SDL2}name: PChar;{$ENDIF} data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
+function SDL_CreateThread(fn: Pointer; name: PChar; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
procedure SDL_WaitThread(thread: PSDL_Thread; status: PLongInt); cdecl; external SDLLibName;
procedure SDL_KillThread(thread: PSDL_Thread); cdecl; external SDLLibName;
function SDL_CreateMutex: PSDL_mutex; cdecl; external SDLLibName;
procedure SDL_DestroyMutex(mutex: PSDL_mutex); cdecl; external SDLLibName;
-function SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName {$IFNDEF SDL2}name 'SDL_mutexP'{$ENDIF};
-function SDL_UnlockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName {$IFNDEF SDL2}name 'SDL_mutexV'{$ENDIF};
+function SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName;
+function SDL_UnlockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName;
function SDL_GL_SetAttribute(attr: TSDL_GLattr; value: LongInt): LongInt; cdecl; external SDLLibName;
procedure SDL_GL_SwapBuffers; cdecl; external SDLLibName;
@@ -1172,7 +993,6 @@
function SDLNet_Read32(buf: Pointer): LongWord;
implementation
-{$IFDEF SDL2}
uses uStore;
// for sdl1.2 we directly call SDL_WarpMouse()
@@ -1183,16 +1003,11 @@
begin
WarpMouse(x, y);
end;
-{$ENDIF}
function SDL_MustLock(Surface: PSDL_Surface): Boolean;
begin
SDL_MustLock:=
-{$IFDEF SDL2}
((surface^.flags and SDL_RLEACCEL) <> 0)
-{$ELSE}
- ( surface^.offset <> 0 ) or (( surface^.flags and (SDL_HWSURFACE or SDL_ASYNCBLIT or SDL_RLEACCEL)) <> 0)
-{$ENDIF}
end;
{$IFNDEF SDL_MIXER_NEWER}
--- a/hedgewars/hwengine.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/hwengine.pas Tue Nov 10 20:43:13 2015 +0100
@@ -154,11 +154,7 @@
var event: TSDL_Event;
PrevTime, CurrTime: LongWord;
isTerminated: boolean;
-{$IFDEF SDL2}
previousGameState: TGameState;
-{$ELSE}
- prevFocusState: boolean;
-{$ENDIF}
begin
isTerminated:= false;
PrevTime:= SDL_GetTicks;
@@ -166,10 +162,9 @@
begin
SDL_PumpEvents();
- while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL2}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do
+ while SDL_PeepEvents(@event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT) > 0 do
begin
case event.type_ of
-{$IFDEF SDL2}
SDL_KEYDOWN:
if GameState = gsChat then
begin
@@ -182,6 +177,20 @@
if (GameState <> gsChat) and (GameState >= gsGame) then
ProcessKey(event.key);
+ SDL_MOUSEBUTTONDOWN:
+ if GameState = gsConfirm then
+ ParseCommand('quit', true)
+ else
+ if (GameState >= gsGame) then ProcessMouse(event.button, true);
+
+ SDL_MOUSEBUTTONUP:
+ if (GameState >= gsGame) then ProcessMouse(event.button, false);
+
+ SDL_MOUSEWHEEL:
+ ProcessMouseWheel(event.wheel.x, event.wheel.y);
+
+ SDL_TEXTINPUT: uChat.TextInput(event.text);
+
SDL_WINDOWEVENT:
if event.window.event = SDL_WINDOWEVENT_SHOWN then
begin
@@ -217,45 +226,6 @@
SDL_FINGERUP:
onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId);
{$ENDIF}
-{$ELSE}
- SDL_KEYDOWN:
- if GameState = gsChat then
- KeyPressChat(event.key.keysym.unicode, event.key.keysym.sym, event.key.keysym.modifier)
- else
- if GameState >= gsGame then ProcessKey(event.key);
- SDL_KEYUP:
- if (GameState <> gsChat) and (GameState >= gsGame) then
- ProcessKey(event.key);
-
- SDL_MOUSEBUTTONDOWN:
- if GameState = gsConfirm then
- ParseCommand('quit', true)
- else
- if (GameState >= gsGame) then ProcessMouse(event.button, true);
-
- SDL_MOUSEBUTTONUP:
- if (GameState >= gsGame) then ProcessMouse(event.button, false);
-
- SDL_ACTIVEEVENT:
- if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
- begin
- prevFocusState:= cHasFocus;
- cHasFocus:= event.active.gain = 1;
- if prevFocusState xor cHasFocus then
- onFocusStateChanged()
- end;
-
- SDL_VIDEORESIZE:
- begin
- // using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and off-screen widget parts
- // Change by sheepluva:
- // Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values.
- // Maybe just fixes the symptom not the actual cause(?), I'm too tired to find out :P
- cNewScreenWidth:= max(2 * (event.resize.w div 2), cMinScreenWidth);
- cNewScreenHeight:= max(2 * (event.resize.h div 2), cMinScreenHeight);
- cScreenResizeDelay:= RealTicks+500;
- end;
-{$ENDIF}
SDL_JOYAXISMOTION:
ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value);
SDL_JOYHATMOTION:
@@ -351,20 +321,16 @@
AddFileLog(inttostr(i) + ': ' + ParamStr(i));
WriteToConsole('Init SDL... ');
- if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
+ if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, 'SDL_Init', true);
WriteLnToConsole(msgOK);
-{$IFDEF SDL2}
- SDL_StartTextInput();
-{$ELSE}
- SDL_EnableUNICODE(1);
-{$ENDIF}
+ //SDL_StartTextInput();
SDL_ShowCursor(0);
if not cOnlyStats then
begin
WriteToConsole('Init SDL_ttf... ');
- SDLTry(TTF_Init() <> -1, true);
+ SDLTry(TTF_Init() <> -1, 'TTF_Init', true);
WriteLnToConsole(msgOK);
end;
--- a/hedgewars/options.inc Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/options.inc Tue Nov 10 20:43:13 2015 +0100
@@ -60,10 +60,6 @@
{$ENDIF}
{$ENDIF}
-{$IFDEF USE_TOUCH_INTERFACE}
- {$DEFINE SDL2}
-{$ENDIF}
-
{$DEFINE _S:=}
{$DEFINE _P:=}
--- a/hedgewars/uAI.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uAI.pas Tue Nov 10 20:43:13 2015 +0100
@@ -530,7 +530,7 @@
FillBonuses(((Me^.State and gstAttacked) <> 0) and (not isInMultiShoot));
SDL_LockMutex(ThreadLock);
-ThinkThread:= SDL_CreateThread(@Think{$IFDEF SDL2}, 'think'{$ENDIF}, Me);
+ThinkThread:= SDL_CreateThread(@Think, 'think', Me);
SDL_UnlockMutex(ThreadLock);
end;
--- a/hedgewars/uChat.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uChat.pas Tue Nov 10 20:43:13 2015 +0100
@@ -21,6 +21,7 @@
unit uChat;
interface
+uses SDLh;
procedure initModule;
procedure freeModule;
@@ -32,8 +33,10 @@
procedure SendHogSpeech(s: shortstring);
procedure CopyToClipboard(var newContent: shortstring);
+procedure TextInput(var event: TSDL_TextInputEvent);
+
implementation
-uses SDLh, uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript, uRenderUtils;
+uses uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript, uRenderUtils;
const MaxStrIndex = 27;
MaxInputStrLen = 200;
@@ -571,9 +574,7 @@
begin
FreezeEnterKey;
history:= 0;
-{$IFNDEF SDL2}
- SDL_EnableKeyRepeat(0,0);
-{$ENDIF}
+ SDL_StopTextInput();
GameState:= gsGame;
ResetKbd;
end;
@@ -781,6 +782,25 @@
end;
end;
+procedure TextInput(var event: TSDL_TextInputEvent);
+var s: shortstring;
+ l: byte;
+begin
+ DeleteSelected();
+
+ l:= 0;
+ while event.text[l] <> #0 do
+ begin
+ s[l + 1]:= event.text[l];
+ inc(l)
+ end;
+ s[0]:= char(l);
+
+ if byte(InputStr.s[0]) + l > 240 then exit;
+
+ InsertIntoInputStr(s);
+end;
+
procedure PasteFromClipboard();
begin
SendIPC(_S'Y');
@@ -1014,43 +1034,8 @@
else
action:= false;
end;
- if not action and (Key <> 0) then
- begin
- DeleteSelected();
- if (Key < $80) then
- btw:= 1
- else if (Key < $800) then
- btw:= 2
- else if (Key < $10000) then
- btw:= 3
- else
- btw:= 4;
-
- utf8:= '';
-
- for i:= btw downto 2 do
- begin
- utf8:= char((Key or $80) and $BF) + utf8;
- Key:= Key shr 6
- end;
-
- utf8:= char(Key or firstByteMark[Pred(btw)]) + utf8;
-
- if Length(InputStr.s) + btw > MaxInputStrLen then
- exit;
-
- // if speech bubble quotes are used as first input, add the closing quote and place cursor inbetween
- if (Length(InputStr.s) = 0) and (Length(utf8) = 1) and (charIsForHogSpeech(utf8[1])) then
- begin
- InsertIntoInputStr(utf8);
- InsertIntoInputStr(utf8);
- cursorPos:= 1;
- UpdateCursorCoords();
- end
- else
- InsertIntoInputStr(utf8);
- end
+ // TODO: ctrl+c etc. probably won't work anymore while in text input mode
end;
procedure chChatMessage(var s: shortstring);
@@ -1098,9 +1083,7 @@
begin
s:= s; // avoid compiler hint
GameState:= gsChat;
-{$IFNDEF SDL2}
- SDL_EnableKeyRepeat(200,45);
-{$ENDIF}
+ SDL_StartTextInput();
if length(s) = 0 then
SetLine(InputStr, '', true)
else
--- a/hedgewars/uDebug.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uDebug.pas Tue Nov 10 20:43:13 2015 +0100
@@ -24,7 +24,7 @@
procedure OutError(Msg: shortstring; isFatalError: boolean);
procedure TryDo(Assert: boolean; Msg: shortstring; isFatal: boolean); inline;
-procedure SDLTry(Assert: boolean; isFatal: boolean);
+procedure SDLTry(Assert: boolean; Msg: shortstring; isFatal: boolean);
implementation
uses SDLh, uConsole, uCommands, uConsts;
@@ -47,13 +47,13 @@
OutError(Msg, isFatal)
end;
-procedure SDLTry(Assert: boolean; isFatal: boolean);
+procedure SDLTry(Assert: boolean; Msg: shortstring; isFatal: boolean);
var s: shortstring;
begin
if not Assert then
begin
s:= SDL_GetError();
- OutError(s, isFatal)
+ OutError(Msg + ': ' + s, isFatal)
end
end;
--- a/hedgewars/uIO.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uIO.pas Tue Nov 10 20:43:13 2015 +0100
@@ -105,16 +105,16 @@
var ipaddr: TIPAddress;
begin
WriteToConsole('Init SDL_Net... ');
- SDLTry(SDLNet_Init = 0, true);
+ SDLTry(SDLNet_Init = 0, 'SDLNet_Init', true);
fds:= SDLNet_AllocSocketSet(1);
- SDLTry(fds <> nil, true);
+ SDLTry(fds <> nil, 'SDLNet_AllocSocketSet', true);
WriteLnToConsole(msgOK);
WriteToConsole('Establishing IPC connection to tcp 127.0.0.1:' + IntToStr(ipcPort) + ' ');
{$HINTS OFF}
- SDLTry(SDLNet_ResolveHost(ipaddr, PChar('127.0.0.1'), ipcPort) = 0, true);
+ SDLTry(SDLNet_ResolveHost(ipaddr, PChar('127.0.0.1'), ipcPort) = 0, 'SDLNet_ResolveHost', true);
{$HINTS ON}
IPCSock:= SDLNet_TCP_Open(ipaddr);
- SDLTry(IPCSock <> nil, true);
+ SDLTry(IPCSock <> nil, 'SDLNet_TCP_Open', true);
WriteLnToConsole(msgOK)
end;
--- a/hedgewars/uInputHandler.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uInputHandler.pas Tue Nov 10 20:43:13 2015 +0100
@@ -30,6 +30,7 @@
//procedure MaskModifier(var code: LongInt; modifier: LongWord);
procedure MaskModifier(Modifier: shortstring; var code: LongInt);
procedure ProcessMouse(event: TSDL_MouseButtonEvent; ButtonDown: boolean);
+procedure ProcessMouseWheel(x, y: LongInt);
procedure ProcessKey(event: TSDL_KeyboardEvent); inline;
procedure ProcessKey(code: LongInt; KeyDown: boolean);
@@ -82,8 +83,8 @@
var code: LongInt;
begin
name:= LowerCase(name);
- code:= cKeyMaxIndex;
- while (code > 0) and (KeyNames[code] <> name) do dec(code);
+ code:= 0;
+ while (code <= cKeyMaxIndex) and (KeyNames[code] <> name) do inc(code);
MaskModifier(Modifier, code);
KeyNameToCode:= code;
@@ -168,7 +169,13 @@
if CurrentBinds[code][0] <> #0 then
begin
- if (code > 3) and KeyDown and (not ((CurrentBinds[code] = 'put')) or (CurrentBinds[code] = 'ammomenu') or (CurrentBinds[code] = '+cur_u') or (CurrentBinds[code] = '+cur_d') or (CurrentBinds[code] = '+cur_l') or (CurrentBinds[code] = '+cur_r')) and (CurrentTeam <> nil) and (not CurrentTeam^.ExtDriven) then bShowAmmoMenu:= false;
+ if (code < cKeyMaxIndex - 2) // means not mouse buttons
+ and KeyDown
+ and (not ((CurrentBinds[code] = 'put')) or (CurrentBinds[code] = 'ammomenu') or (CurrentBinds[code] = '+cur_u') or (CurrentBinds[code] = '+cur_d') or (CurrentBinds[code] = '+cur_l') or (CurrentBinds[code] = '+cur_r'))
+ and (CurrentTeam <> nil)
+ and (not CurrentTeam^.ExtDriven)
+ then bShowAmmoMenu:= false;
+
if KeyDown then
begin
Trusted:= Trusted and (not isPaused); //releasing keys during pause should be allowed on the other hand
@@ -203,25 +210,35 @@
procedure ProcessKey(event: TSDL_KeyboardEvent); inline;
var code: LongInt;
begin
- code:= event.keysym.sym;
- //MaskModifier(code, event.keysym.modifier);
+ code:= event.keysym.scancode;
+ //writelntoconsole('[KEY] '+inttostr(code)+ ' -> ''' +KeyNames[code] + ''', type = '+inttostr(event.type_));
ProcessKey(code, event.type_ = SDL_KEYDOWN);
end;
procedure ProcessMouse(event: TSDL_MouseButtonEvent; ButtonDown: boolean);
begin
-case event.button of
- SDL_BUTTON_LEFT:
- ProcessKey(KeyNameToCode('mousel'), ButtonDown);
- SDL_BUTTON_MIDDLE:
- ProcessKey(KeyNameToCode('mousem'), ButtonDown);
- SDL_BUTTON_RIGHT:
- ProcessKey(KeyNameToCode('mouser'), ButtonDown);
- SDL_BUTTON_WHEELDOWN:
- ProcessKey(KeyNameToCode('wheeldown'), ButtonDown);
- SDL_BUTTON_WHEELUP:
- ProcessKey(KeyNameToCode('wheelup'), ButtonDown);
- end;
+ //writelntoconsole('[MOUSE] '+inttostr(event.button));
+ case event.button of
+ SDL_BUTTON_LEFT:
+ ProcessKey(KeyNameToCode('mousel'), ButtonDown);
+ SDL_BUTTON_MIDDLE:
+ ProcessKey(KeyNameToCode('mousem'), ButtonDown);
+ SDL_BUTTON_RIGHT:
+ ProcessKey(KeyNameToCode('mouser'), ButtonDown);
+ SDL_BUTTON_WHEELDOWN:
+ ProcessKey(KeyNameToCode('wheeldown'), ButtonDown);
+ SDL_BUTTON_WHEELUP:
+ ProcessKey(KeyNameToCode('wheelup'), ButtonDown);
+ end;
+end;
+
+procedure ProcessMouseWheel(x, y: LongInt);
+begin
+ //writelntoconsole('[MOUSEWHEEL] '+inttostr(x)+', '+inttostr(y));
+ if y > 0 then
+ ProcessKey(KeyNameToCode('wheelup'), true)
+ else if y < 0 then
+ ProcessKey(KeyNameToCode('wheeldown'), true);
end;
procedure ResetKbd;
@@ -232,125 +249,131 @@
ProcessKey(t, False);
end;
+
+procedure InitDefaultBinds;
+var i: Longword;
+begin
+ DefaultBinds[KeyNameToCode('escape')]:= 'quit';
+ DefaultBinds[KeyNameToCode(_S'`')]:= 'history';
+ DefaultBinds[KeyNameToCode('delete')]:= 'rotmask';
+
+ //numpad
+ //DefaultBinds[265]:= '+volup';
+ //DefaultBinds[256]:= '+voldown';
+
+ DefaultBinds[KeyNameToCode(_S'0')]:= '+volup';
+ DefaultBinds[KeyNameToCode(_S'9')]:= '+voldown';
+ DefaultBinds[KeyNameToCode(_S'8')]:= 'mute';
+ DefaultBinds[KeyNameToCode(_S'c')]:= 'capture';
+ DefaultBinds[KeyNameToCode(_S'r')]:= 'record';
+ DefaultBinds[KeyNameToCode(_S'h')]:= 'findhh';
+ DefaultBinds[KeyNameToCode(_S'p')]:= 'pause';
+ DefaultBinds[KeyNameToCode(_S's')]:= '+speedup';
+ DefaultBinds[KeyNameToCode(_S't')]:= 'chat';
+ DefaultBinds[KeyNameToCode(_S'y')]:= 'confirm';
+
+ DefaultBinds[KeyNameToCode('mousem')]:= 'zoomreset';
+ DefaultBinds[KeyNameToCode('wheelup')]:= 'zoomin';
+ DefaultBinds[KeyNameToCode('wheeldown')]:= 'zoomout';
+
+ DefaultBinds[KeyNameToCode('f12')]:= 'fullscr';
+
+
+ DefaultBinds[KeyNameToCode('mousel')]:= '/put';
+ DefaultBinds[KeyNameToCode('mouser')]:= 'ammomenu';
+ DefaultBinds[KeyNameToCode('backspace')]:= 'hjump';
+ DefaultBinds[KeyNameToCode('tab')]:= 'switch';
+ DefaultBinds[KeyNameToCode('return')]:= 'ljump';
+ DefaultBinds[KeyNameToCode('space')]:= '+attack';
+ DefaultBinds[KeyNameToCode('up')]:= '+up';
+ DefaultBinds[KeyNameToCode('down')]:= '+down';
+ DefaultBinds[KeyNameToCode('left')]:= '+left';
+ DefaultBinds[KeyNameToCode('right')]:= '+right';
+ DefaultBinds[KeyNameToCode('left_shift')]:= '+precise';
+
+
+ DefaultBinds[KeyNameToCode('j0a0u')]:= '+left';
+ DefaultBinds[KeyNameToCode('j0a0d')]:= '+right';
+ DefaultBinds[KeyNameToCode('j0a1u')]:= '+up';
+ DefaultBinds[KeyNameToCode('j0a1d')]:= '+down';
+ for i:= 1 to 10 do DefaultBinds[KeyNameToCode('f'+IntToStr(i))]:= 'slot '+IntToStr(i);
+ for i:= 1 to 5 do DefaultBinds[KeyNameToCode(IntToStr(i))]:= 'timer '+IntToStr(i);
+
+ loadBinds('dbind', cPathz[ptData] + '/settings.ini');
+end;
+
+
procedure InitKbdKeyTable;
var i, j, k, t: LongInt;
s: string[15];
begin
-//TODO in sdl13 this overrides some values (A and B) change indices to some other values at the back perhaps?
-KeyNames[1]:= 'mousel';
-KeyNames[2]:= 'mousem';
-KeyNames[3]:= 'mouser';
-KeyNames[4]:= 'wheelup';
-KeyNames[5]:= 'wheeldown';
+ KeyNames[cKeyMaxIndex ]:= 'mousel';
+ KeyNames[cKeyMaxIndex - 1]:= 'mousem';
+ KeyNames[cKeyMaxIndex - 2]:= 'mouser';
+ KeyNames[cKeyMaxIndex - 3]:= 'wheelup';
+ KeyNames[cKeyMaxIndex - 4]:= 'wheeldown';
-for i:= 6 to cKeyMaxIndex do
- begin
- s:= shortstring(sdl_getkeyname(i));
- //WriteLnToConsole('uInputHandler - ' + IntToStr(i) + ': ' + s + ' ' + IntToStr(cKeyMaxIndex));
- if s = 'unknown key' then KeyNames[i]:= ''
- else
+ for i:= 0 to cKeyMaxIndex - 5 do
begin
+ s:= shortstring(SDL_GetScancodeName(i));
+
for t:= 1 to Length(s) do
if s[t] = ' ' then
s[t]:= '_';
KeyNames[i]:= LowerCase(s)
end;
- end;
-// get the size of keyboard array
-SDL_GetKeyState(@k);
+ // get the size of keyboard array
+ SDL_GetKeyState(@k);
-// Controller(s)
-for j:= 0 to Pred(ControllerNumControllers) do
- begin
- for i:= 0 to Pred(ControllerNumAxes[j]) do
+ // Controller(s)
+ for j:= 0 to Pred(ControllerNumControllers) do
begin
- keynames[k + 0]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'u';
- keynames[k + 1]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'd';
- inc(k, 2);
- end;
- for i:= 0 to Pred(ControllerNumHats[j]) do
- begin
- keynames[k + 0]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'u';
- keynames[k + 1]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'r';
- keynames[k + 2]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'd';
- keynames[k + 3]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'l';
- inc(k, 4);
- end;
- for i:= 0 to Pred(ControllerNumButtons[j]) do
- begin
- keynames[k]:= 'j' + IntToStr(j) + 'b' + IntToStr(i);
- inc(k, 1);
+ for i:= 0 to Pred(ControllerNumAxes[j]) do
+ begin
+ KeyNames[k + 0]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'u';
+ KeyNames[k + 1]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'd';
+ inc(k, 2);
+ end;
+ for i:= 0 to Pred(ControllerNumHats[j]) do
+ begin
+ KeyNames[k + 0]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'u';
+ KeyNames[k + 1]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'r';
+ KeyNames[k + 2]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'd';
+ KeyNames[k + 3]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'l';
+ inc(k, 4);
+ end;
+ for i:= 0 to Pred(ControllerNumButtons[j]) do
+ begin
+ KeyNames[k]:= 'j' + IntToStr(j) + 'b' + IntToStr(i);
+ inc(k, 1);
+ end;
end;
- end;
-DefaultBinds[KeyNameToCode('escape')]:= 'quit';
-DefaultBinds[KeyNameToCode(_S'`')]:= 'history';
-DefaultBinds[KeyNameToCode('delete')]:= 'rotmask';
-
-//numpad
-//DefaultBinds[265]:= '+volup';
-//DefaultBinds[256]:= '+voldown';
-
-DefaultBinds[KeyNameToCode(_S'0')]:= '+volup';
-DefaultBinds[KeyNameToCode(_S'9')]:= '+voldown';
-DefaultBinds[KeyNameToCode(_S'8')]:= 'mute';
-DefaultBinds[KeyNameToCode(_S'c')]:= 'capture';
-DefaultBinds[KeyNameToCode(_S'r')]:= 'record';
-DefaultBinds[KeyNameToCode(_S'h')]:= 'findhh';
-DefaultBinds[KeyNameToCode(_S'p')]:= 'pause';
-DefaultBinds[KeyNameToCode(_S's')]:= '+speedup';
-DefaultBinds[KeyNameToCode(_S't')]:= 'chat';
-DefaultBinds[KeyNameToCode(_S'y')]:= 'confirm';
-
-DefaultBinds[KeyNameToCode('mousem')]:= 'zoomreset';
-DefaultBinds[KeyNameToCode('wheelup')]:= 'zoomin';
-DefaultBinds[KeyNameToCode('wheeldown')]:= 'zoomout';
-
-DefaultBinds[KeyNameToCode('f12')]:= 'fullscr';
+ InitDefaultBinds
+end;
-DefaultBinds[KeyNameToCode('mousel')]:= '/put';
-DefaultBinds[KeyNameToCode('mouser')]:= 'ammomenu';
-DefaultBinds[KeyNameToCode('backspace')]:= 'hjump';
-DefaultBinds[KeyNameToCode('tab')]:= 'switch';
-DefaultBinds[KeyNameToCode('return')]:= 'ljump';
-DefaultBinds[KeyNameToCode('space')]:= '+attack';
-DefaultBinds[KeyNameToCode('up')]:= '+up';
-DefaultBinds[KeyNameToCode('down')]:= '+down';
-DefaultBinds[KeyNameToCode('left')]:= '+left';
-DefaultBinds[KeyNameToCode('right')]:= '+right';
-DefaultBinds[KeyNameToCode('left_shift')]:= '+precise';
-
-DefaultBinds[KeyNameToCode('j0a0u')]:= '+left';
-DefaultBinds[KeyNameToCode('j0a0d')]:= '+right';
-DefaultBinds[KeyNameToCode('j0a1u')]:= '+up';
-DefaultBinds[KeyNameToCode('j0a1d')]:= '+down';
-for i:= 1 to 10 do DefaultBinds[KeyNameToCode('f'+IntToStr(i))]:= 'slot '+char(i+48);
-for i:= 1 to 5 do DefaultBinds[KeyNameToCode(IntToStr(i))]:= 'timer '+IntToStr(i);
-
-loadBinds('dbind', cPathz[ptData] + '/settings.ini');
-end;
-
+{$IFNDEF MOBILE}
procedure SetBinds(var binds: TBinds);
-{$IFNDEF MOBILE}
var
t: LongInt;
-{$ENDIF}
begin
-{$IFDEF MOBILE}
- binds:= binds; // avoid hint
- CurrentBinds:= DefaultBinds;
-{$ELSE}
for t:= 0 to cKbdMaxIndex do
if (CurrentBinds[t] <> binds[t]) and tkbd[t] then
ProcessKey(t, False);
CurrentBinds:= binds;
+end;
+{$ELSE}
+procedure SetBinds(var binds: TBinds);
+begin
+ binds:= binds; // avoid hint
+ CurrentBinds:= DefaultBinds;
+end;
{$ENDIF}
-end;
procedure SetDefaultBinds;
begin
--- a/hedgewars/uLand.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uLand.pas Tue Nov 10 20:43:13 2015 +0100
@@ -263,7 +263,7 @@
TryDo(Surface <> nil, 'Assert (LandSurface <> nil) failed', true);
if SDL_MustLock(Surface) then
- SDLTry(SDL_LockSurface(Surface) >= 0, true);
+ SDLTry(SDL_LockSurface(Surface) >= 0, 'SDL_LockSurface', true);
p:= Surface^.pixels;
for y:= 0 to LAND_HEIGHT - 1 do
@@ -451,7 +451,7 @@
cpX:= (LAND_WIDTH - tmpsurf^.w) div 2;
cpY:= LAND_HEIGHT - tmpsurf^.h;
if SDL_MustLock(tmpsurf) then
- SDLTry(SDL_LockSurface(tmpsurf) >= 0, true);
+ SDLTry(SDL_LockSurface(tmpsurf) >= 0, 'SDL_LockSurface', true);
p:= tmpsurf^.pixels;
for y:= 0 to Pred(tmpsurf^.h) do
--- a/hedgewars/uLandGraphics.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uLandGraphics.pas Tue Nov 10 20:43:13 2015 +0100
@@ -716,7 +716,7 @@
col:= Frame div numFramesFirstCol;
if SDL_MustLock(Image) then
- SDLTry(SDL_LockSurface(Image) >= 0, true);
+ SDLTry(SDL_LockSurface(Image) >= 0, 'TryPlaceOnLand', true);
bpp:= Image^.format^.BytesPerPixel;
TryDo(bpp = 4, 'It should be 32 bpp sprite', true);
@@ -835,7 +835,7 @@
col:= Frame div numFramesFirstCol;
if SDL_MustLock(Image) then
- SDLTry(SDL_LockSurface(Image) >= 0, true);
+ SDLTry(SDL_LockSurface(Image) >= 0, 'EraseLand', true);
bpp:= Image^.format^.BytesPerPixel;
TryDo(bpp = 4, 'It should be 32 bpp sprite', true);
@@ -918,7 +918,7 @@
col:= Frame div numFramesFirstCol;
if SDL_MustLock(Image) then
- SDLTry(SDL_LockSurface(Image) >= 0, true);
+ SDLTry(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true);
bpp:= Image^.format^.BytesPerPixel;
TryDo(bpp = 4, 'It should be 32 bpp sprite', true);
@@ -930,7 +930,7 @@
TryDo(finalSurface <> nil, 'GetPlaceCollisionTex: fail to create surface', true);
if SDL_MustLock(finalSurface) then
- SDLTry(SDL_LockSurface(finalSurface) >= 0, true);
+ SDLTry(SDL_LockSurface(finalSurface) >= 0, 'GetPlaceCollisionTex', true);
p:= PLongWordArray(@(PLongWordArray(Image^.pixels)^[ (Image^.pitch div 4) * row * h + col * w ]));
pt:= PLongWordArray(finalSurface^.pixels);
--- a/hedgewars/uLandObjects.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uLandObjects.pas Tue Nov 10 20:43:13 2015 +0100
@@ -109,7 +109,7 @@
WriteToConsole('Generating collision info... ');
if SDL_MustLock(Image) then
- SDLTry(SDL_LockSurface(Image) >= 0, true);
+ SDLTry(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true);
bpp:= Image^.format^.BytesPerPixel;
TryDo(bpp = 4, 'Land object should be 32bit', true);
@@ -160,7 +160,7 @@
WriteToConsole('Generating collision info... ');
if SDL_MustLock(Image) then
- SDLTry(SDL_LockSurface(Image) >= 0, true);
+ SDLTry(SDL_LockSurface(Image) >= 0, 'SDL_LockSurface', true);
bpp:= Image^.format^.BytesPerPixel;
TryDo(bpp = 4, 'Land object should be 32bit', true);
@@ -208,8 +208,8 @@
procedure InitRects;
begin
-RectCount:= 0;
-New(Rects)
+ RectCount:= 0;
+ New(Rects)
end;
procedure FreeRects;
@@ -365,7 +365,7 @@
CheckCanPlace:= bRes;
end;
-function TryPut(var Obj: TThemeObject): boolean; overload;
+function TryPut(var Obj: TThemeObject): boolean;
const MaxPointsIndex = 2047;
var x, y: Longword;
ar: array[0..MaxPointsIndex] of TPoint;
@@ -386,12 +386,12 @@
begin
ar[cnt].x:= x;
ar[cnt].y:= y;
- inc(cnt);
- if cnt > MaxPointsIndex then // buffer is full, do not check the rest land
+ if cnt >= MaxPointsIndex then // buffer is full, do not check the rest land
begin
y:= LAND_HEIGHT;
x:= LAND_WIDTH;
end
+ else inc(cnt);
end;
inc(y, 3);
until y >= LAND_HEIGHT - Height;
@@ -412,7 +412,7 @@
TryPut:= bRes;
end;
-function TryPut(var Obj: TSprayObject; Surface: PSDL_Surface): boolean; overload;
+function TryPut2(var Obj: TSprayObject; Surface: PSDL_Surface): boolean;
const MaxPointsIndex = 8095;
var x, y: Longword;
ar: array[0..MaxPointsIndex] of TPoint;
@@ -420,7 +420,7 @@
r: TSDL_Rect;
bRes: boolean;
begin
-TryPut:= false;
+TryPut2:= false;
cnt:= 0;
with Obj do
begin
@@ -439,18 +439,19 @@
begin
ar[cnt].x:= x;
ar[cnt].y:= y;
- inc(cnt);
- if cnt > MaxPointsIndex then // buffer is full, do not check the rest land
+ if cnt >= MaxPointsIndex then // buffer is full, do not check the rest land
begin
- y:= 5000;
- x:= 5000;
+ y:= $FF000000;
+ x:= $FF000000;
end
+ else inc(cnt);
end;
inc(y, 12);
until y >= LAND_HEIGHT - Height - 8;
inc(x, getrandom(12) + 12)
until x >= LAND_WIDTH - Width;
bRes:= cnt <> 0;
+AddFileLog('CHECKPOINT 004');
if bRes then
begin
i:= getrandom(cnt);
@@ -464,7 +465,7 @@
end
else Maxcnt:= 0
end;
-TryPut:= bRes;
+TryPut2:= bRes;
end;
@@ -845,13 +846,13 @@
exit;
WriteLnToConsole('Adding theme objects...');
- for i:=0 to ThemeObjects.Count do
+ for i:=0 to Pred(ThemeObjects.Count) do
ThemeObjects.objs[i].Maxcnt := max(1, (ThemeObjects.objs[i].Maxcnt * MaxHedgehogs) div 18); // Maxcnt is proportional to map size, but allow objects to span even if we're on a tiny map
repeat
t := getrandom(ThemeObjects.Count);
b := false;
- for i:=0 to ThemeObjects.Count do
+ for i:= 0 to Pred(ThemeObjects.Count) do
begin
ii := (i+t) mod ThemeObjects.Count;
@@ -869,18 +870,18 @@
exit;
WriteLnToConsole('Adding spray objects...');
- for i:=0 to SprayObjects.Count do
+ for i:= 0 to Pred(SprayObjects.Count) do
SprayObjects.objs[i].Maxcnt := max(1, (SprayObjects.objs[i].Maxcnt * MaxHedgehogs) div 18); // Maxcnt is proportional to map size, but allow objects to span even if we're on a tiny map
repeat
t := getrandom(SprayObjects.Count);
b := false;
- for i:=0 to SprayObjects.Count do
+ for i:= 0 to Pred(SprayObjects.Count) do
begin
ii := (i+t) mod SprayObjects.Count;
if SprayObjects.objs[ii].Maxcnt <> 0 then
- b := b or TryPut(SprayObjects.objs[ii], Surface)
+ b := b or TryPut2(SprayObjects.objs[ii], Surface)
end;
until not b;
end;
@@ -915,7 +916,6 @@
procedure AddOnLandObjects(Surface: PSDL_Surface);
begin
InitRects;
-//AddSprayObjects(Surface, SprayObjects, 12);
AddSprayObjects(Surface, SprayObjects);
FreeRects
end;
--- a/hedgewars/uMisc.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uMisc.pas Tue Nov 10 20:43:13 2015 +0100
@@ -30,11 +30,7 @@
function doSurfaceConversion(tmpsurf: PSDL_Surface): PSDL_Surface;
function MakeScreenshot(filename: shortstring; k: LongInt; dump: LongWord): boolean;
function GetTeamStatString(p: PTeam): shortstring;
-{$IFDEF SDL2}
function SDL_RectMake(x, y, width, height: LongInt): TSDL_Rect; inline;
-{$ELSE}
-function SDL_RectMake(x, y: SmallInt; width, height: Word): TSDL_Rect; inline;
-{$ENDIF}
implementation
uses SysUtils, uVariables, uUtils
@@ -303,7 +299,7 @@
image^.size:= size;
image^.buffer:= p;
-SDL_CreateThread(@SaveScreenshot{$IFDEF SDL2}, 'snapshot'{$ENDIF}, image);
+SDL_CreateThread(@SaveScreenshot, 'snapshot', image);
MakeScreenshot:= true; // possibly it is not true but we will not wait for thread to terminate
end;
@@ -321,11 +317,7 @@
end;
end;
-{$IFDEF SDL2}
function SDL_RectMake(x, y, width, height: LongInt): TSDL_Rect; inline;
-{$ELSE}
-function SDL_RectMake(x, y: SmallInt; width, height: Word): TSDL_Rect; inline;
-{$ENDIF}
begin
SDL_RectMake.x:= x;
SDL_RectMake.y:= y;
@@ -340,32 +332,15 @@
GetTeamStatString:= s;
end;
-{$IFDEF SDL2}
-// FIXME - pretty sure this is not handling endianness correctly like the SDL1 is
+procedure initModule;
const SDL_PIXELFORMAT_ABGR8888 = (1 shl 28) or (6 shl 24) or (7 shl 20) or (6 shl 16) or (32 shl 8) or 4;
-{$ELSE}
-const format: TSDL_PixelFormat = (
- palette: nil; BitsPerPixel: 32; BytesPerPixel: 4;
- Rloss: 0; Gloss: 0; Bloss: 0; Aloss: 0;
- Rshift: RShift; Gshift: GShift; Bshift: BShift; Ashift: AShift;
- RMask: RMask; GMask: GMask; BMask: BMask; AMask: AMask;
- colorkey: 0; alpha: 255);
-{$ENDIF}
-
-procedure initModule;
begin
-{$IFDEF SDL2}
conversionFormat:= SDL_AllocFormat(SDL_PIXELFORMAT_ABGR8888);
-{$ELSE}
- conversionFormat:= @format;
-{$ENDIF}
end;
procedure freeModule;
begin
-{$IFDEF SDL2}
SDL_FreeFormat(conversionFormat);
-{$ENDIF}
end;
end.
--- a/hedgewars/uRenderUtils.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uRenderUtils.pas Tue Nov 10 20:43:13 2015 +0100
@@ -99,7 +99,7 @@
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr);
finalRect.x:= X + cFontBorder + 2;
finalRect.y:= Y + cFontBorder;
- SDLTry(tmpsurf <> nil, true);
+ SDLTry(tmpsurf <> nil, 'TTF_RenderUTF8_Blended', true);
SDL_UpperBlit(tmpsurf, @textRect, Surface, @finalRect);
SDL_FreeSurface(tmpsurf);
finalRect.x:= X;
@@ -522,7 +522,7 @@
rect.x:= edgeHeight + 1 + ((i - w) div 2);
// trying to more evenly position the text, vertically
rect.y:= edgeHeight + ((j-(numLines*h)) div 2) + line * h;
- SDLTry(tmpsurf <> nil, true);
+ SDLTry(tmpsurf <> nil, 'TTF_Init', true);
SDL_UpperBlit(tmpsurf, nil, finalSurface, @rect);
SDL_FreeSurface(tmpsurf);
inc(line);
--- a/hedgewars/uSound.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uSound.pas Tue Nov 10 20:43:13 2015 +0100
@@ -322,7 +322,7 @@
end;
WriteToConsole('Init SDL_mixer... ');
- SDLTry(Mix_Init(MIX_INIT_OGG) <> 0, true);
+ SDLTry(Mix_Init(MIX_INIT_OGG) <> 0, 'Mix_Init', true);
WriteLnToConsole(msgOK);
Mix_AllocateChannels(Succ(chanTPU));
@@ -424,7 +424,7 @@
s:= cPathz[Soundz[snd].Path] + '/' + Soundz[snd].FileName;
WriteToConsole(msgLoading + s + ' ');
defVoicepack^.chunks[snd]:= Mix_LoadWAV_RW(rwopsOpenRead(s), 1);
- SDLTry(defVoicepack^.chunks[snd] <> nil, true);
+ SDLTry(defVoicepack^.chunks[snd] <> nil, 'Mix_LoadWAV_RW', true);
WriteLnToConsole(msgOK);
end;
lastChan[snd]:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], 0, -1)
@@ -523,7 +523,7 @@
s:= cPathz[Soundz[snd].Path] + '/' + Soundz[snd].FileName;
WriteToConsole(msgLoading + s + ' ');
defVoicepack^.chunks[snd]:= Mix_LoadWAV_RW(rwopsOpenRead(s), 1);
- SDLTry(defVoicepack^.chunks[snd] <> nil, true);
+ SDLTry(defVoicepack^.chunks[snd] <> nil, 'Mix_LoadWAV_RW', true);
WriteLnToConsole(msgOK);
end;
if fadems > 0 then
@@ -574,10 +574,10 @@
WriteToConsole(msgLoading + s + ' ');
Mus:= Mix_LoadMUS_RW(rwopsOpenRead(s));
- SDLTry(Mus <> nil, false);
+ SDLTry(Mus <> nil, 'Mix_LoadMUS_RW', false);
WriteLnToConsole(msgOK);
- SDLTry(Mix_FadeInMusic(Mus, -1, 3000) <> -1, false)
+ SDLTry(Mix_FadeInMusic(Mus, -1, 3000) <> -1, 'Mix_FadeInMusic', false)
end;
procedure SetVolume(vol: LongInt);
--- a/hedgewars/uStore.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uStore.pas Tue Nov 10 20:43:13 2015 +0100
@@ -55,25 +55,20 @@
procedure InitOffscreenOpenGL;
{$ENDIF}
-{$IFDEF SDL2}
procedure WarpMouse(x, y: Word); inline;
-{$ENDIF}
procedure SwapBuffers; {$IFDEF USE_VIDEO_RECORDING}cdecl{$ELSE}inline{$ENDIF};
procedure SetSkyColor(r, g, b: real);
implementation
uses uMisc, uConsole, uVariables, uUtils, uTextures, uRender, uRenderUtils,
uCommands, uPhysFSLayer, uDebug
- {$IFDEF USE_CONTEXT_RESTORE}, uWorld{$ENDIF}
- {$IF NOT DEFINED(SDL2) AND DEFINED(USE_VIDEO_RECORDING)}, glut {$ENDIF};
+ {$IFDEF USE_CONTEXT_RESTORE}, uWorld{$ENDIF};
-var
-{$IFDEF SDL2}
+//type TGPUVendor = (gvUnknown, gvNVIDIA, gvATI, gvIntel, gvApple);
+
+var
SDLwindow: PSDL_Window;
SDLGLcontext: PSDL_GLContext;
-{$ELSE}
- SDLPrimSurface: PSDL_Surface;
-{$ENDIF}
squaresize : LongInt;
numsquares : LongInt;
ProgrTex: PTexture;
@@ -117,9 +112,9 @@
clr.g:= (Color shr 8) and $FF;
clr.b:= Color and $FF;
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, s, clr);
-SDLTry(tmpsurf <> nil, true);
+SDLTry(tmpsurf <> nil, 'TTF_RenderUTF8_Blended', true);
tmpsurf:= doSurfaceConversion(tmpsurf);
-SDLTry(tmpsurf <> nil, true);
+SDLTry(tmpsurf <> nil, 'TTF_RenderUTF8_Blended, doSurfaceConversion', true);
SDL_UpperBlit(tmpsurf, nil, Surface, @finalRect);
SDL_FreeSurface(tmpsurf);
finalRect.x:= X;
@@ -361,7 +356,7 @@
s:= cPathz[ptFonts] + '/' + Name;
WriteToConsole(msgLoading + s + ' (' + inttostr(Height) + 'pt)... ');
Handle:= TTF_OpenFontRW(rwopsOpenRead(s), true, Height);
- SDLTry(Handle <> nil, true);
+ SDLTry(Handle <> nil, 'TTF_OpenFontRW', true);
TTF_SetFontStyle(Handle, style);
WriteLnToConsole(msgOK)
end;
@@ -610,7 +605,7 @@
// anounce that loading failed
OutError(msgFailed, false);
- SDLTry(false, (imageFlags and ifCritical) <> 0);
+ SDLTry(false, 'LoadImage', (imageFlags and ifCritical) <> 0);
// rwops was already freed by IMG_Load_RW
rwops:= nil;
end else
@@ -729,9 +724,6 @@
{$ELSE}
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
{$ENDIF}
-{$IFNDEF SDL2} // vsync is default in SDL2
- SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, LongInt((cReducedQuality and rqDesyncVBlank) = 0));
-{$ENDIF}
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
@@ -744,49 +736,22 @@
procedure SetupOpenGL;
var buf: array[byte] of char;
begin
+ AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_GetCurrentVideoDriver()) + ')');
-{$IFDEF SDL2}
- AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_GetCurrentVideoDriver()) + ')');
-{$ELSE}
- buf[0]:= char(0); // avoid compiler hint
- AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_VideoDriverName(buf, sizeof(buf))) + ')');
-{$ENDIF}
-
-{$IFDEF MOBILE}
// TODO: this function creates an opengles1.1 context
// un-comment below and add proper logic to support opengles2.0
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
if SDLGLcontext = nil then
SDLGLcontext:= SDL_GL_CreateContext(SDLwindow);
- SDLTry(SDLGLcontext <> nil, true);
- SDL_GL_SetSwapInterval(1);
-{$ENDIF}
+ SDLTry(SDLGLcontext <> nil, 'SDLGLcontext', true);
+ SDLTry(SDL_GL_SetSwapInterval(1) = 0, 'SDL_GL_SetSwapInterval', true);
RendererSetup();
+
+// gl2 init/matrix code was here, but removed
end;
-(*
-procedure UpdateProjection;
-var
- s: GLfloat;
-begin
- s:=cScaleFactor;
- mProjection[0,0]:= s/cScreenWidth; mProjection[0,1]:= 0.0; mProjection[0,2]:=0.0; mProjection[0,3]:= 0.0;
- mProjection[1,0]:= 0.0; mProjection[1,1]:= -s/cScreenHeight; mProjection[1,2]:=0.0; mProjection[1,3]:= 0.0;
- mProjection[2,0]:= 0.0; mProjection[2,1]:= 0.0; mProjection[2,2]:=1.0; mProjection[2,3]:= 0.0;
- mProjection[3,0]:= cStereoDepth; mProjection[3,1]:= s/2; mProjection[3,2]:=0.0; mProjection[3,3]:= 1.0;
-
-{$IFDEF GL2}
- UpdateModelviewProjection;
-{$ELSE}
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(@mProjection[0, 0]);
- glMatrixMode(GL_MODELVIEW);
-{$ENDIF}
-end;
-*)
-
////////////////////////////////////////////////////////////////////////////////
procedure AddProgress;
var r: TSDL_Rect;
@@ -1016,7 +981,6 @@
end;
{$IFDEF USE_VIDEO_RECORDING}
-{$IFDEF SDL2}
procedure InitOffscreenOpenGL;
begin
// create hidden window
@@ -1024,33 +988,16 @@
SDL_WINDOWPOS_CENTERED_MASK, SDL_WINDOWPOS_CENTERED_MASK,
cScreenWidth, cScreenHeight,
SDL_WINDOW_HIDDEN or SDL_WINDOW_OPENGL);
- SDLTry(SDLwindow <> nil, true);
+ SDLTry(SDLwindow <> nil, 'SDL_CreateWindow', true);
SetupOpenGL();
end;
-{$ELSE}
-procedure InitOffscreenOpenGL;
-var ArgCount: LongInt;
- PrgName: pchar;
-begin
- ArgCount:= 1;
- PrgName:= 'hwengine';
- glutInit(@ArgCount, @PrgName);
- glutInitWindowSize(cScreenWidth, cScreenHeight);
- // we do not need a window, but without this call OpenGL will not initialize
- glutCreateWindow('hedgewars video rendering (glut hidden window)');
- glutHideWindow();
- // we do not need to set this callback, but it is required for GLUT3 compat
- glutDisplayFunc(@SwapBuffers);
- RendererSetup();
-end;
-{$ENDIF} // SDL2
{$ENDIF} // USE_VIDEO_RECORDING
procedure chFullScr(var s: shortstring);
var flags: Longword = 0;
reinit: boolean = false;
{$IFNDEF DARWIN}ico: PSDL_Surface;{$ENDIF}
- {$IFDEF SDL2}x, y: LongInt;{$ENDIF}
+ x, y: LongInt;
begin
if cOnlyStats then
begin
@@ -1073,28 +1020,12 @@
end;
AddFileLog('Preparing to change video parameters...');
-{$IFDEF SDL2}
if SDLwindow = nil then
-{$ELSE}
- if SDLPrimSurface = nil then
-{$ENDIF}
begin
// set window title
- {$IFNDEF SDL2}
- SDL_WM_SetCaption(_P'Hedgewars', nil);
- {$ENDIF}
WriteToConsole('Init SDL_image... ');
- SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true);
+ SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, 'IMG_Init', true);
WriteLnToConsole(msgOK);
- // load engine icon
- {$IFNDEF DARWIN}
- ico:= LoadDataImage(ptGraphics, 'hwengine', ifIgnoreCaps);
- if ico <> nil then
- begin
- SDL_WM_SetIcon(ico, 0);
- SDL_FreeSurface(ico)
- end;
- {$ENDIF}
end
else
begin
@@ -1119,10 +1050,6 @@
//uTextures.freeModule; //DEBUG ONLY
{$ENDIF}
AddFileLog('Freeing old primary surface...');
- {$IFNDEF SDL2}
- SDL_FreeSurface(SDLPrimSurface);
- SDLPrimSurface:= nil;
- {$ENDIF}
{$ENDIF}
end;
@@ -1136,7 +1063,6 @@
*)
SetupOpenGLAttributes();
{$ENDIF}
-{$IFDEF SDL2}
// these values in x and y make the window appear in the center
x:= SDL_WINDOWPOS_CENTERED_MASK;
y:= SDL_WINDOWPOS_CENTERED_MASK;
@@ -1156,24 +1082,7 @@
if SDLwindow = nil then
SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags);
- SDLTry(SDLwindow <> nil, true);
-{$ELSE}
- flags:= SDL_OPENGL or SDL_RESIZABLE;
- if cFullScreen then
- flags:= flags or SDL_FULLSCREEN;
- if not cOnlyStats then
- begin
- {$IFDEF WIN32}
- s:= SDL_getenv('SDL_VIDEO_CENTERED');
- SDL_putenv('SDL_VIDEO_CENTERED=1');
- {$ENDIF}
- SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, 0, flags);
- SDLTry(SDLPrimSurface <> nil, true);
- {$IFDEF WIN32}
- SDL_putenv(str2pchar('SDL_VIDEO_CENTERED=' + s));
- {$ENDIF}
- end;
-{$ENDIF}
+ SDLTry(SDLwindow <> nil, 'SDL_CreateWindow', true);
SetupOpenGL();
@@ -1197,7 +1106,6 @@
end;
end;
-{$IFDEF SDL2}
// for sdl1.2 we directly call SDL_WarpMouse()
// for sdl2 we provide a SDL_WarpMouse() which just calls this function
// this has the advantage of reducing 'uses' and 'ifdef' statements
@@ -1206,17 +1114,12 @@
begin
SDL_WarpMouseInWindow(SDLwindow, x, y);
end;
-{$ENDIF}
procedure SwapBuffers; {$IFDEF USE_VIDEO_RECORDING}cdecl{$ELSE}inline{$ENDIF};
begin
if GameType = gmtRecord then
exit;
-{$IFDEF SDL2}
SDL_GL_SwapWindow(SDLwindow);
-{$ELSE}
- SDL_GL_SwapBuffers();
-{$ENDIF}
end;
procedure SetSkyColor(r, g, b: real);
@@ -1244,12 +1147,8 @@
// init all count texture pointers
for i:= Low(CountTexz) to High(CountTexz) do
CountTexz[i] := nil;
-{$IFDEF SDL2}
SDLwindow:= nil;
SDLGLcontext:= nil;
-{$ELSE}
- SDLPrimSurface:= nil;
-{$ENDIF}
prevHat:= 'NoHat';
tmpHatSurf:= nil;
@@ -1271,10 +1170,8 @@
end;
TTF_Quit();
-{$IFDEF SDL2}
SDL_GL_DeleteContext(SDLGLcontext);
SDL_DestroyWindow(SDLwindow);
-{$ENDIF}
SDL_Quit();
end;
end.
--- a/hedgewars/uTextures.pas Tue Nov 10 15:49:55 2015 +0100
+++ b/hedgewars/uTextures.pas Tue Nov 10 20:43:13 2015 +0100
@@ -236,7 +236,7 @@
glBindTexture(GL_TEXTURE_2D, Surface2Tex^.id);
if SDL_MustLock(surf) then
- SDLTry(SDL_LockSurface(surf) >= 0, true);
+ SDLTry(SDL_LockSurface(surf) >= 0, 'Lock surface', true);
fromP4:= Surf^.pixels;
--- a/misc/libphyslayer/CMakeLists.txt Tue Nov 10 15:49:55 2015 +0100
+++ b/misc/libphyslayer/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100
@@ -1,7 +1,14 @@
-find_package(SDL1or2)
+if(${NOSDL2})
+ find_package(SDL REQUIRED)
+ include_directories(${SDL_INCLUDE_DIR})
+else(${NOSDL2})
+ find_package(SDL2 REQUIRED)
+ include_directories(${SDL2_INCLUDE_DIR})
+ set(SDL_LIBRARY ${SDL2_LIBRARY})
+endif(${NOSDL2})
+
include_directories(${PHYSFS_INCLUDE_DIR})
-include_directories(${SDL_INCLUDE_DIR})
include_directories(${LUA_INCLUDE_DIR})
--- a/project_files/hedgewars.pro Tue Nov 10 15:49:55 2015 +0100
+++ b/project_files/hedgewars.pro Tue Nov 10 20:43:13 2015 +0100
@@ -277,8 +277,8 @@
}
!macx {
- LIBS += -lSDL -lSDL_mixer -lSDL_net
+ LIBS += -lSDL2 -lSDL2_mixer -lSDL2_net
!win32 {
- INCLUDEPATH += /usr/local/include/SDL /usr/include/SDL
+ INCLUDEPATH += /usr/local/include/SDL2 /usr/include/SDL2
}
}
--- a/tools/CMakeLists.txt Tue Nov 10 15:49:55 2015 +0100
+++ b/tools/CMakeLists.txt Tue Nov 10 20:43:13 2015 +0100
@@ -8,13 +8,14 @@
if(APPLE AND NOT SKIPBUNDLE)
find_package(Qt4 REQUIRED QUIET)
+ find_package(SDL2 REQUIRED)
+ find_package(SDL2_image REQUIRED)
+ find_package(SDL2_net REQUIRED)
+ find_package(SDL2_ttf REQUIRED)
+ find_package(SDL2_mixer REQUIRED)
+
find_package(PNG REQUIRED)
- find_package(SDL REQUIRED)
- find_package(SDL_image REQUIRED)
- find_package(SDL_net REQUIRED)
- find_package(SDL_ttf REQUIRED)
- find_package(SDL_mixer REQUIRED)
- find_package(OggVorbis REQUIRED)
+
if(NOT NOAUTOUPDATE)
find_package(Sparkle) #needed for SPARKLE_FOUND variable
#needed because the 'if' clause in the script prints silly policy warnings