Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
midwan committed Sep 4, 2024
2 parents 1781a81 + ca48408 commit c74d1cb
Show file tree
Hide file tree
Showing 57 changed files with 1,394 additions and 626 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/windows-cmake-msys2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Windows-cmake-msys2
on: [push, pull_request]
jobs:
Build-Guisan:
runs-on: windows-latest
steps:
- uses: msys2/setup-msys2@v2
with:
msystem: clang64
update: true
install: >-
mingw-w64-clang-x86_64-cmake
mingw-w64-clang-x86_64-make
mingw-w64-clang-x86_64-clang
mingw-w64-clang-x86_64-SDL2
mingw-w64-clang-x86_64-SDL2_image
mingw-w64-clang-x86_64-SDL2_ttf
- name: Check out repository code
uses: actions/checkout@v4

- name: Build
shell: msys2 {0}
run: |
mkdir build
cd build
cmake ..
cmake --build .
- name: artifact
uses: actions/upload-artifact@v4
with:
name: guisan-msys2
path: |
build/**.dll
build/**.a
305 changes: 240 additions & 65 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,65 +1,240 @@
cmake_minimum_required(VERSION 3.16)
project(guisan VERSION 1.0 DESCRIPTION "Guisan")

find_package(SDL2 REQUIRED)
add_library(guisan STATIC
src/actionevent.cpp
src/basiccontainer.cpp
src/cliprectangle.cpp
src/color.cpp
src/defaultfont.cpp
src/event.cpp
src/exception.cpp
src/focushandler.cpp
src/font.cpp
src/genericinput.cpp
src/graphics.cpp
src/gui.cpp
src/guisan.cpp
src/image.cpp
src/imagefont.cpp
src/inputevent.cpp
src/key.cpp
src/keyevent.cpp
src/keyinput.cpp
src/mouseevent.cpp
src/mouseinput.cpp
src/rectangle.cpp
src/selectionevent.cpp
src/widget.cpp
src/opengl/opengl.cpp
src/opengl/openglgraphics.cpp
src/opengl/openglimage.cpp
src/sdl/sdl.cpp
src/sdl/sdl2graphics.cpp
src/sdl/sdlgraphics.cpp
src/sdl/sdlimage.cpp
src/sdl/sdlimageloader.cpp
src/sdl/sdlinput.cpp
src/sdl/sdltruetypefont.cpp
src/widgets/button.cpp
src/widgets/checkbox.cpp
src/widgets/container.cpp
src/widgets/dropdown.cpp
src/widgets/icon.cpp
src/widgets/imagebutton.cpp
src/widgets/imagetextbutton.cpp
src/widgets/inputbox.cpp
src/widgets/label.cpp
src/widgets/listbox.cpp
src/widgets/messagebox.cpp
src/widgets/progressbar.cpp
src/widgets/radiobutton.cpp
src/widgets/scrollarea.cpp
src/widgets/slider.cpp
src/widgets/tab.cpp
src/widgets/tabbedarea.cpp
src/widgets/textbox.cpp
src/widgets/textfield.cpp
src/widgets/togglebutton.cpp
src/widgets/window.cpp)
target_include_directories(guisan PRIVATE ${SDL2_INCLUDE_DIRS} ./include)

TARGET_LINK_LIBRARIES(${PROJECT_NAME} PRIVATE SDL2)

install(TARGETS guisan DESTINATION ./lib)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
#SET(CMAKE_MODULE_PATH "cmake_modules/")

PROJECT(guisan)

SET(MAJOR_VERSION 1)
SET(MINOR_VERSION 1)
SET(PATCH_LEVEL 0)
SET(${PROJECT_NAME}_SOVERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_LEVEL})
SET(${PROJECT_NAME}_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_LEVEL})

# set default cmake build type to RelWithDebInfo (None Debug Release RelWithDebInfo MinSizeRel)
#IF( NOT CMAKE_BUILD_TYPE )
# SET( CMAKE_BUILD_TYPE "RelWithDebInfo" )
#ENDIF()

INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/include")
ADD_COMPILE_DEFINITIONS(GUICHAN_BUILD GUICHAN_EXTENSION_BUILD)

# The Guisan core library
FILE(GLOB GUISAN_HEADER include/guisan.hpp)
FILE(GLOB GUISAN_HEADERS
include/guisan/actionevent.hpp
include/guisan/actionlistener.hpp
include/guisan/basiccontainer.hpp
include/guisan/cliprectangle.hpp
include/guisan/color.hpp
include/guisan/containerevent.hpp
include/guisan/containerlistener.hpp
include/guisan/deathlistener.hpp
include/guisan/defaultfont.hpp
include/guisan/event.hpp
include/guisan/exception.hpp
include/guisan/focushandler.hpp
include/guisan/focuslistener.hpp
include/guisan/font.hpp
include/guisan/genericinput.hpp
include/guisan/graphics.hpp
include/guisan/gui.hpp
include/guisan/image.hpp
include/guisan/imagefont.hpp
include/guisan/imageloader.hpp
include/guisan/input.hpp
include/guisan/inputevent.hpp
include/guisan/key.hpp
include/guisan/keyevent.hpp
include/guisan/keyinput.hpp
include/guisan/keylistener.hpp
include/guisan/listmodel.hpp
include/guisan/mouseevent.hpp
include/guisan/mouseinput.hpp
include/guisan/mouselistener.hpp
include/guisan/platform.hpp
include/guisan/rectangle.hpp
include/guisan/selectionevent.hpp
include/guisan/selectionlistener.hpp
include/guisan/widget.hpp
include/guisan/widgetlistener.hpp
)
FILE(GLOB GUISAN_WIDGET_HEADERS include/guisan/widgets/*.hpp)
FILE(GLOB GUISAN_CONTRIB_WIDGET_HEADERS include/guisan/contrib/widgets/*.hpp)
FILE(GLOB GUISAN_SRC src/*.cpp)
FILE(GLOB GUISAN_WIDGET_SRC src/widgets/*.cpp)

# Grouping of the source for nicer display in IDEs such as Visual Studio
SOURCE_GROUP(src FILES ${GUISAN_HEADER})
SOURCE_GROUP(src/guisan FILES ${GUISAN_HEADERS} ${GUISAN_SRC})
SOURCE_GROUP(src/guisan/widgets FILES ${GUISAN_WIDGET_HEADERS} ${GUISAN_WIDGET_SRC})
SOURCE_GROUP(src/guisan/contrib/widgets FILES ${GUISAN_CONTRIB_WIDGET_HEADERS})

OPTION(BUILD_GUISAN_SHARED "Build the Guisan core library as a shared library." ON)
IF(BUILD_GUISAN_SHARED)
SET(GUISAN_LIBRARY_TYPE SHARED)
ELSE(BUILD_GUISAN_SHARED)
SET(GUISAN_LIBRARY_TYPE STATIC)
ENDIF(BUILD_GUISAN_SHARED)

ADD_LIBRARY(${PROJECT_NAME} ${GUISAN_LIBRARY_TYPE}
${GUISAN_HEADER}
${GUISAN_HEADERS}
${GUISAN_WIDGET_HEADERS}
${GUISAN_CONTRIB_WIDGET_HEADERS}
${GUISAN_SRC}
${GUISAN_WIDGET_SRC})

ADD_CUSTOM_TARGET(lib DEPENDS ${PROJECT_NAME}) # Create symlink

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
VERSION ${${PROJECT_NAME}_VERSION}
SOVERSION ${${PROJECT_NAME}_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 # Allow creating static and shared libraries without conflict
OUTPUT_NAME ${PROJECT_NAME}) # Avoid conflicts between library and binary target names

INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
INSTALL(FILES ${GUISAN_HEADER} DESTINATION include/)
INSTALL(FILES ${GUISAN_HEADERS} DESTINATION include/guisan/)
INSTALL(FILES ${GUISAN_WIDGET_HEADERS} DESTINATION include/guisan/widgets/)
INSTALL(FILES ${GUISAN_CONTRIB_WIDGET_HEADERS} DESTINATION include/guisan/contrib/widgets/)

# The Guisan OpenGL extension library
OPTION(ENABLE_OPENGL "Enable the Guisan OpenGL extension" ON)
OPTION(BUILD_GUISAN_OPENGL_SHARED "Build the Guisan OpenGL extension library as a shared library." ON)
FIND_PACKAGE(OpenGL)
IF(ENABLE_OPENGL AND OPENGL_FOUND)

INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})

# The Guisan OpenGL extension source
FILE(GLOB GUISAN_OPENGL_HEADER include/guisan/opengl.hpp)
FILE(GLOB GUISAN_OPENGL_HEADERS include/guisan/opengl/*.hpp)
FILE(GLOB GUISAN_OPENGL_CONTRIB_HEADERS include/guisan/opengl/contrib/*.hpp)
FILE(GLOB GUISAN_OPENGL_SRC src/opengl/*.cpp)

# Grouping of the source for nicer display in IDEs such as Visual Studio
SOURCE_GROUP(src/guisan FILES ${GUISAN_OPENGL_HEADER})
SOURCE_GROUP(src/guisan/opengl FILES ${GUISAN_OPENGL_HEADERS} ${GUISAN_OPENGL_SRC})
SOURCE_GROUP(src/guisan/contrib/opengl FILES ${GUISAN_OPENGL_CONTRIB_HEADERS})

IF(BUILD_GUISAN_OPENGL_SHARED)
SET(GUISAN_OPENGL_LIBRARY_TYPE SHARED)
ELSE(BUILD_GUISAN_OPENGL_SHARED)
SET(GUISAN_OPENGL_LIBRARY_TYPE STATIC)
ENDIF(BUILD_GUISAN_OPENGL_SHARED)
ADD_LIBRARY(${PROJECT_NAME}_opengl ${GUISAN_OPENGL_LIBRARY_TYPE}
${GUISAN_OPENGL_HEADER}
${GUISAN_OPENGL_HEADERS}
${GUISAN_OPENGL_CONTRIB_HEADERS}
${GUISAN_OPENGL_SRC})
IF(WIN32)
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_opengl ${OPENGL_LIBRARY} ${PROJECT_NAME})
ENDIF(WIN32)

SET_TARGET_PROPERTIES(${PROJECT_NAME}_opengl PROPERTIES
VERSION ${${PROJECT_NAME}_VERSION}
SOVERSION ${${PROJECT_NAME}_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 # Allow creating static and shared libraries without conflict
OUTPUT_NAME ${PROJECT_NAME}_opengl) # Avoid conflicts between library and binary target names
INSTALL(TARGETS ${PROJECT_NAME}_opengl DESTINATION lib PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
INSTALL(FILES ${GUISAN_OPENGL_HEADER} DESTINATION include/guisan/)
INSTALL(FILES ${GUISAN_OPENGL_HEADERS} DESTINATION include/guisan/opengl/)
INSTALL(FILES ${GUISAN_OPENGL_CONTRIB_HEADERS} DESTINATION include/guisan/contrib/opengl/)
ENDIF(ENABLE_OPENGL AND OPENGL_FOUND)

# The Guisan SDL extension library
OPTION(ENABLE_SDL "Enable the Guisan SDL extension" ON)
OPTION(BUILD_GUISAN_SDL_SHARED "Build the Guisan SDL extension library as a shared library." ON)

IF(ENABLE_SDL)
FIND_PACKAGE(SDL2 REQUIRED)
FIND_PACKAGE(SDL2_image REQUIRED)
FIND_PACKAGE(SDL2_ttf REQUIRED)

INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})

# The Guichan SDL extension source
FILE(GLOB GUISAN_SDL_HEADER include/guisan/sdl.hpp)
FILE(GLOB GUISAN_SDL_HEADERS include/guisan/sdl/*.hpp)
FILE(GLOB GUISAN_SDL_CONTRIB_HEADERS include/guisan/contrib/sdl/*.hpp)
FILE(GLOB GUISAN_SDL_SRC src/sdl/*.cpp)

# Grouping of the source for nicer display in IDEs such as Visual Studio
SOURCE_GROUP(src/guisan FILES ${GUISAN_SDL_HEADER})
SOURCE_GROUP(src/guisan/sdl FILES ${GUISAN_SDL_HEADERS} ${GUISAN_SDL_SRC})
SOURCE_GROUP(src/guisan/contrib/sdl FILES ${GUISAN_SDL_CONTRIB_HEADERS})

IF(BUILD_GUISAN_SDL_SHARED)
SET(GUISAN_SDL_LIBRARY_TYPE SHARED)
ELSE(BUILD_GUISAN_SDL_SHARED)
SET(GUISAN_SDL_LIBRARY_TYPE STATIC)
ENDIF(BUILD_GUISAN_SDL_SHARED)
ADD_LIBRARY(${PROJECT_NAME}_sdl ${GUISAN_SDL_LIBRARY_TYPE}
${GUISAN_SDL_HEADER}
${GUISAN_SDL_HEADERS}
${GUISAN_SDL_CONTRIB_HEADERS}
${GUISAN_SDL_SRC})
if(TARGET SDL2::SDL2main)
MESSAGE(STATUS "SDL2main used")
# It has an implicit dependency on SDL2 functions, so it MUST be added before SDL2::SDL2 (or SDL2::SDL2-static)
target_link_libraries(${PROJECT_NAME}_sdl PRIVATE SDL2::SDL2main)
endif()
IF(MINGW)
MESSAGE(STATUS "MINGW32_LIBRARY: ${MINGW32_LIBRARY}")
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_sdl ${MINGW32_LIBRARY})
ENDIF(MINGW)
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_sdl PRIVATE SDL2::SDL2 SDL2_image::SDL2_image SDL2_ttf::SDL2_ttf ${PROJECT_NAME})

SET_TARGET_PROPERTIES(${PROJECT_NAME}_sdl PROPERTIES
VERSION ${${PROJECT_NAME}_VERSION}
SOVERSION ${${PROJECT_NAME}_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 # Allow creating static and shared libraries without conflict
OUTPUT_NAME ${PROJECT_NAME}_sdl) # Avoid conflicts between library and binary target names
INSTALL(TARGETS ${PROJECT_NAME}_sdl DESTINATION lib PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
INSTALL(FILES ${GUISAN_SDL_HEADER} DESTINATION include/guisan/)
INSTALL(FILES ${GUISAN_SDL_HEADERS} DESTINATION include/guisan/sdl/)
INSTALL(FILES ${GUISAN_SDL_CONTRIB_HEADERS} DESTINATION include/guisan/contrib/sdl/)
ENDIF(ENABLE_SDL)

# Make uninstall target
#CONFIGURE_FILE(
# "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
# "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
# IMMEDIATE @ONLY)
#ADD_CUSTOM_TARGET(uninstall
# "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")

MESSAGE(STATUS "Guisan has been built, hooray!")
# MESSAGE( STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}" )
# MESSAGE( STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}" )
# MESSAGE( STATUS "CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}" )
# MESSAGE( STATUS "${PROJECT_NAME}_DEPENDS = \"${${PROJECT_NAME}_DEPENDS}\"" )
# MESSAGE( STATUS "BUILD_WITH = \"${BUILD_WITH}\"" )
# MESSAGE( STATUS "INSTALL_DOC = ${INSTALL_DOC}" )
# MESSAGE( STATUS "Change a value with: cmake -D<Variable>=<Value>" )
# MESSAGE( STATUS "-------------------------------------------------------------------------------" )
# MESSAGE( STATUS )

# # force some variables that could be defined in the command line to be written to cache
#SET(BUILD_SHARED_LIBS "${BUILD_SHARED_LIBS}" CACHE BOOL "Set to OFF to build static libraries" FORCE)
# SET( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH
# "Where to install ${PROJECT_NAME}" FORCE )
# SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
# "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
# SET( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE PATH
# "Path to custom CMake Modules" FORCE )
# SET( INSTALL_DOC "${INSTALL_DOC}" CACHE BOOL
# "Set to OFF to skip build/install Documentation" FORCE )
# # export build settings
# INCLUDE( CMakeExportBuildSettings )
# CMAKE_EXPORT_BUILD_SETTINGS( "${PROJECT_NAME}BuildSettings.cmake" )
# # export library dependencies (keep this as the last line in the file)
# EXPORT_LIBRARY_DEPENDENCIES( "${PROJECT_NAME}LibDeps.cmake" )
7 changes: 4 additions & 3 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ Version 1.1.0
* Widget::hasModalFocus has been renamed to Widget::isModalFocused.
* Widget::hasModalMouseInputFocus has been renamed to Widget::isModalMouseInputFocused.
* Widget::generateAction has been renamed to Widget::distributeActionEvent.
* DELETE is now undefined in Key.hpp if present. It should hopefully
take care of some problems with windows.h defining delete which
sometimes breaks Key.hpp.
* All enum constants have been renamed to avoid clashes with defines
present in other libraries (read windows.h). Enum constants are now named
the same ways as classes are. For example, the Key constant LEFT_SHIFT is
now named LeftShift.

Version 1.0.0
=============
Expand Down
5 changes: 4 additions & 1 deletion Guisan.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@
<ClCompile Include="src\basiccontainer.cpp" />
<ClCompile Include="src\cliprectangle.cpp" />
<ClCompile Include="src\color.cpp" />
<ClCompile Include="src\containerevent.cpp" />
<ClCompile Include="src\defaultfont.cpp" />
<ClCompile Include="src\event.cpp" />
<ClCompile Include="src\exception.cpp" />
Expand Down Expand Up @@ -215,6 +216,8 @@
<ClInclude Include="include\guisan\basiccontainer.hpp" />
<ClInclude Include="include\guisan\cliprectangle.hpp" />
<ClInclude Include="include\guisan\color.hpp" />
<ClInclude Include="include\guisan\containerevent.hpp" />
<ClInclude Include="include\guisan\containerlistener.hpp" />
<ClInclude Include="include\guisan\deathlistener.hpp" />
<ClInclude Include="include\guisan\defaultfont.hpp" />
<ClInclude Include="include\guisan\event.hpp" />
Expand Down Expand Up @@ -284,4 +287,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
2 changes: 2 additions & 0 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ common_headers = [
'include/guisan/basiccontainer.hpp',
'include/guisan/cliprectangle.hpp',
'include/guisan/color.hpp',
'include/guisan/containerevent.hpp',
'include/guisan/containerlistener.hpp',
'include/guisan/deathlistener.hpp',
'include/guisan/defaultfont.hpp',
'include/guisan/event.hpp',
Expand Down
2 changes: 1 addition & 1 deletion TODO
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
* Continue rebasing from 24a11fbf50826a76862ff5667d371981628a0cbc
* Continue rebasing from 6725f3b08248d94e3ac11ce530aec42e3029fc62
* Add a focus listener interface.
* Make focus apply synchronously.
* Graphics and input objects for DirectX.
Expand Down
Loading

0 comments on commit c74d1cb

Please sign in to comment.