GunChleoc has proposed merging lp:~widelands-dev/widelands/SDL2 into lp:widelands.
Requested reviews: SirVer (sirver) Related bugs: Bug #1380048 in widelands: "Port to SDL2" https://bugs.launchpad.net/widelands/+bug/1380048 For more details, see: https://code.launchpad.net/~widelands-dev/widelands/SDL2/+merge/239865 As discussed in the bug, this is done for merging. I still have 3 NOCOM comments in the code that need checking out by a Mac user. -- https://code.launchpad.net/~widelands-dev/widelands/SDL2/+merge/239865 Your team Widelands Developers is subscribed to branch lp:~widelands-dev/widelands/SDL2.
=== modified file 'CMakeLists.txt' --- CMakeLists.txt 2014-10-16 04:54:10 +0000 +++ CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -51,12 +51,12 @@ find_package(Gettext REQUIRED) find_package(OpenGL REQUIRED) find_package(PNG REQUIRED) -find_package(SDL REQUIRED) -find_package(SDL_gfx REQUIRED) -find_package(SDL_image REQUIRED) -find_package(SDL_mixer REQUIRED) -find_package(SDL_net REQUIRED) -find_package(SDL_ttf REQUIRED) +find_package(SDL2 REQUIRED) +find_package(SDL2_gfx REQUIRED) +find_package(SDL2_image REQUIRED) +find_package(SDL2_mixer REQUIRED) +find_package(SDL2_net REQUIRED) +find_package(SDL2_ttf REQUIRED) find_package(ZLIB REQUIRED) if (APPLE OR WIN32 OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") === modified file 'CREDITS' --- CREDITS 2014-07-14 10:45:44 +0000 +++ CREDITS 2014-10-28 15:04:08 +0000 @@ -8,12 +8,12 @@ The Widelands Development Team thanks the following projects: - libSDL - libSDL_mixer - libSDL_net - libSDL_image - libSDL_ttf - * All files from SDL-Project + libSDL2 + libSDL2_mixer + libSDL2_net + libSDL2_image + libSDL2_ttf + * All files from SDL2-Project * Project can be found at http://www.libsdl.org/ === removed file 'cmake/Modules/FindSDL.cmake' --- cmake/Modules/FindSDL.cmake 2010-03-28 19:12:31 +0000 +++ cmake/Modules/FindSDL.cmake 1970-01-01 00:00:00 +0000 @@ -1,186 +0,0 @@ -# Locate SDL library -# This module defines -# SDL_LIBRARY, the name of the library to link against -# SDL_FOUND, if false, do not try to link to SDL -# SDL_INCLUDE_DIR, where to find SDL.h -# -# This module responds to the the flag: -# SDL_BUILDING_LIBRARY -# If this is defined, then no SDL_main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the the proper link flags -# as part of the returned SDL_LIBRARY variable. -# -# Don't forget to include SDLmain.h and SDLmain.m your project for the -# OS X framework based version. (Other versions link to -lSDLmain which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# Additional Note: If you see an empty SDL_LIBRARY_TEMP in your configuration -# and no SDL_LIBRARY, it means CMake did not find your SDL library -# (SDL.dll, libsdl.so, SDL.framework, etc). -# Set SDL_LIBRARY_TEMP to point to your SDL library, and configure again. -# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this value -# as appropriate. These values are used to generate the final SDL_LIBRARY -# variable, but when these values are unset, SDL_LIBRARY does not get created. -# -# -# $SDLDIR is an environment variable that would -# correspond to the ./configure --prefix=$SDLDIR -# used in building SDL. -# l.e.galup 9-20-02 -# -# Modified by Eric Wing. -# Added code to assist with automated building by using environmental variables -# and providing a more controlled/consistent search behavior. -# Added new modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL guidelines. -# Added a search for SDLmain which is needed by some platforms. -# Added a search for threads which is needed by some platforms. -# Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of -# SDL_LIBRARY to override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL/SDL.h to just SDL.h -# This needed to change because "proper" SDL convention -# is #include "SDL.h", not <SDL/SDL.h>. This is done for portability -# reasons because not all systems place things in SDL/ (see FreeBSD). - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# 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 distributed this file outside of CMake, substitute the full -# License text for the above reference.) - -FIND_PATH(SDL_INCLUDE_DIR SDL.h - HINTS - $ENV{SDLDIR} - PATH_SUFFIXES include/SDL include - PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local/include/SDL12 - /usr/local/include/SDL11 # FreeBSD ports - /usr/include/SDL12 - /usr/include/SDL11 - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt - C:/MinGW #Win32 -) -#MESSAGE("SDL_INCLUDE_DIR is ${SDL_INCLUDE_DIR}") - -# SDL-1.1 is the name used by FreeBSD ports... -# don't confuse it for the version number. -FIND_LIBRARY(SDL_LIBRARY_TEMP - NAMES SDL SDL-1.1 - HINTS - $ENV{SDLDIR} - PATH_SUFFIXES lib64 lib - PATHS - /sw - /opt/local - /opt/csw - /opt - C:/MinGW -) - -#MESSAGE(STATUS "SDL_LIBRARY_TEMP is ${SDL_LIBRARY_TEMP}") - -IF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") -# Non-OS X framework versions expect you to also dynamically link to -# SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms -# seem to provide SDLmain for compatibility even though they don't -# necessarily need it. -FIND_LIBRARY(SDLMAIN_LIBRARY - NAMES SDLmain SDLmain-1.1 - HINTS - $ENV{SDLDIR} - PATH_SUFFIXES lib64 lib - PATHS - /sw - /opt/local - /opt/csw - /opt - C:/MinGW -) -ENDIF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") - -MESSAGE(STATUS "SDLMAIN_LIBRARY is ${SDLMAIN_LIBRARY}") - - -# SDL may require threads on your system. -# The Apple build may not need an explicit flag because one of the -# frameworks may already provide it. -# But for non-OSX systems, I will use the CMake Threads package. -IF(NOT APPLE) - FIND_PACKAGE(Threads) -ENDIF(NOT APPLE) - -# MinGW needs an additional library, mwindows -# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows -# (Actually on second look, I think it only needs one of the m* libraries.) -IF(MINGW) - SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") -ENDIF(MINGW) - -SET(SDL_FOUND "NO") -IF(SDL_LIBRARY_TEMP) - # For SDLmain - IF(NOT SDL_BUILDING_LIBRARY) - IF(SDLMAIN_LIBRARY) - SET(SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY} ${SDL_LIBRARY_TEMP}) - ENDIF(SDLMAIN_LIBRARY) - ENDIF(NOT SDL_BUILDING_LIBRARY) - - # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. - # CMake doesn't display the -framework Cocoa string in the UI even - # though it actually is there if I modify a pre-used variable. - # I think it has something to do with the CACHE STRING. - # So I use a temporary variable until the end so I can set the - # "real" variable in one-shot. - IF(APPLE) - SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") - ENDIF(APPLE) - - # For threads, as mentioned Apple doesn't need this. - # In fact, there seems to be a problem if I used the Threads package - # and try using this line, so I'm just skipping it entirely for OS X. - IF(NOT APPLE) - SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - ENDIF(NOT APPLE) - - # For MinGW library - IF(MINGW) - SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) - ENDIF(MINGW) - - # Set the final string here so the GUI reflects the final state. - SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") - # Set the temp variable to INTERNAL so it is not seen in the CMake GUI - SET(SDL_LIBRARY_TEMP "${SDL_LIBRARY_TEMP}" CACHE INTERNAL "") - IF(NOT SDLMAIN_LIBRARY) - IF(WIN32) - MESSAGE(FATAL_ERROR "$Could NOT find SDL (missing: SDLmain)") - ENDIF(WIN32) - ENDIF(NOT SDLMAIN_LIBRARY) - - SET(SDL_FOUND "YES") -ENDIF(SDL_LIBRARY_TEMP) - -#MESSAGE(STATUS "SDL_LIBRARY is ${SDL_LIBRARY}") - === added file 'cmake/Modules/FindSDL2.cmake' --- cmake/Modules/FindSDL2.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2.cmake 2014-10-28 15:04:08 +0000 @@ -0,0 +1,190 @@ +# Locate SDL2 library +# This module defines +# SDL2_LIBRARY, the name of the library to link against +# SDL2_FOUND, if false, do not try to link to SDL +# SDL2_INCLUDE_DIR, where to find SDL.h +# +# This module responds to the the flag: +# SDL2_BUILDING_LIBRARY +# If this is defined, then no SDL_main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the the proper link flags +# as part of the returned SDL_LIBRARY variable. +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDL2main which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration +# and no SDL2_LIBRARY, it means CMake did not find your SDL library +# (SDL.dll, libsdl.so, SDL.framework, etc). +# Set SDL_LIBRARY_TEMP to point to your SDL library, and configure again. +# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this value +# as appropriate. These values are used to generate the final SDL_LIBRARY +# variable, but when these values are unset, SDL_LIBRARY does not get created. +# +# +# $SDL2DIR is an environment variable that would +# correspond to the ./configure --prefix=$SDL2DIR +# used in building SDL. +# l.e.galup 9-20-02 +# +# Modified by Eric Wing. +# Added code to assist with automated building by using environmental variables +# and providing a more controlled/consistent search behavior. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDLmain which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# is #include "SDL.h", not <SDL/SDL.h>. This is done for portability +# reasons because not all systems place things in SDL/ (see FreeBSD). + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# 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 distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDL2_INCLUDE_DIR SDL.h + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES include/SDL2 include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL2 + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + C:/MinGW #Win32 +) +MESSAGE("SDL2_INCLUDE_DIR is ${SDL2_INCLUDE_DIR}") + +FIND_LIBRARY(SDL2_LIBRARY_TEMP + NAMES SDL2 + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES lib64 lib + PATHS + /sw + /opt/local + /opt/csw + /opt + C:/MinGW +) + +#MESSAGE(STATUS "SDL2_LIBRARY_TEMP is ${SDL2_LIBRARY_TEMP}") + +IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") +# Non-OS X framework versions expect you to also dynamically link to +# SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms +# seem to provide SDLmain for compatibility even though they don't +# necessarily need it. +FIND_LIBRARY(SDL2MAIN_LIBRARY + NAMES SDL2main + HINTS + $ENV{SDL2DIR} + PATH_SUFFIXES lib64 lib + PATHS + /sw + /opt/local + /opt/csw + /opt + C:/MinGW +) +ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") + +MESSAGE(STATUS "SDL2MAIN_LIBRARY is ${SDL2MAIN_LIBRARY}") + + +# SDL may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) + +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) + + +SET(SDL2_FOUND "NO") +IF(SDL2_LIBRARY_TEMP) + # For SDLmain + IF(NOT SDL2_BUILDING_LIBRARY) + IF(SDL2MAIN_LIBRARY) + SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) + ENDIF(SDL2MAIN_LIBRARY) + ENDIF(NOT SDL2_BUILDING_LIBRARY) + + # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + IF(APPLE) + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") + ENDIF(APPLE) + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + IF(NOT APPLE) + SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) + ENDIF(MINGW) + + # Set the final string here so the GUI reflects the final state. + SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") + SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP}) + + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") + IF(NOT SDL2MAIN_LIBRARY) + IF(WIN32) + MESSAGE(FATAL_ERROR "$Could NOT find SDL2 (missing: SDL2main)") + ENDIF(WIN32) + ENDIF(NOT SDL2MAIN_LIBRARY) + + IF(NOT SDL2_LIBRARY) + IF(WIN32) + MESSAGE(FATAL_ERROR "$Could NOT find SDL2 (missing: SDL2)") + ENDIF(WIN32) + ENDIF(NOT SDL2_LIBRARY) + + SET(SDL2_FOUND "YES") +ENDIF(SDL2_LIBRARY_TEMP) + +#MESSAGE(STATUS "SDL2_LIBRARY is ${SDL2_LIBRARY}") + === added file 'cmake/Modules/FindSDL2_gfx.cmake' --- cmake/Modules/FindSDL2_gfx.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2_gfx.cmake 2014-10-28 15:04:08 +0000 @@ -0,0 +1,60 @@ +# Locate SDL2_gfx library +# This module defines +# SDL2GFX_LIBRARY, the name of the library to link against +# SDL2GFX_FOUND, if false, do not try to link to SDL2 +# SDL2GFX_INCLUDE_DIR, where to find SDL2/SDL.h +# +# $SDLDIR 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 FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +FIND_PATH(SDL2GFX_INCLUDE_DIR SDL2_framerate.h + SDL2_gfxPrimitives.h + SDL2_imageFilter.h SDL2_rotozoom.h + HINTS + $ENV{SDL2GFXDIR} + $ENV{SDL2DIR} + PATH_SUFFIXES include SDL2 + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL2 + /usr/include/SDL2 + /usr/local/include + /usr/include + /sw/include/SDL2 # Fink + /sw/include + /opt/local/include/SDL2 # DarwinPorts + /opt/local/include + /opt/csw/include/SDL2 # Blastwave + /opt/csw/include + /opt/include/SDL2 + /opt/include +) + +FIND_LIBRARY(SDL2GFX_LIBRARY + NAMES SDL2_gfx + HINTS + $ENV{SDL2GFXDIR} + $ENV{SDL2DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +SET(SDL2GFX_FOUND "NO") +IF(SDL2GFX_LIBRARY AND SDL2GFX_INCLUDE_DIR) + SET(SDL2GFX_FOUND "YES") +ENDIF(SDL2GFX_LIBRARY AND SDL2GFX_INCLUDE_DIR) + === added file 'cmake/Modules/FindSDL2_image.cmake' --- cmake/Modules/FindSDL2_image.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2_image.cmake 2014-10-28 15:04:08 +0000 @@ -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 SDL_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 FindSDL.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}/SDL_image.h") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL_IMAGE_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL_IMAGE_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL_IMAGE_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_IMAGE_VERSION_MAJOR "${SDL_IMAGE_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_IMAGE_VERSION_MINOR "${SDL_IMAGE_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_IMAGE_VERSION_PATCH "${SDL_IMAGE_VERSION_PATCH_LINE}") + set(SDL_IMAGE_VERSION_STRING ${SDL_IMAGE_VERSION_MAJOR}.${SDL_IMAGE_VERSION_MINOR}.${SDL_IMAGE_VERSION_PATCH}) + unset(SDL_IMAGE_VERSION_MAJOR_LINE) + unset(SDL_IMAGE_VERSION_MINOR_LINE) + unset(SDL_IMAGE_VERSION_PATCH_LINE) + unset(SDL_IMAGE_VERSION_MAJOR) + unset(SDL_IMAGE_VERSION_MINOR) + unset(SDL_IMAGE_VERSION_PATCH) +endif() + +set(SDL2_IMAGE_LIBRARIES ${SDL2_IMAGE_LIBRARY}) +set(SDL2_IMAGE_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIR}) + +# include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +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) === added file 'cmake/Modules/FindSDL2_mixer.cmake' --- cmake/Modules/FindSDL2_mixer.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2_mixer.cmake 2014-10-28 15:04:08 +0000 @@ -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 SDL_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}/SDL_mixer.h") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL_MIXER_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MIXER_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL_MIXER_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MIXER_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL_MIXER_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_MIXER_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_MIXER_VERSION_MAJOR "${SDL_MIXER_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_MIXER_VERSION_MINOR "${SDL_MIXER_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_MIXER_VERSION_PATCH "${SDL_MIXER_VERSION_PATCH_LINE}") + set(SDL2_MIXER_VERSION_STRING ${SDL_MIXER_VERSION_MAJOR}.${SDL_MIXER_VERSION_MINOR}.${SDL_MIXER_VERSION_PATCH}) + unset(SDL_MIXER_VERSION_MAJOR_LINE) + unset(SDL_MIXER_VERSION_MINOR_LINE) + unset(SDL_MIXER_VERSION_PATCH_LINE) + unset(SDL_MIXER_VERSION_MAJOR) + unset(SDL_MIXER_VERSION_MINOR) + unset(SDL_MIXER_VERSION_PATCH) +endif() + +set(SDL2_MIXER_LIBRARIES ${SDL2_MIXER_LIBRARY}) +set(SDL2_MIXER_INCLUDE_DIRS ${SDL2_MIXER_INCLUDE_DIR}) + +# include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +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) === added file 'cmake/Modules/FindSDL2_net.cmake' --- cmake/Modules/FindSDL2_net.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2_net.cmake 2014-10-28 15:04:08 +0000 @@ -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}/SDL_net.h") + file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL_net.h" SDL_NET_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_NET_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL_net.h" SDL_NET_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_NET_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_NET_INCLUDE_DIR}/SDL_net.h" SDL_NET_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_NET_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_NET_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_NET_VERSION_MAJOR "${SDL_NET_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_NET_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_NET_VERSION_MINOR "${SDL_NET_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_NET_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_NET_VERSION_PATCH "${SDL_NET_VERSION_PATCH_LINE}") + set(SDL2_NET_VERSION_STRING ${SDL_NET_VERSION_MAJOR}.${SDL_NET_VERSION_MINOR}.${SDL_NET_VERSION_PATCH}) + unset(SDL_NET_VERSION_MAJOR_LINE) + unset(SDL_NET_VERSION_MINOR_LINE) + unset(SDL_NET_VERSION_PATCH_LINE) + unset(SDL_NET_VERSION_MAJOR) + unset(SDL_NET_VERSION_MINOR) + unset(SDL_NET_VERSION_PATCH) +endif() + +set(SDL2_NET_LIBRARIES ${SDL2_NET_LIBRARY}) +set(SDL2_NET_INCLUDE_DIRS ${SDL2_NET_INCLUDE_DIR}) + +# include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +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) === added file 'cmake/Modules/FindSDL2_ttf.cmake' --- cmake/Modules/FindSDL2_ttf.cmake 1970-01-01 00:00:00 +0000 +++ cmake/Modules/FindSDL2_ttf.cmake 2014-10-28 15:04:08 +0000 @@ -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}/SDL_ttf.h") + file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL_TTF_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL_TTF_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL_TTF_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_TTF_VERSION_MAJOR "${SDL_TTF_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_TTF_VERSION_MINOR "${SDL_TTF_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_TTF_VERSION_PATCH "${SDL_TTF_VERSION_PATCH_LINE}") + set(SDL2_TTF_VERSION_STRING ${SDL_TTF_VERSION_MAJOR}.${SDL_TTF_VERSION_MINOR}.${SDL_TTF_VERSION_PATCH}) + unset(SDL_TTF_VERSION_MAJOR_LINE) + unset(SDL_TTF_VERSION_MINOR_LINE) + unset(SDL_TTF_VERSION_PATCH_LINE) + unset(SDL_TTF_VERSION_MAJOR) + unset(SDL_TTF_VERSION_MINOR) + unset(SDL_TTF_VERSION_PATCH) +endif() + +set(SDL2_TTF_LIBRARIES ${SDL2_TTF_LIBRARY}) +set(SDL2_TTF_INCLUDE_DIRS ${SDL2_TTF_INCLUDE_DIR}) + +# include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +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) === removed file 'cmake/Modules/FindSDL_gfx.cmake' --- cmake/Modules/FindSDL_gfx.cmake 2013-01-24 11:42:08 +0000 +++ cmake/Modules/FindSDL_gfx.cmake 1970-01-01 00:00:00 +0000 @@ -1,64 +0,0 @@ -# Locate SDL_gfx library -# This module defines -# SDLGFX_LIBRARY, the name of the library to link against -# SDLGFX_FOUND, if false, do not try to link to SDL -# SDLGFX_INCLUDE_DIR, where to find SDL/SDL.h -# -# $SDLDIR is an environment variable that would -# correspond to the ./configure --prefix=$SDLDIR -# used in building SDL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). - -FIND_PATH(SDLGFX_INCLUDE_DIR SDL_framerate.h SDL_gfxBlitFunc.h - SDL_gfxPrimitives.h SDL_gfxPrimitives_font.h - SDL_imageFilter.h SDL_rotozoom.h - HINTS - $ENV{SDLGFXDIR} - $ENV{SDLDIR} - PATH_SUFFIXES include SDL - PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local/include/SDL - /usr/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 # FreeBSD ports - /usr/include/SDL12 - /usr/include/SDL11 - /usr/local/include - /usr/include - /sw/include/SDL # Fink - /sw/include - /opt/local/include/SDL # DarwinPorts - /opt/local/include - /opt/csw/include/SDL # Blastwave - /opt/csw/include - /opt/include/SDL - /opt/include -) - -FIND_LIBRARY(SDLGFX_LIBRARY - NAMES SDL_gfx - HINTS - $ENV{SDLGFXDIR} - $ENV{SDLDIR} - PATH_SUFFIXES lib64 lib - PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /sw - /opt/local - /opt/csw - /opt -) - -SET(SDLGFX_FOUND "NO") -IF(SDLGFX_LIBRARY AND SDLGFX_INCLUDE_DIR) - SET(SDLGFX_FOUND "YES") -ENDIF(SDLGFX_LIBRARY AND SDLGFX_INCLUDE_DIR) - === modified file 'cmake/WlFunctions.cmake' --- cmake/WlFunctions.cmake 2014-07-17 14:34:32 +0000 +++ cmake/WlFunctions.cmake 2014-10-28 15:04:08 +0000 @@ -9,12 +9,12 @@ USES_INTL USES_OPENGL USES_PNG - USES_SDL - USES_SDL_GFX - USES_SDL_IMAGE - USES_SDL_MIXER - USES_SDL_NET - USES_SDL_TTF + USES_SDL2 + USES_SDL2_GFX + USES_SDL2_IMAGE + USES_SDL2_MIXER + USES_SDL2_NET + USES_SDL2_TTF USES_ZLIB ) set(ONE_VALUE_ARG ) @@ -98,34 +98,34 @@ target_link_libraries(${NAME} ${PNG_LIBRARY}) endif() - if(ARG_USES_SDL) - wl_include_system_directories(${NAME} ${SDL_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDL_LIBRARY}) - endif() - - if(ARG_USES_SDL_MIXER) - wl_include_system_directories(${NAME} ${SDLMIXER_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDLMIXER_LIBRARY}) - endif() - - if(ARG_USES_SDL_NET) - wl_include_system_directories(${NAME} ${SDLNET_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDLNET_LIBRARY}) - endif() - - if(ARG_USES_SDL_IMAGE) - wl_include_system_directories(${NAME} ${SDLIMAGE_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDLIMAGE_LIBRARY}) - endif() - - if(ARG_USES_SDL_GFX) - wl_include_system_directories(${NAME} ${SDLGFX_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDLGFX_LIBRARY}) - endif() - - if(ARG_USES_SDL_TTF) - wl_include_system_directories(${NAME} ${SDLTTF_INCLUDE_DIR}) - target_link_libraries(${NAME} ${SDLTTF_LIBRARY}) + if(ARG_USES_SDL2) + wl_include_system_directories(${NAME} ${SDL2_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2_LIBRARY}) + endif() + + if(ARG_USES_SDL2_MIXER) + wl_include_system_directories(${NAME} ${SDL2MIXER_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2MIXER_LIBRARY}) + endif() + + if(ARG_USES_SDL2_NET) + wl_include_system_directories(${NAME} ${SDL2NET_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2NET_LIBRARY}) + endif() + + if(ARG_USES_SDL2_IMAGE) + wl_include_system_directories(${NAME} ${SDL2IMAGE_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2IMAGE_LIBRARY}) + endif() + + if(ARG_USES_SDL2_GFX) + wl_include_system_directories(${NAME} ${SDL2GFX_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2GFX_LIBRARY}) + endif() + + if(ARG_USES_SDL2_TTF) + wl_include_system_directories(${NAME} ${SDL2TTF_INCLUDE_DIR}) + target_link_libraries(${NAME} ${SDL2TTF_LIBRARY}) endif() if (ARG_USES_INTL) @@ -176,10 +176,10 @@ endif() target_link_libraries(${NAME} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) - # Tests need to link with SDL library without main. - set(SDL_LIBRARY_TEMP ${SDL_LIBRARY}) - list(REMOVE_ITEM SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY}) - target_link_libraries(${NAME} ${SDL_LIBRARY_TEMP}) + # Tests need to link with SDL2 library without main. + set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY}) + list(REMOVE_ITEM SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY}) + target_link_libraries(${NAME} ${SDL2_LIBRARY_TEMP}) _common_compile_tasks() === modified file 'cmake/codecheck/rules/correct_include_order' --- cmake/codecheck/rules/correct_include_order 2013-07-26 20:19:36 +0000 +++ cmake/codecheck/rules/correct_include_order 2014-10-28 15:04:08 +0000 @@ -70,7 +70,7 @@ if blocks and blocks[0][0][1] == "<": # library includes. for lineno, delimiter, header in blocks[0]: if '.h' not in header or delimiter != "<": - errors.append((fn, lineno, "This include block must only contain library headers (e.g. SDL).")) + errors.append((fn, lineno, "This include block must only contain library headers (e.g. SDL2).")) return errors blocks.pop(0) @@ -95,7 +95,7 @@ allowed = [ """#include <memory> -#include <SDL.h> +#include <SDL2.h> """, """ @@ -120,7 +120,7 @@ ################### forbidden = [ """ -#include <SDL.h> +#include <SDL2.h> #include <memory> """, @@ -133,7 +133,7 @@ """ #include <memory> -#include <SDL.h> +#include <SDL2.h> """ ] === modified file 'src/CMakeLists.txt' --- src/CMakeLists.txt 2014-09-16 09:54:41 +0000 +++ src/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -43,7 +43,7 @@ SRCS main.cc ${WIN32_ICON_O} - USES_SDL + USES_SDL2 DEPENDS base_log base_exceptions @@ -54,7 +54,7 @@ wl_binary(widelands SRCS main.cc - USES_SDL + USES_SDL2 DEPENDS base_log base_exceptions @@ -92,7 +92,7 @@ wlapplication.h wlapplication_messages.cc wlapplication_messages.h - USES_SDL + USES_SDL2 DEPENDS base_exceptions base_geometry @@ -122,7 +122,7 @@ SRCS helper.cc helper.h - USES_SDL + USES_SDL2 DEPENDS base_exceptions ) === modified file 'src/base/CMakeLists.txt' --- src/base/CMakeLists.txt 2014-08-28 06:58:29 +0000 +++ src/base/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -58,7 +58,7 @@ SRCS scoped_timer.h scoped_timer.cc - USES_SDL + USES_SDL2 DEPENDS base_log base_macros === modified file 'src/editor/CMakeLists.txt' --- src/editor/CMakeLists.txt 2014-07-05 13:14:42 +0000 +++ src/editor/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -83,7 +83,7 @@ ui_menus/editor_tool_set_terrain_options_menu.h ui_menus/editor_toolsize_menu.cc ui_menus/editor_toolsize_menu.h - USES_SDL + USES_SDL2 DEPENDS base_exceptions base_i18n === modified file 'src/editor/editorinteractive.cc' --- src/editor/editorinteractive.cc 2014-09-19 12:54:54 +0000 +++ src/editor/editorinteractive.cc 2014-10-28 15:04:08 +0000 @@ -23,7 +23,7 @@ #include <string> #include <vector> -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include <boost/format.hpp> #include "base/i18n.h" @@ -344,7 +344,7 @@ } -bool EditorInteractive::handle_key(bool const down, SDL_keysym const code) { +bool EditorInteractive::handle_key(bool const down, SDL_Keysym const code) { bool handled = InteractiveBase::handle_key(down, code); if (down) { @@ -393,16 +393,16 @@ handled = true; break; - case SDLK_LSHIFT: - case SDLK_RSHIFT: + case SDL_SCANCODE_LSHIFT: + case SDL_SCANCODE_RSHIFT: if (tools.use_tool == EditorTool::First) select_tool(tools.current(), EditorTool::Second); handled = true; break; - case SDLK_LALT: - case SDLK_RALT: - case SDLK_MODE: + case SDL_SCANCODE_LALT: + case SDL_SCANCODE_RALT: + case SDL_SCANCODE_MODE: if (tools.use_tool == EditorTool::First) select_tool(tools.current(), EditorTool::Third); handled = true; @@ -481,11 +481,11 @@ } else { // key up events switch (code.sym) { - case SDLK_LSHIFT: - case SDLK_RSHIFT: - case SDLK_LALT: - case SDLK_RALT: - case SDLK_MODE: + case SDL_SCANCODE_LSHIFT: + case SDL_SCANCODE_RSHIFT: + case SDL_SCANCODE_LALT: + case SDL_SCANCODE_RALT: + case SDL_SCANCODE_MODE: if (tools.use_tool != EditorTool::First) select_tool(tools.current(), EditorTool::First); handled = true; === modified file 'src/editor/editorinteractive.h' --- src/editor/editorinteractive.h 2014-09-14 11:31:58 +0000 +++ src/editor/editorinteractive.h 2014-10-28 15:04:08 +0000 @@ -66,7 +66,7 @@ void set_sel_radius_and_update_menu(uint32_t); // Handle UI elements. - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; bool handle_mousepress(uint8_t btn, int32_t x, int32_t y) override; bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y) override; === modified file 'src/editor/ui_menus/categorized_item_selection_menu.h' --- src/editor/ui_menus/categorized_item_selection_menu.h 2014-09-10 14:48:40 +0000 +++ src/editor/ui_menus/categorized_item_selection_menu.h 2014-10-28 15:04:08 +0000 @@ -144,7 +144,7 @@ // TODO(unknown): This code is erroneous. It checks the current key state. What it // needs is the key state at the time the mouse was clicked. See the // usage comment for get_key_state. - const bool multiselect = get_key_state(SDLK_LCTRL) | get_key_state(SDLK_RCTRL); + const bool multiselect = get_key_state(SDL_SCANCODE_LCTRL) | get_key_state(SDL_SCANCODE_RCTRL); if (!t && (!multiselect || tool_->get_nr_enabled() == 1)) checkboxes_[n]->set_state(true); else { === modified file 'src/editor/ui_menus/editor_main_menu_load_map.cc' --- src/editor/ui_menus/editor_main_menu_load_map.cc 2014-10-28 08:16:53 +0000 +++ src/editor/ui_menus/editor_main_menu_load_map.cc 2014-10-28 15:04:08 +0000 @@ -65,6 +65,7 @@ get_inner_w() / 2 - spacing, get_inner_h() - spacing - offsy - 40); m_ls->selected.connect(boost::bind(&MainMenuLoadMap::selected, this, _1)); m_ls->double_clicked.connect(boost::bind(&MainMenuLoadMap::double_clicked, this, _1)); + m_ls->focus(); posx = get_inner_w() / 2 + spacing; new UI::Textarea === modified file 'src/editor/ui_menus/editor_main_menu_save_map.cc' --- src/editor/ui_menus/editor_main_menu_save_map.cc 2014-10-28 08:16:53 +0000 +++ src/editor/ui_menus/editor_main_menu_save_map.cc 2014-10-28 15:04:08 +0000 @@ -67,6 +67,7 @@ get_inner_w() / 2 - spacing, get_inner_h() - spacing - offsy - 60); m_ls->clicked.connect(boost::bind(&MainMenuSaveMap::clicked_item, this, _1)); m_ls->double_clicked.connect(boost::bind(&MainMenuSaveMap::double_clicked_item, this, _1)); + m_ls->focus(); m_editbox = new UI::EditBox (this, === modified file 'src/editor/ui_menus/editor_tool_place_bob_options_menu.cc' --- src/editor/ui_menus/editor_tool_place_bob_options_menu.cc 2014-09-10 14:08:25 +0000 +++ src/editor/ui_menus/editor_tool_place_bob_options_menu.cc 2014-10-28 15:04:08 +0000 @@ -19,7 +19,7 @@ #include "editor/ui_menus/editor_tool_place_bob_options_menu.h" -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include "base/i18n.h" #include "base/macros.h" @@ -124,7 +124,7 @@ // TODO(unknown): needs is the key state at the time the mouse was clicked. See the // TODO(unknown): usage comment for get_key_state. const bool multiselect = - get_key_state(SDLK_LCTRL) | get_key_state(SDLK_RCTRL); + get_key_state(SDL_SCANCODE_LCTRL) | get_key_state(SDL_SCANCODE_RCTRL); if (!t && (!multiselect || m_pit.get_nr_enabled() == 1)) { m_checkboxes[n]->set_state(true); return; === modified file 'src/editor/ui_menus/editor_tool_place_immovable_options_menu.cc' --- src/editor/ui_menus/editor_tool_place_immovable_options_menu.cc 2014-09-10 14:08:25 +0000 +++ src/editor/ui_menus/editor_tool_place_immovable_options_menu.cc 2014-10-28 15:04:08 +0000 @@ -19,7 +19,7 @@ #include "editor/ui_menus/editor_tool_place_immovable_options_menu.h" -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include "base/i18n.h" #include "editor/editorinteractive.h" === modified file 'src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc' --- src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc 2014-10-27 10:14:10 +0000 +++ src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc 2014-10-28 15:04:08 +0000 @@ -21,7 +21,7 @@ #include <memory> -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include <boost/format.hpp> #include "base/i18n.h" === modified file 'src/graphic/CMakeLists.txt' --- src/graphic/CMakeLists.txt 2014-07-15 05:12:37 +0000 +++ src/graphic/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -4,7 +4,7 @@ SRCS color.h color.cc - USES_SDL + USES_SDL2 ) wl_library(graphic_image_io @@ -12,8 +12,8 @@ image_io.h image_io.cc USES_PNG - USES_SDL - USES_SDL_IMAGE + USES_SDL2 + USES_SDL2_IMAGE DEPENDS base_exceptions graphic_surface @@ -27,8 +27,8 @@ image.h image_cache.cc image_cache.h - USES_SDL - USES_SDL_IMAGE + USES_SDL2 + USES_SDL2_IMAGE DEPENDS base_log base_macros @@ -56,7 +56,7 @@ surface_cache.cc surface_cache.h USES_OPENGL - USES_SDL + USES_SDL2 DEPENDS base_macros base_exceptions @@ -110,10 +110,10 @@ wordwrap.cc wordwrap.h USES_OPENGL - USES_SDL - USES_SDL_GFX - USES_SDL_IMAGE - USES_SDL_TTF + USES_SDL2 + USES_SDL2_GFX + USES_SDL2_IMAGE + USES_SDL2_TTF DEPENDS base_deprecated base_exceptions === modified file 'src/graphic/font_handler.cc' --- src/graphic/font_handler.cc 2014-09-14 11:31:58 +0000 +++ src/graphic/font_handler.cc 2014-10-28 15:04:08 +0000 @@ -175,7 +175,7 @@ void FontHandler::Data::render_line(LineCacheEntry & lce) { TTF_Font * font = lce.style.font->get_ttf_font(); - SDL_Color sdl_fg = {lce.style.fg.r, lce.style.fg.g, lce.style.fg.b, 0}; + SDL_Color sdl_fg = {lce.style.fg.r, lce.style.fg.g, lce.style.fg.b, SDL_ALPHA_OPAQUE}; // Work around an Issue in SDL_TTF that dies when the surface // has zero width === modified file 'src/graphic/graphic.cc' --- src/graphic/graphic.cc 2014-09-20 09:37:47 +0000 +++ src/graphic/graphic.cc 2014-10-28 15:04:08 +0000 @@ -54,9 +54,8 @@ Graphic * g_gr; bool g_opengl; -#define FALLBACK_GRAPHICS_WIDTH 800 -#define FALLBACK_GRAPHICS_HEIGHT 600 -#define FALLBACK_GRAPHICS_DEPTH 32 +constexpr int kFallbackGraphicsWidth = 800; +constexpr int kFallbackGraphicsHeight = 600; namespace { @@ -71,9 +70,8 @@ */ Graphic::Graphic() : - m_fallback_settings_in_effect (false), - m_nr_update_rects (0), - m_update_fullscreen(true), + m_fallback_settings_in_effect(false), + m_update(true), surface_cache_(create_surface_cache(TRANSIENT_SURFACE_CACHE_SIZE)), image_cache_(new ImageCache(surface_cache_.get())), animation_manager_(new AnimationManager()) @@ -85,9 +83,11 @@ #else const std::string icon_name = "pics/wl-ico-32.png"; #endif - SDL_Surface* s = load_image_as_sdl_surface(icon_name, g_fs); - SDL_WM_SetIcon(s, nullptr); - SDL_FreeSurface(s); + m_sdlwindow = nullptr; + m_sdl_screen = nullptr; + m_sdl_renderer = nullptr; + m_sdl_texture = nullptr; + m_glcontext = nullptr; } void Graphic::initialize(int32_t w, int32_t h, bool fullscreen, bool opengl) { @@ -96,64 +96,84 @@ // Set video mode using SDL. First collect the flags int32_t flags = 0; g_opengl = false; - SDL_Surface * sdlsurface = nullptr; if (opengl) { log("Graphics: Trying opengl\n"); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - flags |= SDL_OPENGL; + flags |= SDL_WINDOW_OPENGL; } if (fullscreen) { - flags |= SDL_FULLSCREEN; + flags |= SDL_WINDOW_FULLSCREEN; log("Graphics: Trying FULLSCREEN\n"); } log("Graphics: Try to set Videomode %ux%u 32 Bit\n", w, h); // Here we actually set the video mode - sdlsurface = SDL_SetVideoMode(w, h, 32, flags); - + m_sdlwindow = SDL_CreateWindow("Widelands Window", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, flags); + if (opengl) { + // TODO(sirver): this context needs to be created also for fallback settings, + // otherwise SDL_GetWindowFlags() will return SDL_WINDOW_OPENGL, + // though if you call any gl function, the system crashes. + m_glcontext = SDL_GL_CreateContext(m_sdlwindow); + if (m_glcontext) { + SDL_GL_MakeCurrent(m_sdlwindow, m_glcontext); + } + } // If we tried opengl and it was not successful try without opengl - if (!sdlsurface && opengl) + if ((!m_sdlwindow || !m_glcontext) && opengl) { log("Graphics: Could not set videomode: %s, trying without opengl\n", SDL_GetError()); - flags &= ~SDL_OPENGL; - sdlsurface = SDL_SetVideoMode(w, h, 32, flags); + flags &= ~SDL_WINDOW_OPENGL; + m_sdlwindow = SDL_CreateWindow("Widelands Window", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, flags); } - if (!sdlsurface) - { + if (!m_sdlwindow) { log ("Graphics: Could not set videomode: %s, trying minimum graphics settings\n", SDL_GetError()); - flags &= ~SDL_FULLSCREEN; - sdlsurface = SDL_SetVideoMode - (FALLBACK_GRAPHICS_WIDTH, FALLBACK_GRAPHICS_HEIGHT, FALLBACK_GRAPHICS_DEPTH, flags); + flags &= ~SDL_WINDOW_FULLSCREEN; + m_sdlwindow = SDL_CreateWindow("Widelands Window", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + kFallbackGraphicsWidth, kFallbackGraphicsHeight, flags); m_fallback_settings_in_effect = true; - if (!sdlsurface) + if (!m_sdlwindow) { throw wexception ("Graphics: could not set video mode: %s", SDL_GetError()); + } } +#ifndef _WIN32 + const std::string icon_name = "pics/wl-ico-128.png"; +#else + const std::string icon_name = "pics/wl-ico-32.png"; +#endif + SDL_Surface* s = load_image_as_sdl_surface(icon_name, g_fs); + SDL_SetWindowIcon(m_sdlwindow, s); + SDL_FreeSurface(s); + // setting the videomode was successful. Print some information now log("Graphics: Setting video mode was successful\n"); - if (opengl && 0 != (sdlsurface->flags & SDL_GL_DOUBLEBUFFER)) + if (opengl && 0 != (SDL_GetWindowFlags(m_sdlwindow) & SDL_GL_DOUBLEBUFFER)) log("Graphics: OPENGL DOUBLE BUFFERING ENABLED\n"); - if (0 != (sdlsurface->flags & SDL_FULLSCREEN)) + if (0 != (SDL_GetWindowFlags(m_sdlwindow) & SDL_WINDOW_FULLSCREEN)) log("Graphics: FULLSCREEN ENABLED\n"); bool use_arb = true; const char * extensions = nullptr; - if (0 != (sdlsurface->flags & SDL_OPENGL)) { + if (opengl && 0 != (SDL_GetWindowFlags(m_sdlwindow) & SDL_WINDOW_OPENGL)) { // We have successful opened an opengl screen. Print some information // about opengl and set the rendering capabilities. log ("Graphics: OpenGL: OpenGL enabled\n"); GLenum err = glewInit(); if (err != GLEW_OK) { - log("glewInit returns %i\nYour OpenGL installation must be __very__ broken.\n", err); + log("glewInit returns %i\nYour OpenGL installation must be __very__ broken. %s\n", + err, glewGetErrorString(err)); throw wexception("glewInit returns %i: Broken OpenGL installation.", err); } @@ -168,23 +188,22 @@ ("Graphics: Neither GL_ARB_framebuffer_object or GL_EXT_framebuffer_object supported! " "Switching off OpenGL!\n" ); - flags &= ~SDL_OPENGL; - m_fallback_settings_in_effect = true; - - // One must never free the screen surface of SDL (using - // SDL_FreeSurface) as it is owned by SDL itself, therefore the next - // call does not leak memory. - sdlsurface = SDL_SetVideoMode - (FALLBACK_GRAPHICS_WIDTH, FALLBACK_GRAPHICS_HEIGHT, FALLBACK_GRAPHICS_DEPTH, flags); - m_fallback_settings_in_effect = true; - if (!sdlsurface) + flags &= ~SDL_WINDOW_OPENGL; + m_fallback_settings_in_effect = true; + SDL_DestroyWindow(m_sdlwindow); + m_sdlwindow = SDL_CreateWindow("Widelands Window", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + kFallbackGraphicsWidth, kFallbackGraphicsHeight, flags); + m_fallback_settings_in_effect = true; + if (!m_sdlwindow) { throw wexception("Graphics: could not set video mode: %s", SDL_GetError()); + } } } Surface::display_format_is_now_defined(); // Redoing the check, because fallback settings might mean we no longer use OpenGL. - if (0 != (sdlsurface->flags & SDL_OPENGL)) { + if (opengl && 0 != (SDL_GetWindowFlags(m_sdlwindow) & SDL_WINDOW_OPENGL)) { // We now really have a working opengl screen... g_opengl = true; @@ -239,48 +258,26 @@ } /* Information about the video capabilities. */ - const SDL_VideoInfo* info = SDL_GetVideoInfo(); - char videodrvused[16]; - SDL_VideoDriverName(videodrvused, 16); + SDL_DisplayMode disp_mode; + SDL_GetWindowDisplayMode(m_sdlwindow, &disp_mode); + const char * videodrvused = SDL_GetCurrentVideoDriver(); log ("**** GRAPHICS REPORT ****\n" " VIDEO DRIVER %s\n" - " hw surface possible %d\n" - " window manager available %d\n" - " blitz_hw %d\n" - " blitz_hw_CC %d\n" - " blitz_hw_A %d\n" - " blitz_sw %d\n" - " blitz_sw_CC %d\n" - " blitz_sw_A %d\n" - " blitz_fill %d\n" - " video_mem %d\n" - " vfmt %p\n" + " pixel fmt %u\n" " size %d %d\n" "**** END GRAPHICS REPORT ****\n", videodrvused, - info->hw_available, - info->wm_available, - info->blit_hw, - info->blit_hw_CC, - info->blit_hw_A, - info->blit_sw, - info->blit_sw_CC, - info->blit_sw_A, - info->blit_fill, - info->video_mem, - info->vfmt, - info->current_w, info->current_h); + disp_mode.format, + disp_mode.w, disp_mode.h); - log("Graphics: flags: %x\n", sdlsurface->flags); + log("Graphics: flags: %u\n", SDL_GetWindowFlags(m_sdlwindow)); assert - (sdlsurface->format->BytesPerPixel == 2 || - sdlsurface->format->BytesPerPixel == 4); + (SDL_BYTESPERPIXEL(disp_mode.format) == 2 || + SDL_BYTESPERPIXEL(disp_mode.format) == 4); - SDL_WM_SetCaption - (("Widelands " + build_id() + '(' + build_type() + ')').c_str(), - "Widelands"); + SDL_SetWindowTitle(m_sdlwindow, ("Widelands " + build_id() + '(' + build_type() + ')').c_str()); if (g_opengl) { glViewport(0, 0, w, h); @@ -306,7 +303,8 @@ // Clear the screen before running the game. glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - SDL_GL_SwapBuffers(); + SDL_GL_SetSwapInterval(1); + SDL_GL_SwapWindow(m_sdlwindow); glEnable(GL_TEXTURE_2D); GLSurfaceTexture::initialize(use_arb); @@ -316,12 +314,18 @@ { screen_.reset(new GLSurfaceScreen(w, h)); } - else - { - screen_.reset(new SDLSurface(sdlsurface, false)); + else { + m_sdl_renderer = SDL_CreateRenderer(m_sdlwindow, -1, 0); + uint32_t rmask, gmask, bmask, amask; + int bpp; + SDL_PixelFormatEnumToMasks(SDL_PIXELFORMAT_ARGB8888, &bpp, &rmask, &gmask, &bmask, &amask); + m_sdl_screen = SDL_CreateRGBSurface(0, w, h, bpp, rmask, gmask, bmask, amask); + m_sdl_texture = SDL_CreateTexture(m_sdl_renderer, + SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, + w, h); + screen_.reset(new SDLSurface(m_sdl_screen, false)); } - m_sdl_screen = sdlsurface; m_rendertarget.reset(new RenderTarget(screen_.get())); pic_road_normal_.reset(load_image("world/pics/roadt_normal.png")); @@ -340,8 +344,25 @@ if (UI::g_fh) UI::g_fh->flush(); - if (g_opengl) + if (g_opengl) { GLSurfaceTexture::cleanup(); + } + if (m_sdl_texture) { + SDL_DestroyTexture(m_sdl_texture); + m_sdl_texture = nullptr; + } + if (m_sdl_screen) { + SDL_FreeSurface(m_sdl_screen); + m_sdl_screen = nullptr; + } + if (m_sdlwindow) { + SDL_DestroyWindow(m_sdlwindow); + m_sdlwindow = nullptr; + } + if (m_glcontext) { + SDL_GL_DeleteContext(m_glcontext); + m_glcontext = nullptr; + } } Graphic::~Graphic() @@ -367,7 +388,7 @@ bool Graphic::is_fullscreen() { - return m_sdl_screen->flags & SDL_FULLSCREEN; + return SDL_GetWindowFlags(m_sdlwindow) & SDL_WINDOW_FULLSCREEN; } /** @@ -393,32 +414,17 @@ // Note: Not all Images are cached in the ImageCache, at time of me writing // this, only InMemoryImage does not safe itself in the ImageCache. And this // should only be a problem for Images loaded from maps. - SDL_WM_ToggleFullScreen(m_sdl_screen); -} - -/** - * Mark the entire screen for refreshing -*/ -void Graphic::update_fullscreen() -{ - m_update_fullscreen = true; -} - -/** - * Mark a rectangle for refreshing -*/ -void Graphic::update_rectangle(int32_t x, int32_t y, int32_t w, int32_t h) -{ - if (m_nr_update_rects >= MAX_RECTS) { - m_update_fullscreen = true; - return; + // NOCOM: Is this still a todo? + if (SDL_GetWindowFlags(m_sdlwindow) & SDL_WINDOW_FULLSCREEN) { + SDL_SetWindowFullscreen(m_sdlwindow, 0); + } else { + SDL_SetWindowFullscreen(m_sdlwindow, SDL_WINDOW_FULLSCREEN); } - m_update_fullscreen = true; - m_update_rects[m_nr_update_rects].x = x; - m_update_rects[m_nr_update_rects].y = y; - m_update_rects[m_nr_update_rects].w = w; - m_update_rects[m_nr_update_rects].h = h; - ++m_nr_update_rects; +} + + +void Graphic::update() { + m_update = true; } /** @@ -426,7 +432,7 @@ */ bool Graphic::need_update() const { - return m_nr_update_rects || m_update_fullscreen; + return m_update; } /** @@ -434,24 +440,19 @@ * * \param force update whole screen */ -void Graphic::refresh(bool force) +void Graphic::refresh() { if (g_opengl) { - SDL_GL_SwapBuffers(); - m_update_fullscreen = false; - m_nr_update_rects = 0; + SDL_GL_SwapWindow(m_sdlwindow); + m_update = false; return; } - if (force || m_update_fullscreen) { - //flip defaults to SDL_UpdateRect(m_surface, 0, 0, 0, 0); - SDL_Flip(m_sdl_screen); - } else - SDL_UpdateRects - (m_sdl_screen, m_nr_update_rects, m_update_rects); - - m_update_fullscreen = false; - m_nr_update_rects = 0; + SDL_UpdateTexture(m_sdl_texture, nullptr, m_sdl_screen->pixels, m_sdl_screen->pitch); + SDL_RenderClear(m_sdl_renderer); + SDL_RenderCopy(m_sdl_renderer, m_sdl_texture, nullptr, nullptr); + SDL_RenderPresent(m_sdl_renderer); + m_update = false; } @@ -467,7 +468,11 @@ uint32_t Graphic::new_maptexture(const std::vector<std::string>& texture_files, const uint32_t frametime) { - m_maptextures.emplace_back(new Texture(texture_files, frametime, *m_sdl_screen->format)); + SDL_PixelFormat* pixel_fmt = SDL_AllocFormat(SDL_PIXELFORMAT_ARGB8888); + m_maptextures.emplace_back(new Texture(texture_files, frametime, *pixel_fmt)); + if (pixel_fmt) { + SDL_FreeFormat(pixel_fmt); + } return m_maptextures.size(); // ID 1 is at m_maptextures[0] } === modified file 'src/graphic/graphic.h' --- src/graphic/graphic.h 2014-07-14 10:45:44 +0000 +++ src/graphic/graphic.h 2014-10-28 15:04:08 +0000 @@ -93,13 +93,10 @@ RenderTarget * get_render_target(); void toggle_fullscreen(); - void update_fullscreen(); - void update_rectangle(int32_t x, int32_t y, int32_t w, int32_t h); - void update_rectangle(const Rect& rect) { - update_rectangle (rect.x, rect.y, rect.w, rect.h); - } + void update(); bool need_update() const; - void refresh(bool force = true); + void refresh(); + SDL_Window* get_sdlwindow() {return m_sdlwindow;} SurfaceCache& surfaces() const {return *surface_cache_.get();} ImageCache& images() const {return *image_cache_.get();} @@ -134,15 +131,14 @@ /// opengl rendering as the SurfaceOpenGL does not use it. It allows /// manipulation the screen context. SDL_Surface * m_sdl_screen; + SDL_Renderer * m_sdl_renderer; + SDL_Window * m_sdlwindow; + SDL_Texture * m_sdl_texture; + SDL_GLContext m_glcontext; /// A RenderTarget for screen_. This is initialized during init() std::unique_ptr<RenderTarget> m_rendertarget; - /// keeps track which screen regions needs to be redrawn during the next - /// update(). Only used for SDL rendering. - SDL_Rect m_update_rects[MAX_RECTS]; - /// saves how many screen regions need updating. @see m_update_rects - int32_t m_nr_update_rects; - /// This marks the komplete screen for updating. - bool m_update_fullscreen; + /// This marks the complete screen for updating. + bool m_update; /// stores which features the current renderer has GraphicCaps m_caps; === modified file 'src/graphic/image_transformations.cc' --- src/graphic/image_transformations.cc 2014-07-26 10:43:23 +0000 +++ src/graphic/image_transformations.cc 2014-10-28 15:04:08 +0000 @@ -22,7 +22,7 @@ #include <string> #include <SDL.h> -#include <SDL_rotozoom.h> +#include <SDL2_rotozoom.h> #include <boost/format.hpp> #include "base/macros.h" @@ -129,7 +129,8 @@ static_cast<uint16_t>(zoomed->w), static_cast<uint16_t>(zoomed->h) }; // For some reason SDL_Surface and SDL_Rect express w,h in different types SDL_Rect dstrc = {0, 0, 0, 0}; - SDL_SetAlpha(zoomed, 0, 0); + SDL_SetSurfaceAlphaMod(zoomed, SDL_ALPHA_TRANSPARENT); + SDL_SetSurfaceBlendMode(zoomed, SDL_BLENDMODE_NONE); SDL_BlitSurface(zoomed, &srcrc, placed, &dstrc); // Updates dstrc uint32_t fillcolor = SDL_MapRGBA(zoomed->format, 0, 0, 0, 255); === modified file 'src/graphic/render/gl_surface_texture.cc' --- src/graphic/render/gl_surface_texture.cc 2014-09-20 09:37:47 +0000 +++ src/graphic/render/gl_surface_texture.cc 2014-10-28 15:04:08 +0000 @@ -85,7 +85,7 @@ uint8_t bpp = surface->format->BytesPerPixel; if - (surface->format->palette || (surface->format->colorkey > 0) || + (surface->format->palette || m_tex_w != static_cast<uint32_t>(surface->w) || m_tex_h != static_cast<uint32_t>(surface->h) || (bpp != 3 && bpp != 4)) @@ -94,8 +94,10 @@ (SDL_SWSURFACE, m_tex_w, m_tex_h, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000); assert(converted); - SDL_SetAlpha(converted, 0, 0); - SDL_SetAlpha(surface, 0, 0); + SDL_SetSurfaceAlphaMod(converted, SDL_ALPHA_OPAQUE); + SDL_SetSurfaceBlendMode(converted, SDL_BLENDMODE_NONE); + SDL_SetSurfaceAlphaMod(surface, SDL_ALPHA_OPAQUE); + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); SDL_BlitSurface(surface, nullptr, converted, nullptr); SDL_FreeSurface(surface); surface = converted; === modified file 'src/graphic/render/sdl_surface.cc' --- src/graphic/render/sdl_surface.cc 2014-07-14 10:45:44 +0000 +++ src/graphic/render/sdl_surface.cc 2014-10-28 15:04:08 +0000 @@ -338,14 +338,18 @@ bool alpha = false; uint8_t alphaval = 0; if (cm == CM_Solid || cm == CM_Copy) { - alpha = sdlsurf->flags & SDL_SRCALPHA; - alphaval = sdlsurf->format->alpha; - SDL_SetAlpha(sdlsurf, 0, 0); + SDL_BlendMode bm; + SDL_GetSurfaceBlendMode(sdlsurf, &bm); + alpha = bm & SDL_BLENDMODE_BLEND; + SDL_GetSurfaceAlphaMod(sdlsurf, &alphaval); + SDL_SetSurfaceAlphaMod(sdlsurf, 255); + SDL_SetSurfaceBlendMode(sdlsurf, SDL_BLENDMODE_NONE); } SDL_BlitSurface(sdlsurf, &srcrect, m_surface, &dstrect); if (cm == CM_Solid || cm == CM_Copy) { - SDL_SetAlpha(sdlsurf, alpha ? SDL_SRCALPHA : 0, alphaval); + SDL_SetSurfaceAlphaMod(sdlsurf, alphaval); + SDL_SetSurfaceBlendMode(sdlsurf, alpha ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE); } } === modified file 'src/graphic/render/sdl_surface.h' --- src/graphic/render/sdl_surface.h 2014-07-26 10:43:23 +0000 +++ src/graphic/render/sdl_surface.h 2014-10-28 15:04:08 +0000 @@ -20,6 +20,8 @@ #ifndef WL_GRAPHIC_RENDER_SDL_SURFACE_H #define WL_GRAPHIC_RENDER_SDL_SURFACE_H +#include <SDL_render.h> + #include "base/rect.h" #include "graphic/color.h" #include "graphic/surface.h" === modified file 'src/graphic/surface.cc' --- src/graphic/surface.cc 2014-07-17 13:26:23 +0000 +++ src/graphic/surface.cc 2014-10-28 15:04:08 +0000 @@ -35,7 +35,7 @@ if (!s_is_diplay_format_defined) { return surface; } - SDL_Surface * converted = SDL_DisplayFormatAlpha(surface); + SDL_Surface * converted = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ARGB8888, 0); SDL_FreeSurface(surface); return converted; } === modified file 'src/graphic/text/CMakeLists.txt' --- src/graphic/text/CMakeLists.txt 2014-07-14 10:45:44 +0000 +++ src/graphic/text/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -14,9 +14,9 @@ sdl_ttf_font.h textstream.cc textstream.h - USES_SDL - USES_SDL_TTF - USES_SDL_GFX + USES_SDL2 + USES_SDL2_TTF + USES_SDL2_GFX DEPENDS base_exceptions base_geometry === modified file 'src/graphic/text/sdl_ttf_font.cc' --- src/graphic/text/sdl_ttf_font.cc 2014-09-10 16:57:31 +0000 +++ src/graphic/text/sdl_ttf_font.cc 2014-10-28 15:04:08 +0000 @@ -19,6 +19,7 @@ #include "graphic/text/sdl_ttf_font.h" +#include <SDL.h> #include <SDL_ttf.h> #include <boost/format.hpp> @@ -70,20 +71,21 @@ SDL_Surface * text_surface = nullptr; - SDL_Color sdlclr = {clr.r, clr.g, clr.b, 0}; + SDL_Color sdlclr = {clr.r, clr.g, clr.b, SDL_ALPHA_OPAQUE}; if (style & SHADOW) { SDL_Surface * tsurf = TTF_RenderUTF8_Blended(font_, txt.c_str(), sdlclr); SDL_Surface * shadow = TTF_RenderUTF8_Blended(font_, txt.c_str(), SHADOW_CLR); text_surface = empty_sdl_surface(shadow->w + SHADOW_OFFSET, shadow->h + SHADOW_OFFSET); SDL_FillRect(text_surface, NULL, - SDL_MapRGBA(text_surface->format, 255, 255, 255, SDL_ALPHA_TRANSPARENT)); + SDL_MapRGBA(text_surface->format, 255, 255, 255, SDL_ALPHA_TRANSPARENT)); if (text_surface->format->BitsPerPixel != 32) throw RenderError("SDL_TTF did not return a 32 bit surface for shadow text. Giving up!"); SDL_Rect dstrct1 = {0, 0, 0, 0}; - SDL_SetAlpha(shadow, 0, SDL_ALPHA_OPAQUE); + SDL_SetSurfaceAlphaMod(shadow, SDL_ALPHA_OPAQUE); + SDL_SetSurfaceBlendMode(shadow, SDL_BLENDMODE_NONE); SDL_BlitSurface(shadow, nullptr, text_surface, &dstrct1); uint32_t* spix = static_cast<uint32_t*>(tsurf->pixels); === modified file 'src/io/CMakeLists.txt' --- src/io/CMakeLists.txt 2014-07-26 16:16:21 +0000 +++ src/io/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -7,7 +7,7 @@ streamread.h streamwrite.cc streamwrite.h - USES_SDL + USES_SDL2 DEPENDS base_exceptions base_macros === modified file 'src/logic/CMakeLists.txt' --- src/logic/CMakeLists.txt 2014-09-18 18:56:20 +0000 +++ src/logic/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -1,7 +1,7 @@ wl_binary(wl_map_info SRCS map_info.cc - USES_SDL + USES_SDL2 DEPENDS base_log graphic @@ -211,8 +211,8 @@ world/terrain_description.h world/world.cc world/world.h - # TODO(sirver): Uses SDL only on WIN32 for a dirty hack. - USES_SDL + # TODO(sirver): Uses SDL2 only on WIN32 for a dirty hack. + USES_SDL2 DEPENDS ai base_deprecated === modified file 'src/map_io/CMakeLists.txt' --- src/map_io/CMakeLists.txt 2014-09-10 07:57:29 +0000 +++ src/map_io/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -84,7 +84,7 @@ map_terrain_packet.h map_version_packet.cc map_version_packet.h - USES_SDL_IMAGE + USES_SDL2_IMAGE DEPENDS base_deprecated base_exceptions === modified file 'src/network/CMakeLists.txt' --- src/network/CMakeLists.txt 2014-07-16 06:41:27 +0000 +++ src/network/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -20,7 +20,7 @@ network_player_settings_backend.h network_protocol.h network_system.h - USES_SDL_NET + USES_SDL2_NET DEPENDS ai base_deprecated === modified file 'src/sound/CMakeLists.txt' --- src/sound/CMakeLists.txt 2014-07-14 10:45:44 +0000 +++ src/sound/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -7,8 +7,8 @@ sound_handler.cc sound_handler.h USES_BOOST_REGEX - USES_SDL - USES_SDL_MIXER + USES_SDL2 + USES_SDL2_MIXER DEPENDS base_deprecated base_i18n === modified file 'src/sound/songset.cc' --- src/sound/songset.cc 2014-09-20 09:37:47 +0000 +++ src/sound/songset.cc 2014-10-28 15:04:08 +0000 @@ -26,20 +26,6 @@ #include "io/filesystem/layered_filesystem.h" #include "sound/sound_handler.h" -namespace { - // The behaviour of whether SDL_Mixer frees the RW it uses was - // changed with SDL_Mixer version 1.2.12, this - // check is so that we don't have a memory leak in the new version. - // TODO(unknown): Once we can demand that everyone use - // SDL_Mixer version >= 1.2.12, this function should be removed, - // and all usages replaced supposing it's true. - bool have_to_free_rw() { - return - SDL_VERSIONNUM(SDL_MIXER_MAJOR_VERSION, SDL_MIXER_MINOR_VERSION, SDL_MIXER_PATCHLEVEL) >= - SDL_VERSIONNUM(1, 2, 12); - } -} - /// Prepare infrastructure for reading song files from disk Songset::Songset() : m_(nullptr), rwops_(nullptr) {} @@ -52,8 +38,7 @@ Mix_FreeMusic(m_); if (rwops_) { - if (have_to_free_rw()) - SDL_FreeRW(rwops_); + SDL_FreeRW(rwops_); fr_.close(); } } @@ -98,8 +83,7 @@ } if (rwops_) { - if (have_to_free_rw()) - SDL_FreeRW(rwops_); + SDL_FreeRW(rwops_); rwops_ = nullptr; fr_.close(); } @@ -115,7 +99,7 @@ return nullptr; if (rwops_) - m_ = Mix_LoadMUS_RW(rwops_); + m_ = Mix_LoadMUS_RW(rwops_, 0); if (m_) log("SoundHandler: loaded song \"%s\"\n", filename.c_str()); === modified file 'src/sound/sound_handler.cc' --- src/sound/sound_handler.cc 2014-09-20 09:37:47 +0000 +++ src/sound/sound_handler.cc 2014-10-28 15:04:08 +0000 @@ -164,11 +164,8 @@ if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { log ("audio error %s\n", SDL_GetError()); } - char * text = new char[21]; - SDL_AudioDriverName(text, 20); - log("SDL_AUDIODRIVER %s\n", text); - delete[] text; - text = nullptr; + + log("SDL_AUDIODRIVER %s\n", SDL_GetCurrentAudioDriver()); if (numtimesopened != 1) { log ("PROBLEM: sound device opened multiple times, trying to close"); === modified file 'src/ui_basic/CMakeLists.txt' --- src/ui_basic/CMakeLists.txt 2014-07-15 10:02:22 +0000 +++ src/ui_basic/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -51,7 +51,7 @@ window.cc window.h USES_BOOST_REGEX - USES_SDL + USES_SDL2 DEPENDS base_deprecated base_exceptions === modified file 'src/ui_basic/button.cc' --- src/ui_basic/button.cc 2014-07-25 18:56:22 +0000 +++ src/ui_basic/button.cc 2014-10-28 15:04:08 +0000 @@ -341,6 +341,7 @@ } return true; } + bool Button::handle_mousemove(const uint8_t, int32_t, int32_t, int32_t, int32_t) { return true; // We handle this always by lighting up } === modified file 'src/ui_basic/editbox.cc' --- src/ui_basic/editbox.cc 2014-09-19 09:07:14 +0000 +++ src/ui_basic/editbox.cc 2014-10-28 15:04:08 +0000 @@ -21,7 +21,7 @@ #include <limits> -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include "graphic/font.h" #include "graphic/font_handler.h" @@ -87,6 +87,7 @@ set_handle_mouse(true); set_can_focus(true); + set_handle_textinput(true); // Initialize history as empty string for (uint8_t i = 0; i < CHAT_HISTORY_SIZE; ++i) @@ -220,7 +221,7 @@ // TODO(unknown): Text input works only because code.unicode happens to map to ASCII for // ASCII characters (--> //HERE). Instead, all user editable strings should be // real unicode. -bool EditBox::handle_key(bool const down, SDL_keysym const code) +bool EditBox::handle_key(bool const down, SDL_Keysym const code) { if (down) { switch (code.sym) { @@ -232,7 +233,7 @@ //let the panel handle the tab key return false; - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: // Save history if active and text is not empty if (m_history_active) { @@ -246,9 +247,8 @@ ok(); return true; - case SDLK_KP_PERIOD: + case SDL_SCANCODE_KP_PERIOD: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ @@ -270,13 +270,12 @@ } return true; - case SDLK_KP4: + case SDL_SCANCODE_KP_4: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_LEFT: + case SDL_SCANCODE_LEFT: if (m->caret > 0) { while ((m->text[--m->caret] & 0xc0) == 0x80) {}; if (code.mod & (KMOD_LCTRL | KMOD_RCTRL)) @@ -290,13 +289,12 @@ } return true; - case SDLK_KP6: + case SDL_SCANCODE_KP_6: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_RIGHT: + case SDL_SCANCODE_RIGHT: if (m->caret < m->text.size()) { while ((m->text[++m->caret] & 0xc0) == 0x80) {}; if (code.mod & (KMOD_LCTRL | KMOD_RCTRL)) @@ -315,9 +313,8 @@ } return true; - case SDLK_KP7: + case SDL_SCANCODE_KP_7: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ @@ -330,9 +327,8 @@ } return true; - case SDLK_KP1: + case SDL_SCANCODE_KP_1: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ @@ -344,13 +340,12 @@ } return true; - case SDLK_KP8: + case SDL_SCANCODE_KP_8: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_UP: + case SDL_SCANCODE_UP: // Load entry from history if active and text is not empty if (m_history_active) { if (m_history_position > CHAT_HISTORY_SIZE - 2) @@ -364,13 +359,12 @@ } return true; - case SDLK_KP2: + case SDL_SCANCODE_KP_2: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_DOWN: + case SDL_SCANCODE_DOWN: // Load entry from history if active and text is not equivalent to the current one if (m_history_active) { if (m_history_position < 1) @@ -389,11 +383,13 @@ // Nullbytes happen on MacOS X when entering Multiline Chars, like for // example ~ + o results in a o with a tilde over it. The ~ is reported // as a 0 on keystroke, the o then as the unicode character. We simply - // ignore the 0. - if (is_printable(code) && code.unicode) { + // ignore the 0. NOCOM: Is this still true for Macs? + /* + if (is_printable(code) && code.unicode) { insert(code); return true; } + */ break; } } @@ -401,31 +397,16 @@ return false; } -/** - * Insert the utf8 character according to the specified key code - */ -void EditBox::insert(SDL_keysym const code) -{ - if (m->text.size() < m->maxLength) { - if (code.unicode < 0x80) // 1 byte char - m->text.insert(m->text.begin() + m->caret++, 1, code.unicode); - else if (code.unicode < 0x800) { // 2 byte char - m->text.insert - (m->text.begin() + m->caret++, (((code.unicode & 0x7c0) >> 6) | 0xc0)); - m->text.insert - (m->text.begin() + m->caret++, ((code.unicode & 0x3f) | 0x80)); - } else { // 3 byte char - m->text.insert - (m->text.begin() + m->caret++, (((code.unicode & 0xf000) >> 12) | 0xe0)); - m->text.insert - (m->text.begin() + m->caret++, (((code.unicode & 0xfc0) >> 6) | 0x80)); - m->text.insert - (m->text.begin() + m->caret++, ((code.unicode & 0x3f) | 0x80)); - } +bool EditBox::handle_textinput(const char * ntext) { + const std::string help(ntext); + if ((m->text.size() + help.length()) < m->maxLength) { + m->text.insert(m->caret, help); + m->caret += help.length(); check_caret(); changed(); update(); } + return true; } void EditBox::draw(RenderTarget & odst) === modified file 'src/ui_basic/editbox.h' --- src/ui_basic/editbox.h 2014-09-19 09:07:14 +0000 +++ src/ui_basic/editbox.h 2014-10-28 15:04:08 +0000 @@ -61,7 +61,8 @@ bool handle_mousepress(uint8_t btn, int32_t x, int32_t y) override; bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y) override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; + bool handle_textinput(const char* text); void draw(RenderTarget &) override; @@ -69,7 +70,6 @@ std::unique_ptr<EditBoxImpl> m; void check_caret(); - void insert(SDL_keysym code); bool m_history_active; int16_t m_history_position; === modified file 'src/ui_basic/is_printable.cc' --- src/ui_basic/is_printable.cc 2014-07-03 20:11:14 +0000 +++ src/ui_basic/is_printable.cc 2014-10-28 15:04:08 +0000 @@ -21,10 +21,9 @@ namespace UI { -bool is_printable(SDL_keysym k) { +bool is_printable(SDL_Keysym k) { return (k.sym == SDLK_TAB) || ((k.sym >= SDLK_SPACE) && (k.sym <= SDLK_z)) || - ((k.sym >= SDLK_WORLD_0) && (k.sym <= SDLK_WORLD_95)) || - ((k.sym >= SDLK_KP0) && (k.sym <= SDLK_KP_EQUALS)); + ((k.sym >= SDL_SCANCODE_KP_0) && (k.sym <= SDL_SCANCODE_KP_EQUALS)); } } // namespace UI === modified file 'src/ui_basic/is_printable.h' --- src/ui_basic/is_printable.h 2014-07-23 14:49:10 +0000 +++ src/ui_basic/is_printable.h 2014-10-28 15:04:08 +0000 @@ -36,7 +36,7 @@ // WLApplication::init_hardware()) instead of k.sym. Doing so needs to take the // current locale into account; perhaps there already is a fitting gettext // function? -bool is_printable(SDL_keysym k); +bool is_printable(SDL_Keysym k); } // namespace UI === modified file 'src/ui_basic/listselect.cc' --- src/ui_basic/listselect.cc 2014-10-27 10:31:04 +0000 +++ src/ui_basic/listselect.cc 2014-10-28 15:04:08 +0000 @@ -416,14 +416,19 @@ } /** + * Handle mouse wheel events + */ +bool BaseListselect::handle_mousewheel(uint32_t which, int32_t x, int32_t y) { + return m_scrollbar.handle_mousewheel(which, x, y); +} + +/** * Handle mouse presses: select the appropriate entry */ bool BaseListselect::handle_mousepress(const uint8_t btn, int32_t, int32_t y) { switch (btn) { - case SDL_BUTTON_WHEELDOWN: - case SDL_BUTTON_WHEELUP: - return m_scrollbar.handle_mousepress(btn, 0, y); + case SDL_BUTTON_LEFT: { int32_t const time = WLApplication::get()->get_time(); @@ -471,15 +476,15 @@ return true; } -bool BaseListselect::handle_key(bool const down, SDL_keysym const code) { +bool BaseListselect::handle_key(bool const down, SDL_Keysym const code) { if (down) { uint32_t selected_idx; switch (code.sym) { - case SDLK_KP2: + case SDL_SCANCODE_KP_2: if (code.mod & KMOD_NUM) break; /* no break */ - case SDLK_DOWN: + case SDL_SCANCODE_DOWN: selected_idx = selection_index() + 1; if (selected_idx < size()) select(selected_idx); @@ -489,11 +494,11 @@ m_scrollbar.set_scrollpos(m_scrollpos); } return true; - case SDLK_KP8: + case SDL_SCANCODE_KP_8: if (code.mod & KMOD_NUM) break; /* no break */ - case SDLK_UP: + case SDL_SCANCODE_UP: selected_idx = selection_index(); if (selected_idx > 0) select(selected_idx - 1); === modified file 'src/ui_basic/listselect.h' --- src/ui_basic/listselect.h 2014-10-27 10:31:04 +0000 +++ src/ui_basic/listselect.h 2014-10-28 15:04:08 +0000 @@ -117,7 +117,8 @@ bool handle_mousepress (uint8_t btn, int32_t x, int32_t y) override; bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y) override; bool handle_mousemove (uint8_t state, int32_t x, int32_t y, int32_t xdiff, int32_t ydiff) override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override; + bool handle_key(bool down, SDL_Keysym) override; private: static const int32_t DOUBLE_CLICK_INTERVAL = 500; // half a second === modified file 'src/ui_basic/messagebox.cc' --- src/ui_basic/messagebox.cc 2014-09-19 09:07:14 +0000 +++ src/ui_basic/messagebox.cc 2014-10-28 15:04:08 +0000 @@ -133,14 +133,14 @@ return true; } -bool WLMessageBox::handle_key(bool down, SDL_keysym code) +bool WLMessageBox::handle_key(bool down, SDL_Keysym code) { if (!down) { return false; } switch (code.sym) { - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: pressed_yes(); pressed_ok(); === modified file 'src/ui_basic/messagebox.h' --- src/ui_basic/messagebox.h 2014-09-19 09:07:14 +0000 +++ src/ui_basic/messagebox.h 2014-10-28 15:04:08 +0000 @@ -69,7 +69,7 @@ bool handle_mousepress (uint8_t btn, int32_t mx, int32_t my) override; bool handle_mouserelease(uint8_t btn, int32_t mx, int32_t my) override; - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; protected: virtual void pressed_ok(); === modified file 'src/ui_basic/multilineeditbox.cc' --- src/ui_basic/multilineeditbox.cc 2014-09-10 14:48:40 +0000 +++ src/ui_basic/multilineeditbox.cc 2014-10-28 15:04:08 +0000 @@ -89,6 +89,7 @@ set_handle_mouse(true); set_can_focus(true); set_think(false); + set_handle_textinput(true); set_text(text); } @@ -245,27 +246,15 @@ return cursor; } -/** - * Insert the utf8 character according to the specified key code - */ -void MultilineEditbox::insert(SDL_keysym const code) -{ - std::string utf8 = Utf8::unicode_to_utf8(code.unicode); - - if (d->text.size() + utf8.size() <= d->maxbytes) { - d->insert(d->cursor_pos, utf8); - changed(); - } -} /** * This is called by the UI code whenever a key press or release arrives */ -bool MultilineEditbox::handle_key(bool const down, SDL_keysym const code) +bool MultilineEditbox::handle_key(bool const down, SDL_Keysym const code) { if (down) { switch (code.sym) { - case SDLK_KP_PERIOD: + case SDL_SCANCODE_KP_PERIOD: if (code.mod & KMOD_NUM) break; /* no break */ @@ -283,13 +272,12 @@ } break; - case SDLK_KP4: + case SDL_SCANCODE_KP_4: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_LEFT: { + case SDL_SCANCODE_LEFT: { if (code.mod & (KMOD_LCTRL | KMOD_RCTRL)) { uint32_t newpos = d->prev_char(d->cursor_pos); while (newpos > 0 && isspace(d->text[newpos])) @@ -307,13 +295,12 @@ break; } - case SDLK_KP6: + case SDL_SCANCODE_KP_6: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_RIGHT: + case SDL_SCANCODE_RIGHT: if (code.mod & (KMOD_LCTRL | KMOD_RCTRL)) { uint32_t newpos = d->next_char(d->cursor_pos); while (newpos < d->text.size() && isspace(d->text[newpos])) @@ -326,13 +313,12 @@ } break; - case SDLK_KP2: + case SDL_SCANCODE_KP_2: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_DOWN: + case SDL_SCANCODE_DOWN: if (d->cursor_pos < d->text.size()) { d->refresh_ww(); @@ -356,13 +342,12 @@ } break; - case SDLK_KP8: + case SDL_SCANCODE_KP_8: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ - case SDLK_UP: + case SDL_SCANCODE_UP: if (d->cursor_pos > 0) { d->refresh_ww(); @@ -384,9 +369,8 @@ } break; - case SDLK_KP7: + case SDL_SCANCODE_KP_7: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ @@ -403,9 +387,8 @@ } break; - case SDLK_KP1: + case SDL_SCANCODE_KP_1: if (code.mod & KMOD_NUM) { - insert(code); break; } /* no break */ @@ -425,7 +408,7 @@ } break; - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: d->insert(d->cursor_pos, "\n"); changed(); @@ -435,10 +418,12 @@ // Nullbytes happen on MacOS X when entering Multiline Chars, like for // example ~ + o results in a o with a tilde over it. The ~ is reported // as a 0 on keystroke, the o then as the unicode character. We simply - // ignore the 0. + // ignore the 0. NOCOM: Is this still true for Macs? + /* if (is_printable(code) && code.unicode) { insert(code); } + */ break; } return true; @@ -447,12 +432,21 @@ return Panel::handle_key(down, code); } + +bool MultilineEditbox::handle_textinput(const char * ntext) { + const std::string help(ntext); + if (d->text.size() + help.size() <= d->maxbytes) { + d->insert(d->cursor_pos, help); + changed(); + } + return true; +} + /** * Grab the focus and redraw. */ -void MultilineEditbox::focus() { - Panel::focus(); - +void MultilineEditbox::focus(bool topcaller) { + Panel::focus(topcaller); update(); } === modified file 'src/ui_basic/multilineeditbox.h' --- src/ui_basic/multilineeditbox.h 2014-09-10 14:48:40 +0000 +++ src/ui_basic/multilineeditbox.h 2014-10-28 15:04:08 +0000 @@ -47,16 +47,16 @@ void set_maximum_bytes(uint32_t n); uint32_t get_maximum_bytes() const; - void focus() override; + void focus(bool topcaller = true) override; protected: void draw(RenderTarget &) override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; + bool handle_textinput(const char* text); private: void scrollpos_changed(int32_t); - void insert(SDL_keysym code); struct Data; std::unique_ptr<Data> d; === modified file 'src/ui_basic/multilinetextarea.cc' --- src/ui_basic/multilinetextarea.cc 2014-10-05 13:37:03 +0000 +++ src/ui_basic/multilinetextarea.cc 2014-10-28 15:04:08 +0000 @@ -190,12 +190,9 @@ } } -bool MultilineTextarea::handle_mousepress - (uint8_t const btn, int32_t const x, int32_t const y) -{ - return - btn == SDL_BUTTON_WHEELUP || btn == SDL_BUTTON_WHEELDOWN ? - m_scrollbar.handle_mousepress(btn, x, y) : false; + +bool MultilineTextarea::handle_mousewheel(uint32_t which, int32_t x, int32_t y) { + return m_scrollbar.handle_mousewheel(which, x, y); } void MultilineTextarea::scroll_to_top() { === modified file 'src/ui_basic/multilinetextarea.h' --- src/ui_basic/multilinetextarea.h 2014-10-05 13:37:03 +0000 +++ src/ui_basic/multilinetextarea.h 2014-10-28 15:04:08 +0000 @@ -64,7 +64,7 @@ // Drawing and event handlers void draw(RenderTarget &) override; - bool handle_mousepress (uint8_t btn, int32_t x, int32_t y) override; + bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override; void scroll_to_top(); const char * get_font_name() {return m_fontname.c_str();} === modified file 'src/ui_basic/panel.cc' --- src/ui_basic/panel.cc 2014-10-18 13:39:27 +0000 +++ src/ui_basic/panel.cc 2014-10-28 15:04:08 +0000 @@ -189,7 +189,7 @@ // Panel-specific startup code. This might call end_modal()! start(); - g_gr->update_fullscreen(); + g_gr->update(); uint32_t minTime; { @@ -206,7 +206,9 @@ Panel::ui_mousepress, Panel::ui_mouserelease, Panel::ui_mousemove, - Panel::ui_key + Panel::ui_key, + Panel::ui_textinput, + Panel::ui_mousewheel }; app->handle_input(&icb); @@ -240,7 +242,7 @@ SDL_Delay(minTime - diffTime); } } - g_gr->update_fullscreen(); + g_gr->update(); end(); // Done @@ -531,7 +533,7 @@ if (h <= 0) return; - g_gr->update_rectangle(x, y, w, h); + g_gr->update(); } } @@ -665,6 +667,18 @@ } /** + * Called whenever the user moves the mouse wheel. + * If the panel doesn't process the mouse-wheel, it is handed to the panel's + * parent. + * + * \return true if the mouseclick was processed, false otherwise + */ +bool Panel::handle_mousewheel(uint32_t, int32_t, int32_t) { + return false; +} + + +/** * Called when the mouse is moved while inside the panel */ bool Panel::handle_mousemove(const uint8_t, int32_t, int32_t, int32_t, int32_t) @@ -672,14 +686,8 @@ return !_tooltip.empty(); } -/** - * Receive a keypress or keyrelease event. - * code is one of the KEY_xxx constants, c is the corresponding printable - * character or 0 for special, unprintable keys. - * - * \return true if the event was processed, false otherwise -*/ -bool Panel::handle_key(bool down, SDL_keysym code) + +bool Panel::handle_key(bool down, SDL_Keysym code) { if (down) { if (_focus) { @@ -710,6 +718,12 @@ return false; } + +bool Panel::handle_textinput(const char *) { + return false; +} + + /** * Called whenever a tooltip could be drawn. * Return true if the tooltip has been drawn, @@ -783,15 +797,24 @@ } /** - * Grab the keyboard focus, if it can + * Grabs the keyboard focus, if it can, + * topcaller identifies widget at the beginning of the recursion */ -void Panel::focus() +void Panel::focus(bool topcaller) { // this assert was deleted, because // it happens, that a child can focus, but a parent // can't. but focus is called recursivly // assert(get_can_focus()); + if (topcaller) { + if (get_handle_textinput()) { + if (!SDL_IsTextInputActive()) SDL_StartTextInput(); + } else { + if (SDL_IsTextInputActive()) SDL_StopTextInput(); + } + } + if (!_parent || this == _modal) { return; } @@ -799,7 +822,7 @@ return; _parent->_focus = this; - _parent->focus(); + _parent->focus(false); } /** @@ -1008,8 +1031,8 @@ // Some window managers use alt-drag, so we can't only use the alt keys if ((!_g_mousegrab) && (btn == SDL_BUTTON_LEFT) && - ((get_key_state(SDLK_LALT) | get_key_state(SDLK_RALT) | - get_key_state(SDLK_MODE) | get_key_state(SDLK_LSHIFT)))) + ((get_key_state(SDL_SCANCODE_LALT) | get_key_state(SDL_SCANCODE_RALT) | + get_key_state(SDL_SCANCODE_MODE) | get_key_state(SDL_SCANCODE_LSHIFT)))) if (handle_alt_drag(x, y)) return true; @@ -1024,6 +1047,26 @@ } return handle_mousepress(btn, x, y); } + + +bool Panel::do_mousewheel(uint32_t which, int32_t x, int32_t y) { + if (!_g_allow_user_input) { + return true; + } + + // TODO(GunChleoc): This is just a hack for focussed panels + // We need to find the actualy scrollable panel beneaththe mouse cursor, + // so we can have multiple scrollable elements on the same screen + // e.g. load map with a long desctiprion has 2 of them. + if (_focus) { + if (_focus->do_mousewheel(which, x, y)) + return true; + } + + return handle_mousewheel(which, x, y); +} + + bool Panel::do_mouserelease(const uint8_t btn, int32_t x, int32_t y) { if (!_g_allow_user_input) return true; @@ -1070,7 +1113,7 @@ * Pass the key event to the focused child. * If it doesn't process the key, we'll see if we can use the event. */ -bool Panel::do_key(bool const down, SDL_keysym const code) +bool Panel::do_key(bool const down, SDL_Keysym const code) { if (!_g_allow_user_input) return true; @@ -1083,6 +1126,20 @@ return handle_key(down, code); } + +bool Panel::do_textinput(const char * text) { + if (!_g_allow_user_input) { + return true; + } + if (_focus) { + if (_focus->do_textinput(text)) { + return true; + } + } + return handle_textinput(text); +} + + bool Panel::do_tooltip() { if (_mousein && _mousein->do_tooltip()) { @@ -1094,7 +1151,7 @@ /** * \return \c true if the given key is currently pressed, or \c false otherwise */ -bool Panel::get_key_state(const SDLKey key) const +bool Panel::get_key_state(const SDL_Scancode key) const { return WLApplication::get()->get_key_state(key); } @@ -1175,11 +1232,8 @@ return; Panel * p; - uint16_t w = s_default_cursor->width(); - uint16_t h = s_default_cursor->height(); - g_gr->update_rectangle(x - xdiff, y - ydiff, w, h); - g_gr->update_rectangle(x, y, w, h); + g_gr->update(); p = ui_trackmouse(x, y); if (!p) @@ -1189,9 +1243,32 @@ } /** + * Input callback function. Pass the mousewheel event to the currently modal + * panel. +*/ +void Panel::ui_mousewheel(uint32_t which, int32_t x, int32_t y) { + if (!_g_allow_user_input) { + return; + } + if (!x && !y) { + return; + } + Panel* p = nullptr; + if (_g_mousein) { + p = _g_mousein; + } else { + p = _g_mousegrab ? _g_mousegrab : _modal; + } + if (p) { + p->do_mousewheel(which, x, y); + } +} + + +/** * Input callback function. Pass the key event to the currently modal panel */ -void Panel::ui_key(bool const down, SDL_keysym const code) +void Panel::ui_key(bool const down, SDL_Keysym const code) { if (!_g_allow_user_input) return; @@ -1199,14 +1276,25 @@ _modal->do_key(down, code); } + +/** + * Input callback function. Pass the textinput event to the currently modal panel + */ +void Panel::ui_textinput(const char * text) { + if (!_g_allow_user_input) { + return; + } + _modal->do_textinput(text); +} + /** * Draw the tooltip. Return true on success */ bool Panel::draw_tooltip(RenderTarget & dst, const std::string & text) { - if (text.empty()) + if (text.empty()) { return false; - + } std::string text_to_render = text; if (!is_richtext(text_to_render)) { text_to_render = as_tooltip(text); @@ -1214,9 +1302,9 @@ static const uint32_t TIP_WIDTH_MAX = 360; const Image* rendered_text = g_fh1->render(text_to_render, TIP_WIDTH_MAX); - if (!rendered_text) + if (!rendered_text) { return false; - + } uint16_t tip_width = rendered_text->width() + 4; uint16_t tip_height = rendered_text->height() + 4; === modified file 'src/ui_basic/panel.h' --- src/ui_basic/panel.h 2014-07-23 14:49:10 +0000 +++ src/ui_basic/panel.h 2014-10-28 15:04:08 +0000 @@ -74,6 +74,8 @@ pf_layout_toplevel = 512, /// whether widget panels should be cached when possible pf_cache = 1024, + /// whether widget wants to receive unicode textinput messages + pf_textinput = 2048, }; // TODO(unknown): Turn this into separate bool flags Panel @@ -186,21 +188,23 @@ virtual bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y); virtual bool handle_mousemove (uint8_t state, int32_t x, int32_t y, int32_t xdiff, int32_t ydiff); - virtual bool handle_key(bool down, SDL_keysym code); + virtual bool handle_mousewheel(uint32_t which, int32_t x, int32_t y); + virtual bool handle_key(bool down, SDL_Keysym); + virtual bool handle_textinput(const char* text); virtual bool handle_alt_drag(int32_t x, int32_t y); virtual bool handle_tooltip(); /// \returns whether a certain given is currently down. /// /// \note Never call this function from a keyboard event handler (a function - /// that overrides bool handle_key(bool, SDL_keysym code)) to get the state + /// that overrides bool handle_key(bool, SDL_Keysym code)) to get the state /// of a modifier key. In that case code.mod must be used. It contains the /// state of the modifier keys at the time of the event. Unfortunately there /// is no information about modifier key states in mouse events (tracker /// item #1916453). That is "a huge oversight" in SDL 1.2 and a fix is /// promised in SDL 1.3: /// http://lists.libsdl.org/pipermail/sdl-libsdl.org/2008-March/064560.html - bool get_key_state(SDLKey) const; + bool get_key_state(SDL_Scancode) const; void set_handle_mouse(bool yes); bool get_handle_mouse() const {return _flags & pf_handle_mouse;} @@ -212,7 +216,7 @@ assert(get_can_focus()); return (_parent->_focus == this); } - virtual void focus(); + virtual void focus(bool topcaller = true); void set_think(bool yes); bool get_think() const {return _flags & pf_think;} @@ -231,6 +235,11 @@ void set_tooltip(const std::string& text) {_tooltip = text;} const std::string& tooltip() const {return _tooltip;} + void set_handle_textinput(bool on) { + on ? _flags |= pf_textinput : _flags &= ~pf_textinput; + } + bool get_handle_textinput() const {return _flags & pf_textinput;} + ///\return the current set UI font std::string ui_fn(); @@ -263,7 +272,9 @@ bool do_mouserelease(const uint8_t btn, int32_t x, int32_t y); bool do_mousemove (const uint8_t state, int32_t x, int32_t y, int32_t xdiff, int32_t ydiff); - bool do_key(bool down, SDL_keysym code); + bool do_mousewheel(uint32_t which, int32_t x, int32_t y); + bool do_key(bool down, SDL_Keysym code); + bool do_textinput(const char* text); bool do_tooltip(); static Panel * ui_trackmouse(int32_t & x, int32_t & y); @@ -271,8 +282,9 @@ static void ui_mouserelease(const uint8_t button, int32_t x, int32_t y); static void ui_mousemove (const uint8_t state, int32_t x, int32_t y, int32_t xdiff, int32_t ydiff); - static void ui_key(bool down, SDL_keysym code); - + static void ui_mousewheel(uint32_t which, int32_t x, int32_t y); + static void ui_key(bool down, SDL_Keysym code); + static void ui_textinput(const char* text); Panel * _parent; Panel * _next, * _prev; === modified file 'src/ui_basic/progresswindow.cc' --- src/ui_basic/progresswindow.cc 2014-09-20 09:37:47 +0000 +++ src/ui_basic/progresswindow.cc 2014-10-28 15:04:08 +0000 @@ -117,7 +117,7 @@ UI::TextStyle ts(UI::TextStyle::ui_small()); ts.fg = PROGRESS_FONT_COLOR_FG; UI::g_fh->draw_text(rt, ts, m_label_center, description, Align_Center); - g_gr->update_rectangle(m_label_rectangle); + g_gr->update(); #ifdef _WIN32 // Pump events to prevent "not responding" on windows @@ -131,7 +131,7 @@ for (IProgressVisualization * visualization : m_visualizations) { visualization->update(repaint); // let visualizations do their work } - g_gr->refresh(false); + g_gr->refresh(); } /** === modified file 'src/ui_basic/scrollbar.cc' --- src/ui_basic/scrollbar.cc 2014-07-14 10:45:44 +0000 +++ src/ui_basic/scrollbar.cc 2014-10-28 15:04:08 +0000 @@ -391,6 +391,16 @@ } +bool Scrollbar::handle_mousewheel(uint32_t, int32_t, int32_t y) { + if (y < 0) { + action(Plus); + } else { + action(Minus); + } + return true; +} + + bool Scrollbar::handle_mousepress(const uint8_t btn, int32_t x, int32_t y) { bool result = false; @@ -410,15 +420,6 @@ result = true; break; - case SDL_BUTTON_WHEELUP: - action(Minus); - result = true; - break; - - case SDL_BUTTON_WHEELDOWN: - action(Plus); - result = true; - break; default: break; } @@ -437,13 +438,6 @@ result = true; break; - case SDL_BUTTON_WHEELUP: - result = true; - break; - - case SDL_BUTTON_WHEELDOWN: - result = true; - break; default: break; } === modified file 'src/ui_basic/scrollbar.h' --- src/ui_basic/scrollbar.h 2014-07-14 10:45:44 +0000 +++ src/ui_basic/scrollbar.h 2014-10-28 15:04:08 +0000 @@ -62,7 +62,8 @@ uint32_t get_pagesize() const {return m_pagesize;} uint32_t get_scrollpos() const {return m_pos;} - bool handle_mousepress (uint8_t btn, int32_t x, int32_t y) override; + bool handle_mousepress(uint8_t btn, int32_t x, int32_t y) override; + bool handle_mousewheel(uint32_t, int32_t, int32_t y) override; void set_force_draw(bool const t) {m_force_draw = t;} === modified file 'src/ui_basic/table.cc' --- src/ui_basic/table.cc 2014-09-30 19:36:00 +0000 +++ src/ui_basic/table.cc 2014-10-28 15:04:08 +0000 @@ -324,17 +324,17 @@ /** * handle key presses */ -bool Table<void *>::handle_key(bool down, SDL_keysym code) +bool Table<void *>::handle_key(bool down, SDL_Keysym code) { if (down) { switch (code.sym) { - case SDLK_UP: - case SDLK_KP8: + case SDL_SCANCODE_UP: + case SDL_SCANCODE_KP_8: move_selection(-1); return true; - case SDLK_DOWN: - case SDLK_KP2: + case SDL_SCANCODE_DOWN: + case SDL_SCANCODE_KP_2: move_selection(1); return true; @@ -346,6 +346,11 @@ return UI::Panel::handle_key(down, code); } + +bool Table<void *>::handle_mousewheel(uint32_t which, int32_t x, int32_t y) { + return m_scrollbar->handle_mousewheel(which, x, y); +} + /** * Handle mouse presses: select the appropriate entry */ @@ -356,9 +361,6 @@ focus(); switch (btn) { - case SDL_BUTTON_WHEELDOWN: - case SDL_BUTTON_WHEELUP: - return m_scrollbar ? m_scrollbar->handle_mousepress(btn, 0, y) : false; case SDL_BUTTON_LEFT: { int32_t const time = WLApplication::get()->get_time(); === modified file 'src/ui_basic/table.h' --- src/ui_basic/table.h 2014-09-30 19:36:00 +0000 +++ src/ui_basic/table.h 2014-10-28 15:04:08 +0000 @@ -107,7 +107,8 @@ void draw(RenderTarget &); bool handle_mousepress (uint8_t btn, int32_t x, int32_t y); bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y); - virtual bool handle_key(bool down, SDL_keysym code); + bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override; + virtual bool handle_key(bool down, SDL_Keysym code); }; template <> class Table<void *> : public Panel { @@ -243,7 +244,8 @@ void draw(RenderTarget &) override; bool handle_mousepress (uint8_t btn, int32_t x, int32_t y) override; bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y) override; - bool handle_key(bool down, SDL_keysym code) override; + bool handle_mousewheel(uint32_t which, int32_t x, int32_t y) override; + bool handle_key(bool down, SDL_Keysym code) override; private: bool default_compare_checkbox(uint32_t column, uint32_t a, uint32_t b); === modified file 'src/ui_basic/window.cc' --- src/ui_basic/window.cc 2014-07-25 22:17:48 +0000 +++ src/ui_basic/window.cc 2014-10-28 15:04:08 +0000 @@ -19,7 +19,7 @@ #include "ui_basic/window.h" -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include "base/log.h" #include "graphic/font.h" @@ -436,7 +436,7 @@ // needs is the key state at the time the mouse was clicked. See the // usage comment for get_key_state. if - (((get_key_state(SDLK_LCTRL) | get_key_state(SDLK_RCTRL)) + (((get_key_state(SDL_SCANCODE_LCTRL) | get_key_state(SDL_SCANCODE_RCTRL)) && btn == SDL_BUTTON_LEFT) || === modified file 'src/ui_fsmenu/intro.cc' --- src/ui_fsmenu/intro.cc 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/intro.cc 2014-10-28 15:04:08 +0000 @@ -45,7 +45,7 @@ return true; } -bool FullscreenMenuIntro::handle_key(bool const down, SDL_keysym const code) +bool FullscreenMenuIntro::handle_key(bool const down, SDL_Keysym const code) { if (down && code.sym == SDLK_ESCAPE) end_modal(0); === modified file 'src/ui_fsmenu/intro.h' --- src/ui_fsmenu/intro.h 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/intro.h 2014-10-28 15:04:08 +0000 @@ -34,7 +34,7 @@ protected: bool handle_mousepress (uint8_t btn, int32_t x, int32_t y) override; bool handle_mouserelease(uint8_t btn, int32_t x, int32_t y) override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; private: UI::Textarea m_message; }; === modified file 'src/ui_fsmenu/load_map_or_game.cc' --- src/ui_fsmenu/load_map_or_game.cc 2014-10-13 09:50:55 +0000 +++ src/ui_fsmenu/load_map_or_game.cc 2014-10-28 15:04:08 +0000 @@ -67,14 +67,14 @@ m_table(this, m_tablex, m_tabley, m_tablew, m_tableh, sort_descending) {} -bool FullscreenMenuLoadMapOrGame::handle_key(bool down, SDL_keysym code) { +bool FullscreenMenuLoadMapOrGame::handle_key(bool down, SDL_Keysym code) { if (!down) return false; switch (code.sym) { - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: clicked_ok(); return true; === modified file 'src/ui_fsmenu/load_map_or_game.h' --- src/ui_fsmenu/load_map_or_game.h 2014-10-13 09:50:55 +0000 +++ src/ui_fsmenu/load_map_or_game.h 2014-10-28 15:04:08 +0000 @@ -75,7 +75,7 @@ struct FullscreenMenuLoadMapOrGame : public FullscreenMenuBase { FullscreenMenuLoadMapOrGame(bool sortdesc = false); - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; protected: virtual void clicked_ok() {end_modal(1);} === modified file 'src/ui_fsmenu/loadgame.cc' --- src/ui_fsmenu/loadgame.cc 2014-10-28 08:16:53 +0000 +++ src/ui_fsmenu/loadgame.cc 2014-10-28 15:04:08 +0000 @@ -532,14 +532,14 @@ set_has_selection(); } -bool FullscreenMenuLoadGame::handle_key(bool down, SDL_keysym code) +bool FullscreenMenuLoadGame::handle_key(bool down, SDL_Keysym code) { if (!down) return false; switch (code.sym) { - case SDLK_KP_PERIOD: + case SDL_SCANCODE_KP_PERIOD: if (code.mod & KMOD_NUM) break; /* no break */ === modified file 'src/ui_fsmenu/loadgame.h' --- src/ui_fsmenu/loadgame.h 2014-10-17 08:27:50 +0000 +++ src/ui_fsmenu/loadgame.h 2014-10-28 15:04:08 +0000 @@ -76,7 +76,7 @@ void think(); - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; protected: void clicked_ok() override; === modified file 'src/ui_fsmenu/options.cc' --- src/ui_fsmenu/options.cc 2014-10-27 10:31:04 +0000 +++ src/ui_fsmenu/options.cc 2014-10-28 15:04:08 +0000 @@ -335,24 +335,18 @@ m_snap_win_overlap_only .set_state(opt.snap_win_overlap_only); m_dock_windows_to_edges .set_state(opt.dock_windows_to_edges); - // GRAPHIC_TODO(unknown): this shouldn't be here List all resolutions - // take a copy to not change real video info structure - SDL_PixelFormat fmt = *SDL_GetVideoInfo()->vfmt; - fmt.BitsPerPixel = 32; - for - (const SDL_Rect * const * modes = SDL_ListModes(&fmt, SDL_SWSURFACE | SDL_FULLSCREEN); - modes && *modes; - ++modes) - { - const SDL_Rect & mode = **modes; - if (800 <= mode.w && 600 <= mode.h) - { - const ScreenResolution this_res = {mode.w, mode.h}; - if - (m_resolutions.empty() + for (int modes = 0; modes < SDL_GetNumDisplayModes(0); ++modes) { + SDL_DisplayMode mode; + SDL_GetDisplayMode(0, modes, & mode); + if (800 <= mode.w && 600 <= mode.h && + (SDL_BITSPERPIXEL(mode.format) == 32 || + SDL_BITSPERPIXEL(mode.format) == 24)) { + ScreenResolution this_res = { + mode.w, mode.h, static_cast<int32_t>(SDL_BITSPERPIXEL(mode.format))}; + if (this_res.depth == 24) this_res.depth = 32; + if (m_resolutions.empty() || this_res.xres != m_resolutions.rbegin()->xres - || this_res.yres != m_resolutions.rbegin()->yres) - { + || this_res.yres != m_resolutions.rbegin()->yres) { m_resolutions.push_back(this_res); } } @@ -391,6 +385,8 @@ nullptr, "en" == opt.language); add_languages_to_list(&m_language_list, opt.language); + + m_language_list.focus(); } void FullscreenMenuOptions::update_sb_autosave_unit() { @@ -409,11 +405,11 @@ } } -bool FullscreenMenuOptions::handle_key(bool down, SDL_keysym code) +bool FullscreenMenuOptions::handle_key(bool down, SDL_Keysym code) { if (down) { switch (code.sym) { - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: end_modal(static_cast<int32_t>(om_ok)); return true; @@ -618,6 +614,7 @@ did_select_a_font |= cmpbool; m_ui_font_list.add ("Widelands", UI_FONT_NAME_WIDELANDS, nullptr, cmpbool); + m_ui_font_list.focus(); // Fill with all left *.ttf files we find in fonts FilenameSet files = @@ -648,11 +645,11 @@ } } -bool FullscreenMenuAdvancedOptions::handle_key(bool down, SDL_keysym code) +bool FullscreenMenuAdvancedOptions::handle_key(bool down, SDL_Keysym code) { if (down) { switch (code.sym) { - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: end_modal(static_cast<int32_t>(om_ok)); return true; === modified file 'src/ui_fsmenu/options.h' --- src/ui_fsmenu/options.h 2014-09-27 11:23:37 +0000 +++ src/ui_fsmenu/options.h 2014-10-28 15:04:08 +0000 @@ -90,7 +90,7 @@ }; /// Handle keypresses - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; private: uint32_t const m_vbutw; @@ -147,6 +147,7 @@ public: int32_t xres; int32_t yres; + int32_t depth; }; /// All supported screen resolutions. @@ -167,7 +168,7 @@ }; /// Handle keypresses - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; private: void update_sb_dis_panel_unit(); === modified file 'src/wlapplication.cc' --- src/wlapplication.cc 2014-10-28 08:16:53 +0000 +++ src/wlapplication.cc 2014-10-28 15:04:08 +0000 @@ -489,10 +489,6 @@ g_sound_handler.change_music(); break; - case SDL_VIDEOEXPOSE: - // log ("SDL Video Window expose event: %i\n", ev.expose.type); - g_gr->update_fullscreen(); - break; default: break; } @@ -510,15 +506,15 @@ case SDL_KEYDOWN: case SDL_KEYUP: if - (ev.key.keysym.sym == SDLK_F10 && - (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL))) + (ev.key.keysym.sym == SDL_SCANCODE_F10 && + (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL))) { // get out of here quick if (ev.type == SDL_KEYDOWN) m_should_die = true; break; } - if (ev.key.keysym.sym == SDLK_F11) { // take screenshot + if (ev.key.keysym.sym == SDL_SCANCODE_F11) { // take screenshot if (ev.type == SDL_KEYDOWN) { if (g_fs->disk_space() < MINIMUM_DISK_SPACE) { @@ -544,11 +540,20 @@ } break; + case SDL_TEXTINPUT: + if (cb && cb->textinput) { + cb->textinput(ev.text.text); + } + break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: _handle_mousebutton(ev, cb); break; - + case SDL_MOUSEWHEEL: + if (cb && cb->mouse_wheel) { + cb->mouse_wheel(ev.wheel.which, ev.wheel.x, ev.wheel.y); + } + break; case SDL_MOUSEMOTION: m_mouse_position = Point(ev.motion.x, ev.motion.y); @@ -558,7 +563,6 @@ ev.motion.x, ev.motion.y, ev.motion.xrel, ev.motion.yrel); break; - case SDL_QUIT: m_should_die = true; break; @@ -594,7 +598,7 @@ // mouse button. if (ev.button.button == SDL_BUTTON_MIDDLE && - (get_key_state(SDLK_LALT) || get_key_state(SDLK_RALT))) + (get_key_state(SDL_SCANCODE_LALT) || get_key_state(SDL_SCANCODE_RALT))) { ev.button.button = SDL_BUTTON_LEFT; m_faking_middle_mouse_button = true; @@ -627,8 +631,8 @@ /// Instantaneously move the mouse cursor without creating a motion event. /// -/// SDL_WarpMouse() *will* create a mousemotion event, which we do not want. As -/// a workaround, we store the delta in m_mouse_compensate_warp and use that to +/// SDL_WarpMouseInWindow() *will* create a mousemotion event, which we do not want. +/// As a workaround, we store the delta in m_mouse_compensate_warp and use that to /// eliminate the motion event in poll_event() /// /// \param position The new mouse position @@ -640,7 +644,10 @@ SDL_GetMouseState(&cur_position.x, &cur_position.y); if (cur_position != position) { m_mouse_compensate_warp += cur_position - position; - SDL_WarpMouse(position.x, position.y); + SDL_Window* sdl_window = g_gr->get_sdlwindow(); + if (sdl_window) { + SDL_WarpMouseInWindow(sdl_window, position.x, position.y); + } } } @@ -655,10 +662,18 @@ */ void WLApplication::set_input_grab(bool grab) { + if (!g_gr) { + return; + } + SDL_Window * sdl_window = g_gr->get_sdlwindow(); if (grab) { - SDL_WM_GrabInput(SDL_GRAB_ON); + if (sdl_window) { + SDL_SetWindowGrab(sdl_window, SDL_TRUE); + } } else { - SDL_WM_GrabInput(SDL_GRAB_OFF); + if (sdl_window) { + SDL_SetWindowGrab(sdl_window, SDL_FALSE); + } warp_mouse(m_mouse_position); //TODO(unknown): is this redundant? } } @@ -700,6 +715,8 @@ s.get_int("yres", DEFAULT_RESOLUTION_H), s.get_bool("fullscreen", false), s.get_bool("opengl", true)); + // does only work with a window + set_input_grab(s.get_bool("inputgrab", false)); } /** @@ -715,7 +732,6 @@ //then parse the commandline - overwrites conffile settings handle_commandline_parameters(); - set_input_grab(s.get_bool("inputgrab", false)); set_mouse_swap(s.get_bool("swapmouse", false)); // KLUDGE! @@ -827,50 +843,12 @@ setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 0); #endif - //try all available video drivers till we find one that matches - std::vector<std::string> videomode; - int result = -1; - - //add default video mode -#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) - videomode.push_back("x11"); -#endif -#ifdef _WIN32 - videomode.push_back("windib"); -#endif -#ifdef __APPLE__ - videomode.push_back("Quartz"); -#endif - //if a video mode is given on the command line, add that one first - { - const char * videodrv; - videodrv = getenv("SDL_VIDEODRIVER"); - if (videodrv) { - log("Also adding video driver %s\n", videodrv); - videomode.push_back(videodrv); - } - } - char videodrvused[26]; - strcpy(videodrvused, "SDL_VIDEODRIVER=\0"); - wout << videodrvused << "&" << std::endl; - for (int i = videomode.size() - 1; result == -1 && i >= 0; --i) { - strcpy(videodrvused + 16, videomode[i].c_str()); - videodrvused[16 + videomode[i].size()] = '\0'; - putenv(videodrvused); - log - ("Graphics: Trying Video driver: %i %s %s\n", - i, videomode[i].c_str(), videodrvused); - result = SDL_Init(sdl_flags); - } - - if (result == -1) + if (SDL_Init(sdl_flags) == -1) throw wexception ("Failed to initialize SDL, no valid video driver: %s", SDL_GetError()); SDL_ShowCursor(SDL_DISABLE); - SDL_EnableUNICODE(1); - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); refresh_graphics(); @@ -891,8 +869,7 @@ << std::endl; init_graphics(0, 0, false, false); - SDL_QuitSubSystem - (SDL_INIT_TIMER|SDL_INIT_VIDEO|SDL_INIT_CDROM|SDL_INIT_JOYSTICK); + SDL_QuitSubSystem(SDL_INIT_TIMER|SDL_INIT_VIDEO|SDL_INIT_JOYSTICK); #ifndef _WIN32 // SOUND can lock up with buggy SDL/drivers. we try to do the right thing === modified file 'src/wlapplication.h' --- src/wlapplication.h 2014-10-16 04:54:10 +0000 +++ src/wlapplication.h 2014-10-28 15:04:08 +0000 @@ -58,7 +58,9 @@ int32_t x, int32_t y); // The coordinates of the mouse at release time. void (*mouse_move) (const uint8_t state, int32_t x, int32_t y, int32_t xdiff, int32_t ydiff); - void (*key) (bool down, SDL_keysym code); + void (*key) (bool down, SDL_Keysym code); + void (*textinput) (const char * text); + void (*mouse_wheel) (uint32_t which, int32_t x, int32_t y); }; /// You know main functions, of course. This is the main struct. @@ -143,7 +145,7 @@ /// Get the state of the current KeyBoard Button /// \warning This function doesn't check for dumbness - bool get_key_state(SDLKey const key) const {return SDL_GetKeyState(nullptr)[key];} + bool get_key_state(SDL_Scancode const key) const {return SDL_GetKeyboardState(nullptr)[key];} //@{ void warp_mouse(Point); === modified file 'src/wui/CMakeLists.txt' --- src/wui/CMakeLists.txt 2014-07-16 08:23:42 +0000 +++ src/wui/CMakeLists.txt 2014-10-28 15:04:08 +0000 @@ -127,7 +127,7 @@ waresqueuedisplay.h watchwindow.cc watchwindow.h - USES_SDL + USES_SDL2 DEPENDS base_deprecated base_exceptions === modified file 'src/wui/actionconfirm.cc' --- src/wui/actionconfirm.cc 2014-10-27 08:06:06 +0000 +++ src/wui/actionconfirm.cc 2014-10-28 15:04:08 +0000 @@ -265,7 +265,7 @@ (building->get_playercaps() & Widelands::Building::PCap_Bulldoze)) { game.send_player_bulldoze - (*todestroy, get_key_state(SDLK_LCTRL) << get_key_state(SDLK_RCTRL)); + (*todestroy, get_key_state(SDL_SCANCODE_LCTRL) << get_key_state(SDL_SCANCODE_RCTRL)); iaplayer().need_complete_redraw(); } === modified file 'src/wui/building_statistics_menu.cc' --- src/wui/building_statistics_menu.cc 2014-10-19 12:15:46 +0000 +++ src/wui/building_statistics_menu.cc 2014-10-28 15:04:08 +0000 @@ -118,6 +118,7 @@ (Columns::Size, boost::bind (&BuildingStatisticsMenu::compare_building_size, this, _1, _2)); + m_table.focus(); // toggle when to run button m_progbar.set_total(100); === modified file 'src/wui/buildingwindow.cc' --- src/wui/buildingwindow.cc 2014-10-17 09:18:58 +0000 +++ src/wui/buildingwindow.cc 2014-10-28 15:04:08 +0000 @@ -373,7 +373,7 @@ */ void BuildingWindow::act_bulldoze() { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { if (m_building.get_playercaps() & Widelands::Building::PCap_Bulldoze) igbase().game().send_player_bulldoze(m_building); } @@ -389,7 +389,7 @@ */ void BuildingWindow::act_dismantle() { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { if (m_building.get_playercaps() & Widelands::Building::PCap_Dismantle) igbase().game().send_player_dismantle(m_building); } @@ -432,7 +432,7 @@ */ void BuildingWindow::act_enhance(Widelands::BuildingIndex id) { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { if (m_building.get_playercaps() & Widelands::Building::PCap_Enhancable) igbase().game().send_player_enhance_building(m_building, id); } === modified file 'src/wui/encyclopedia_window.cc' --- src/wui/encyclopedia_window.cc 2014-10-27 10:31:04 +0000 +++ src/wui/encyclopedia_window.cc 2014-10-28 15:04:08 +0000 @@ -77,6 +77,7 @@ /** TRANSLATORS: Column title in the Tribal Wares Encyclopedia */ (wareColumnWidth, ngettext("Consumed Ware Type", "Consumed Ware Types", 0)); condTable.add_column (quantityColumnWidth, _("Quantity")); + condTable.focus(); fill_wares(); === modified file 'src/wui/fieldaction.cc' --- src/wui/fieldaction.cc 2014-09-20 09:37:47 +0000 +++ src/wui/fieldaction.cc 2014-10-28 15:04:08 +0000 @@ -737,9 +737,9 @@ if (upcast(Widelands::Flag, flag, m_node.field->get_immovable())) { if (Building * const building = flag->get_building()) { if (building->get_playercaps() & Building::PCap_Bulldoze) { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze - (*flag, get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)); + (*flag, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)); } else { show_bulldoze_confirm @@ -750,7 +750,7 @@ } } else { ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze - (*flag, get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)); + (*flag, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)); ibase().need_complete_redraw(); } } @@ -795,7 +795,7 @@ Widelands::EditorGameBase & egbase = ibase().egbase(); if (upcast(Widelands::Road, road, egbase.map().get_immovable(m_node))) ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze - (*road, get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)); + (*road, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)); ibase().need_complete_redraw(); okdialog(); } === modified file 'src/wui/game_message_menu.cc' --- src/wui/game_message_menu.cc 2014-10-11 10:04:45 +0000 +++ src/wui/game_message_menu.cc 2014-10-28 15:04:08 +0000 @@ -57,6 +57,7 @@ list->add_column (60, _("Status"), "", UI::Align_HCenter); list->add_column(330, _("Title")); list->add_column(120, _("Time sent")); + list->focus(); UI::Button * clearselectionbtn = new UI::Button @@ -243,7 +244,7 @@ /** * Handle message menu hotkeys. */ -bool GameMessageMenu::handle_key(bool down, SDL_keysym code) +bool GameMessageMenu::handle_key(bool down, SDL_Keysym code) { if (down) { switch (code.sym) { @@ -252,7 +253,7 @@ center_view(); return true; - case SDLK_KP_PERIOD: + case SDL_SCANCODE_KP_PERIOD: if (code.mod & KMOD_NUM) break; /* no break */ === modified file 'src/wui/game_message_menu.h' --- src/wui/game_message_menu.h 2014-09-10 14:48:40 +0000 +++ src/wui/game_message_menu.h 2014-10-28 15:04:08 +0000 @@ -45,7 +45,7 @@ enum Mode {Inbox, Archive}; void think() override; - bool handle_key(bool down, SDL_keysym code) override; + bool handle_key(bool down, SDL_Keysym code) override; private: enum Cols {ColSelect, ColStatus, ColTitle, ColTimeSent}; === modified file 'src/wui/game_options_menu.cc' --- src/wui/game_options_menu.cc 2014-10-13 19:32:08 +0000 +++ src/wui/game_options_menu.cc 2014-10-28 15:04:08 +0000 @@ -182,7 +182,7 @@ } void GameOptionsMenu::clicked_exit_game() { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { m_gb.end_modal(0); } else { === modified file 'src/wui/game_tips.cc' --- src/wui/game_tips.cc 2014-07-14 10:45:44 +0000 +++ src/wui/game_tips.cc 2014-10-28 15:04:08 +0000 @@ -121,5 +121,5 @@ const Image* rendered_text = UI::g_fh1->render(as_game_tip(m_tips[index].text), tips_area.w); rt.blit(center - Point(rendered_text->width() / 2, rendered_text->height() / 2), rendered_text); - g_gr->update_rectangle(tips_area); + g_gr->update(); } === modified file 'src/wui/interactive_base.cc' --- src/wui/interactive_base.cc 2014-10-27 10:14:10 +0000 +++ src/wui/interactive_base.cc 2014-10-28 15:04:08 +0000 @@ -366,14 +366,22 @@ const uint32_t scrollval = 10; if (keyboard_free() && Panel::allow_user_input()) { - if (get_key_state(SDLK_UP) || (get_key_state(SDLK_KP8) && (SDL_GetModState() ^ KMOD_NUM))) + if (get_key_state(SDL_SCANCODE_UP) || + (get_key_state(SDL_SCANCODE_KP_8) && (SDL_GetModState() ^ KMOD_NUM))) { set_rel_viewpoint(Point(0, -scrollval), false); - if (get_key_state(SDLK_DOWN) || (get_key_state(SDLK_KP2) && (SDL_GetModState() ^ KMOD_NUM))) + } + if (get_key_state(SDL_SCANCODE_DOWN) || + (get_key_state(SDL_SCANCODE_KP_2) && (SDL_GetModState() ^ KMOD_NUM))) { set_rel_viewpoint(Point(0, scrollval), false); - if (get_key_state(SDLK_LEFT) || (get_key_state(SDLK_KP4) && (SDL_GetModState() ^ KMOD_NUM))) + } + if (get_key_state(SDL_SCANCODE_LEFT) || + (get_key_state(SDL_SCANCODE_KP_4) && (SDL_GetModState() ^ KMOD_NUM))) { set_rel_viewpoint(Point(-scrollval, 0), false); - if (get_key_state(SDLK_RIGHT) || (get_key_state(SDLK_KP6) && (SDL_GetModState() ^ KMOD_NUM))) + } + if (get_key_state(SDL_SCANCODE_RIGHT) || + (get_key_state(SDL_SCANCODE_KP_6) && (SDL_GetModState() ^ KMOD_NUM))) { set_rel_viewpoint(Point (scrollval, 0), false); + } } egbase().think(); // Call game logic here. The game advances. @@ -386,7 +394,7 @@ // The entire screen needs to be redrawn (unit movement, tile animation, // etc...) - g_gr->update_fullscreen(); + g_gr->update(); update_speedlabel(); @@ -656,7 +664,7 @@ if (allow_user_input() && - (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL))) + (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL))) { // place flags const Map & map = egbase().map(); @@ -667,7 +675,7 @@ std::vector<Coords>::const_iterator const last = c_vector.end () - 2; - if (get_key_state(SDLK_LSHIFT) || get_key_state(SDLK_RSHIFT)) { + if (get_key_state(SDL_SCANCODE_LSHIFT) || get_key_state(SDL_SCANCODE_RSHIFT)) { for // start to end (std::vector<Coords>::const_iterator it = first; it <= last; @@ -906,13 +914,13 @@ } -bool InteractiveBase::handle_key(bool const down, SDL_keysym const code) +bool InteractiveBase::handle_key(bool const down, SDL_Keysym const code) { if (m->quicknavigation->handle_key(down, code)) return true; switch (code.sym) { - case SDLK_KP9: + case SDL_SCANCODE_KP_9: if (code.mod & KMOD_NUM) break; /* no break */ @@ -933,7 +941,7 @@ ctrl->toggle_paused(); return true; - case SDLK_KP3: + case SDL_SCANCODE_KP_3: if (code.mod & KMOD_NUM) break; /* no break */ @@ -949,7 +957,7 @@ } return true; #ifndef NDEBUG // only in debug builds - case SDLK_F6: + case SDL_SCANCODE_F6: if (get_display_flag(dfDebug)) { GameChatMenu::create_script_console( this, m_debugconsole, *DebugConsole::get_chat_provider()); === modified file 'src/wui/interactive_base.h' --- src/wui/interactive_base.h 2014-09-20 09:37:47 +0000 +++ src/wui/interactive_base.h 2014-10-28 15:04:08 +0000 @@ -22,7 +22,7 @@ #include <memory> -#include <SDL_keysym.h> +#include <SDL_keycode.h> #include "logic/editor_game_base.h" #include "logic/map.h" @@ -135,7 +135,7 @@ void minimap_warp(int32_t x, int32_t y); void draw_overlay(RenderTarget &) override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; void unset_sel_picture(); void set_sel_picture(const char * const); === modified file 'src/wui/interactive_player.cc' --- src/wui/interactive_player.cc 2014-10-27 08:06:06 +0000 +++ src/wui/interactive_player.cc 2014-10-28 15:04:08 +0000 @@ -365,7 +365,7 @@ * \li Pause: pauses the game * \li Return: write chat message */ -bool InteractivePlayer::handle_key(bool const down, SDL_keysym const code) +bool InteractivePlayer::handle_key(bool const down, SDL_Keysym const code) { if (down) { switch (code.sym) { @@ -405,7 +405,7 @@ g_gr->toggle_fullscreen(); return true; - case SDLK_KP7: + case SDL_SCANCODE_KP_7: if (code.mod & KMOD_NUM) break; /* no break */ @@ -413,7 +413,7 @@ move_view_to(game().map().get_starting_pos(m_player_number)); return true; - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: case SDLK_RETURN: if (!m_chatProvider | !m_chatenabled || !is_multiplayer()) break; === modified file 'src/wui/interactive_player.h' --- src/wui/interactive_player.h 2014-09-10 14:48:40 +0000 +++ src/wui/interactive_player.h 2014-10-28 15:04:08 +0000 @@ -61,7 +61,7 @@ void node_action() override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; Widelands::Player & player() const { return game().player(m_player_number); === modified file 'src/wui/interactive_spectator.cc' --- src/wui/interactive_spectator.cc 2014-09-10 16:57:31 +0000 +++ src/wui/interactive_spectator.cc 2014-10-28 15:04:08 +0000 @@ -243,7 +243,7 @@ /** * Global in-game keypresses: */ -bool InteractiveSpectator::handle_key(bool const down, SDL_keysym const code) +bool InteractiveSpectator::handle_key(bool const down, SDL_Keysym const code) { if (down) switch (code.sym) { @@ -268,7 +268,7 @@ return true; case SDLK_RETURN: - case SDLK_KP_ENTER: + case SDL_SCANCODE_KP_ENTER: if (!m_chatProvider | !m_chatenabled) break; === modified file 'src/wui/interactive_spectator.h' --- src/wui/interactive_spectator.h 2014-09-10 16:57:31 +0000 +++ src/wui/interactive_spectator.h 2014-10-28 15:04:08 +0000 @@ -44,7 +44,7 @@ Widelands::Player * get_player() const override; - bool handle_key(bool down, SDL_keysym) override; + bool handle_key(bool down, SDL_Keysym) override; private: void toggle_chat(); === modified file 'src/wui/mapview.cc' --- src/wui/mapview.cc 2014-09-10 13:03:40 +0000 +++ src/wui/mapview.cc 2014-10-28 15:04:08 +0000 @@ -192,7 +192,7 @@ if (!intbase().get_sel_freeze()) track_sel(Point(x, y)); - g_gr->update_fullscreen(); + g_gr->update(); return true; } === modified file 'src/wui/quicknavigation.cc' --- src/wui/quicknavigation.cc 2014-09-10 08:55:04 +0000 +++ src/wui/quicknavigation.cc 2014-10-28 15:04:08 +0000 @@ -86,7 +86,7 @@ m_havefirst = true; } -bool QuickNavigation::handle_key(bool down, SDL_keysym key) +bool QuickNavigation::handle_key(bool down, SDL_Keysym key) { if (!m_havefirst) return false; @@ -98,8 +98,8 @@ assert(which < 10); bool ctrl = - WLApplication::get()->get_key_state(SDLK_LCTRL) || - WLApplication::get()->get_key_state(SDLK_RCTRL); + WLApplication::get()->get_key_state(SDL_SCANCODE_LCTRL) || + WLApplication::get()->get_key_state(SDL_SCANCODE_RCTRL); if (ctrl) { m_landmarks[which].point = m_current; m_landmarks[which].set = true; === modified file 'src/wui/quicknavigation.h' --- src/wui/quicknavigation.h 2014-09-14 11:31:58 +0000 +++ src/wui/quicknavigation.h 2014-10-28 15:04:08 +0000 @@ -47,7 +47,7 @@ void view_changed(Point point, bool jump); - bool handle_key(bool down, SDL_keysym key); + bool handle_key(bool down, SDL_Keysym key); private: void setview(Point where); === modified file 'src/wui/shipwindow.cc' --- src/wui/shipwindow.cc 2014-09-10 13:03:40 +0000 +++ src/wui/shipwindow.cc 2014-10-28 15:04:08 +0000 @@ -291,7 +291,7 @@ /// Sink the ship if confirmed void ShipWindow::act_sink() { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { m_igbase.game().send_player_sink_ship(m_ship); } else { @@ -302,7 +302,7 @@ /// Cancel expedition if confirmed void ShipWindow::act_cancel_expedition() { - if (get_key_state(SDLK_LCTRL) || get_key_state(SDLK_RCTRL)) { + if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) { m_igbase.game().send_player_cancel_expedition_ship(m_ship); } else { === modified file 'utils/macos/build_app.sh' --- utils/macos/build_app.sh 2014-10-16 04:54:10 +0000 +++ utils/macos/build_app.sh 2014-10-28 15:04:08 +0000 @@ -1,6 +1,6 @@ #!/bin/bash -set -e +set -e if [ "$#" == "0" ]; then echo "Usage: $0 <bzr_repo_directory>" @@ -35,7 +35,7 @@ cp $SOURCE_DIR/COPYING $DESTINATION/COPYING.txt echo "Creating DMG ..." - hdiutil create -fs HFS+ -volname "Widelands $WLVERSION" -srcfolder "$DESTINATION" "$UP/widelands_64bit_$WLVERSION.dmg" + hdiutil create -fs HFS+ -volname "Widelands $WLVERSION" -srcfolder "$DESTINATION" "$UP/widelands_64bit_$WLVERSION.dmg" } function MakeAppPackage { @@ -88,8 +88,8 @@ cp -a src/widelands $DESTINATION/Widelands.app/Contents/MacOS/ echo "Stripping binary ..." - strip -u -r $DESTINATION/Widelands.app/Contents/MacOS/widelands - + strip -u -r $DESTINATION/Widelands.app/Contents/MacOS/widelands + echo "Copying dynamic libraries ..." dylibbundler -od -b -x $DESTINATION/Widelands.app/Contents/MacOS/widelands -d $DESTINATION/Widelands.app/Contents/libs } @@ -106,26 +106,26 @@ -DWL_PATHS_ARE_ABSOLUTE:STRING="false" \ -DCMAKE_PREFIX_PATH:PATH="/usr/local" \ \ - -DSDL_LIBRARY:STRING="-L/usr/local/lib /usr/local/lib/libSDLmain.a /usr/local/lib/libSDL.a -Wl,-framework,OpenGL -Wl,-framework,Cocoa -Wl,-framework,ApplicationServices -Wl,-framework,Carbon -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit -Wl,-framework,IOKit" \ - -DSDL_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ + -DSDL2_LIBRARY:STRING="-L/usr/local/lib /usr/local/lib/libSDL2main.a /usr/local/lib/libSDL2.a -Wl,-framework,OpenGL -Wl,-framework,Cocoa -Wl,-framework,ApplicationServices -Wl,-framework,Carbon -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit -Wl,-framework,IOKit" \ + -DSDL2_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ \ - -DSDLIMAGE_LIBRARY:STRING="-Wl,/usr/local/lib/libSDL_image.a -Wl,/usr/local/lib/libjpeg.a" \ - -DSDLIMAGE_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ + -DSDL2IMAGE_LIBRARY:STRING="-Wl,/usr/local/lib/libSDL2_image.a -Wl,/usr/local/lib/libjpeg.a" \ + -DSDL2IMAGE_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ \ -DPNG_LIBRARY:FILEPATH="/usr/local/opt/libpng/lib/libpng.a" \ -DPNG_INCLUDE_DIR:PATH="/usr/local/opt/libpng/include" \ \ - -DSDLTTF_LIBRARY:STRING="-Wl,/usr/local/opt/freetype/lib/libfreetype.a -Wl,/usr/local/lib/libbz2.a -Wl,/usr/local/lib/libSDL_ttf.a" \ - -DSDLTTF_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ - \ - -DSDLGFX_LIBRARY:FILEPATH="/usr/local/lib/libSDL_gfx.a" \ - -DSDLGFX_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ - \ - -DSDLMIXER_LIBRARY:STRING="-Wl,/usr/local/lib/libvorbisfile.a -Wl,/usr/local/lib/libogg.a -Wl,/usr/local/lib/libvorbis.a -Wl,/usr/local/lib/libSDL_mixer.a" \ - -DSDLMIXER_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ - \ - -DSDLNET_LIBRARY:FILEPATH="/usr/local/lib/libSDL_net.a" \ - -DSDLNET_INCLUDE_DIR:PATH="/usr/local/include/SDL" \ + -DSDL2TTF_LIBRARY:STRING="-Wl,/usr/local/opt/freetype/lib/libfreetype.a -Wl,/usr/local/lib/libbz2.a -Wl,/usr/local/lib/libSDL2_ttf.a" \ + -DSDL2TTF_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ + \ + -DSDL2GFX_LIBRARY:FILEPATH="/usr/local/lib/libSDL2_gfx.a" \ + -DSDL2GFX_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ + \ + -DSDL2MIXER_LIBRARY:STRING="-Wl,/usr/local/lib/libvorbisfile.a -Wl,/usr/local/lib/libogg.a -Wl,/usr/local/lib/libvorbis.a -Wl,/usr/local/lib/libSDL2_mixer.a" \ + -DSDL2MIXER_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ + \ + -DSDL2NET_LIBRARY:FILEPATH="/usr/local/lib/libSDL2_net.a" \ + -DSDL2NET_INCLUDE_DIR:PATH="/usr/local/include/SDL2" \ \ -DINTL_LIBRARY:STRING="-Wl,/usr/local/opt/libiconv/lib/libiconv.a -Wl,/usr/local/opt/gettext/lib/libintl.a" \ -DINTL_INCLUDE_DIR:PATH="/usr/local/opt/gettext/include" \
_______________________________________________ Mailing list: https://launchpad.net/~widelands-dev Post to : widelands-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~widelands-dev More help : https://help.launchpad.net/ListHelp