add pinyin and huspell to sources; support qt5 and qt6

This commit is contained in:
Rick Vogel 2022-10-27 19:01:10 +02:00
parent 380ae19fc0
commit 9982d7321e
15 changed files with 155 additions and 104 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ qskinny.pro.user
*.log *.log
html html
tags tags
.vscode

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.16.3)
project(qskinny VERSION 999.99.9) # TODO get from git branch name or project(qskinny VERSION 999.99.9) # TODO get from git branch name or
@ -8,21 +8,63 @@ set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
# force include Qt's private headers if("${Qt5_DIR}" STREQUAL "" AND "${Qt6_DIR}" STREQUAL "")
set(Qt5Core_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) message(FATAL_ERROR "Neither Qt5_DIR nor Qt6_DIR defined!")
set(Qt5Gui_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) else()
set(Qt5OpenGL_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) # force include Qt's private headers
set(Qt5Quick_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) if(NOT "${Qt5_DIR}" STREQUAL "")
set(Qt5QuickWidgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) set(Qt5Core_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5Svg_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) set(Qt5Gui_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5WebEngine_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) set(Qt5OpenGL_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5WebEngineCore_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) set(Qt5Quick_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5Widgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE) set(Qt5QuickWidgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5Svg_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5WebEngine_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5WebEngineCore_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt5Widgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
elseif(NOT "${Qt6_DIR}" STREQUAL "")
#set(Qt6Core_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
#set(Qt6Gui_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt6OpenGL_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
#set(Qt6Quick_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
#set(Qt6QuickWidgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
#set(Qt6Svg_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt6WebEngine_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt6WebEngineCore_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
set(Qt6WebEngineQuick_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
#set(Qt6Widgets_FIND_COMPONENTS Private CACHE STRING "force include private headers" FORCE)
endif()
endif()
set(Qt5_DIR "C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5" CACHE PATH "") # TODO pass in externally if("${Qt5_DIR}" STREQUAL "" AND "${Qt6_DIR}" STREQUAL "")
find_package(Qt5 REQUIRED COMPONENTS Core Gui Opengl Quick Quickwidgets Svg Webengine WebengineCore Widgets) message(FATAL_ERROR "Neither Qt5_DIR nor Qt6_DIR defined!")
else()
if(NOT "${Qt5_DIR}" STREQUAL "")
find_package(Qt5 REQUIRED COMPONENTS Core Gui OpenGL Quick Quickwidgets Svg Webengine WebengineCore Widgets)
set(Qt Qt${Qt5_VERSION_MAJOR}) # TODO find better solution for Qt namespace
set(Qt_VERSION ${Qt5_VERSION})
set(Qt_VERSION_MAJOR ${Qt5_VERSION_MAJOR})
set(Qt_VERSION_MINOR ${Qt5_VERSION_MINOR})
set(Qt_VERSION_PATCH ${Qt5_VERSION_PATCH})
elseif(NOT "${Qt6_DIR}" STREQUAL "")
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Quick Quickwidgets Svg WebEngineCore WebEngineQuick Widgets)
set(Qt Qt${Qt6_VERSION_MAJOR}) # TODO find better solution for Qt namespace
set(Qt_VERSION ${Qt6_VERSION})
set(Qt_VERSION_MAJOR ${Qt6_VERSION_MAJOR})
set(Qt_VERSION_MINOR ${Qt6_VERSION_MINOR})
set(Qt_VERSION_PATCH ${Qt6_VERSION_PATCH})
endif()
endif()
if(TRUE)
message(STATUS "\${Qt} : ${Qt}")
message(STATUS "\${Qt_VERSION_MAJOR}: ${Qt_VERSION_MAJOR}")
message(STATUS "\${Qt_VERSION_MINOR}: ${Qt_VERSION_MINOR}")
message(STATUS "\${Qt_VERSION_PATCH}: ${Qt_VERSION_PATCH}")
endif()
# define install directories # define install directories
set(QSK_INSTALL_DOCS doc) set(QSK_INSTALL_DOCS doc)
set(QSK_INSTALL_HEADERS include) set(QSK_INSTALL_HEADERS include)
set(QSK_INSTALL_LIBS lib) set(QSK_INSTALL_LIBS lib)

View File

@ -84,4 +84,4 @@ target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
qskinny qskinny
qsktestsupport qsktestsupport
Qt5::Svg) ${Qt}::Svg)

View File

@ -50,6 +50,8 @@ set(OBJECTS_DIR obj)
set(RCC_DIR rcc) set(RCC_DIR rcc)
option(BUILD_QSKDLL "build qskinny as shared library" ON) option(BUILD_QSKDLL "build qskinny as shared library" ON)
option(ENABLE_PINYIN "enable romanization system for standard mandarin chinese" ON)
option(ENABLE_HUNSPELL "enable spell checker" ON)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
set(LINUX TRUE) set(LINUX TRUE)

View File

@ -13,6 +13,30 @@ list(APPEND TARGET_SOURCES
list(APPEND TARGET_OTHER_FILES list(APPEND TARGET_OTHER_FILES
metadata.json) metadata.json)
if(ENABLE_PINYIN)
if(UNIX)
# TODO CONFIG += link_pkgconfig PKGCONFIG += pinyin
list(APPEND TARGET_HEADERS
QskPinyinTextPredictor.h)
list(APPEND TARGET_SOURCES
QskPinyinTextPredictor.cpp)
else()
message(WARNING "Feature 'pinyin' currently only available for UNIX!")
endif()
endif()
if(ENABLE_HUNSPELL)
if(UNIX)
# TODO CONFIG += link_pkgconfig PKGCONFIG += hunspell
list(APPEND TARGET_HEADERS
QskHunspellTextPredictor.h)
list(APPEND TARGET_SOURCES
QskHunspellTextPredictor.cpp)
else()
message(WARNING "Feature 'hunspell' currently only available for UNIX!")
endif()
endif()
add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_OTHER_FILES}) add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_OTHER_FILES})
if(BUILD_QSKDLL) if(BUILD_QSKDLL)
@ -24,33 +48,9 @@ endif()
target_link_libraries(${TARGET_NAME} target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
qskinny qskinny
Qt5::GuiPrivate) ${Qt}::GuiPrivate)
set_target_properties(${TARGET_NAME} PROPERTIES set_target_properties(${TARGET_NAME} PROPERTIES
AUTOMOC ON) AUTOMOC ON)
install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_PLUGINS}/platforminputcontexts) install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_PLUGINS}/platforminputcontexts)
# TODO
# pinyin {
# unix
# {
# CONFIG += link_pkgconfig PKGCONFIG += pinyin
#
# HEADERS += QskPinyinTextPredictor.h
#
# SOURCES += QskPinyinTextPredictor.cpp
# }
# }
#
# hunspell {
# unix
# {
# CONFIG += link_pkgconfig PKGCONFIG += hunspell
#
# HEADERS += QskHunspellTextPredictor.h
#
# SOURCES += QskHunspellTextPredictor.cpp
# }
#
# }

View File

@ -6,12 +6,12 @@ add_subdirectory(inputpanel)
add_subdirectory(images) add_subdirectory(images)
add_subdirectory(shadows) add_subdirectory(shadows)
# if(TARGET Qt5::WebEngine) # TODO check how to add optionally # if(TARGET ${Qt}::WebEngine) # TODO check how to add optionally
if(TRUE) if(TRUE)
add_subdirectory(webview) add_subdirectory(webview)
endif() endif()
# if(TARGET Qt5::QuickWidgets) # TODO check how to add optionally # if(TARGET ${Qt}::QuickWidgets) # TODO check how to add optionally
if(TRUE) if(TRUE)
add_subdirectory(grids) add_subdirectory(grids)
endif() endif()

View File

@ -35,7 +35,7 @@ target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
qskinny qskinny
qsktestsupport qsktestsupport
Qt5::QuickWidgets) ${Qt}::QuickWidgets)
set_target_properties(${TARGET_NAME} set_target_properties(${TARGET_NAME}
PROPERTIES PROPERTIES

View File

@ -10,9 +10,19 @@ add_executable(${TARGET_NAME}
target_link_libraries(${TARGET_NAME} target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
qskinny qskinny
qsktestsupport qsktestsupport)
Qt5::WebEngine
Qt5::WebEnginePrivate) if (Qt_VERSION_MAJOR VERSION_GREATER "5")
target_link_libraries(${TARGET_NAME}
PRIVATE
${Qt}::WebEngineQuick
${Qt}::WebEngineQuickPrivate)
else()
target_link_libraries(${TARGET_NAME}
PRIVATE
${Qt}::WebEngine
${Qt}::WebEnginePrivate)
endif()
set_target_properties(${TARGET_NAME} set_target_properties(${TARGET_NAME}
PROPERTIES PROPERTIES

View File

@ -37,7 +37,10 @@ int main( int argc, char* argv[] )
QskObjectCounter counter( true ); QskObjectCounter counter( true );
#endif #endif
#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
// namespace QtWebEngine doesn't exist in Qt6: https://doc.qt.io/qt-5/qtwebengine.html
QtWebEngine::initialize(); QtWebEngine::initialize();
#endif
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app( argc, argv ); QGuiApplication app( argc, argv );

View File

@ -1,4 +1,4 @@
if(TARGET Qt5::Svg) if(TARGET ${Qt}::Svg)
## @param SVG_FILENAME absolute filename to the svg ## @param SVG_FILENAME absolute filename to the svg
## @param QVG_FILENAME absolute filename to the qvg ## @param QVG_FILENAME absolute filename to the qvg
function(svg2qvg SVG_FILENAME QVG_FILENAME) function(svg2qvg SVG_FILENAME QVG_FILENAME)
@ -8,7 +8,7 @@ if(TARGET Qt5::Svg)
COMMAND svg2qvg ${SVG_FILENAME} ${QVG_FILENAME} COMMAND svg2qvg ${SVG_FILENAME} ${QVG_FILENAME}
OUTPUT ${QVG_FILENAME} OUTPUT ${QVG_FILENAME}
DEPENDS ${SVG_FILENAME} DEPENDS ${SVG_FILENAME}
WORKING_DIRECTORY $<TARGET_FILE_DIR:Qt5::Svg> WORKING_DIRECTORY $<TARGET_FILE_DIR:${Qt}::Svg>
COMMENT "Compiling ${SVG_FILENAME} to ${QVG_FILENAME}") COMMENT "Compiling ${SVG_FILENAME} to ${QVG_FILENAME}")
endfunction() endfunction()
endif() endif()

View File

@ -1,14 +1,6 @@
include(${CMAKE_SOURCE_DIR}/features/qskconfig.cmake) include(${CMAKE_SOURCE_DIR}/features/qskconfig.cmake)
include(${CMAKE_SOURCE_DIR}/scripts/cmake/qskinny-macros.cmake) include(${CMAKE_SOURCE_DIR}/scripts/cmake/qskinny-macros.cmake)
#TODO
#QSK_SUBDIRS = common graphic nodes controls layouts dialogs inputpanel
#INCLUDEPATH *= $${QSK_SUBDIRS}
#DEPENDPATH *= $${QSK_SUBDIRS}
#CONFIG += pinyin
#CONFIG += hunspell
list(APPEND TARGET_HEADERS list(APPEND TARGET_HEADERS
common/QskArcMetrics.h common/QskArcMetrics.h
common/QskAspect.h common/QskAspect.h
@ -65,7 +57,7 @@ list(APPEND TARGET_SOURCES
common/QskTextColors.cpp common/QskTextColors.cpp
common/QskTextOptions.cpp) common/QskTextOptions.cpp)
list(APPEND TARGET_HEADERS #TODO why separate list(APPEND TARGET_HEADERS
graphic/QskColorFilter.h graphic/QskColorFilter.h
graphic/QskGraphic.h graphic/QskGraphic.h
graphic/QskGraphicImageProvider.h graphic/QskGraphicImageProvider.h
@ -370,41 +362,31 @@ list(APPEND TARGET_SOURCES
inputpanel/QskInputPredictionBar.cpp inputpanel/QskInputPredictionBar.cpp
inputpanel/QskVirtualKeyboard.cpp) inputpanel/QskVirtualKeyboard.cpp)
#TODO if(ENABLE_PINYIN)
#pinyin { if(UNIX)
# target_compile_definitions(${TARGET_NAME} PRIVATE PINYIN) # TODO required?
#unix { # TODO CONFIG += link_pkgconfig PKGCONFIG += pinyin
# list(APPEND TARGET_HEADERS
#target_compile_definitions(${TARGET_NAME} PRIVATE PINYIN) inputpanel/QskPinyinTextPredictor.h)
#
#CONFIG += link_pkgconfig
#PKGCONFIG += pinyin
#
#HEADERS +=
#inputpanel/QskPinyinTextPredictor.h
#
#SOURCES +=
#inputpanel/QskPinyinTextPredictor.cpp
#}
#}
#TODO list(APPEND TARGET_SOURCES
#hunspell { inputpanel/QskPinyinTextPredictor.cpp)
# else()
#unix { message(WARNING "Feature 'pinyin' currently only available for UNIX!")
# endif()
#target_compile_definitions(${TARGET_NAME} PRIVATE HUNSPELL) endif()
#
#CONFIG += link_pkgconfig if(ENABLE_HUNSPELL)
#PKGCONFIG += hunspell if(UNIX)
# # TODO CONFIG += link_pkgconfig PKGCONFIG += hunspell
#HEADERS += list(APPEND TARGET_HEADERS
#inputpanel/QskHunspellTextPredictor.h inputpanel/QskHunspellTextPredictor.h)
# list(APPEND TARGET_SOURCES
#SOURCES += inputpanel/QskHunspellTextPredictor.cpp)
#inputpanel/QskHunspellTextPredictor.cpp else()
#} message(WARNING "Feature 'hunspell' currently only available for UNIX!")
#} endif()
endif()
set(TARGET_NAME qskinny) set(TARGET_NAME qskinny)
@ -414,10 +396,6 @@ else()
add_library(${TARGET_NAME} STATIC ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES}) add_library(${TARGET_NAME} STATIC ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
endif() endif()
if (Qt5_VERSION_MAJOR VERSION_GREATER "5")
target_link_libraries(${TARGET_NAME} PRIVATE Qt5::Opengl)
endif()
if(BUILD_QSKDLL) if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME} target_compile_definitions(${TARGET_NAME}
PUBLIC PUBLIC
@ -438,10 +416,17 @@ target_include_directories(${TARGET_NAME}
target_link_libraries(${TARGET_NAME} target_link_libraries(${TARGET_NAME}
PUBLIC PUBLIC
Qt5::Core ${Qt}::Core
Qt5::CorePrivate ${Qt}::CorePrivate
Qt5::Quick ${Qt}::Quick
Qt5::QuickPrivate) ${Qt}::QuickPrivate)
if (Qt_VERSION_MAJOR VERSION_GREATER "5")
target_link_libraries(${TARGET_NAME}
PUBLIC
${Qt}::OpenGL
${Qt}::OpenGLPrivate)
endif()
set_target_properties(${TARGET_NAME} set_target_properties(${TARGET_NAME}
PROPERTIES PROPERTIES

View File

@ -11,7 +11,11 @@
namespace Qsk namespace Qsk
{ {
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
Q_NAMESPACE_EXPORT(QSK_EXPORT)
#else
QSK_EXPORT Q_NAMESPACE QSK_EXPORT Q_NAMESPACE
#endif
enum Direction enum Direction
{ {

View File

@ -13,7 +13,11 @@ class QskGraphic;
namespace QskStandardSymbol namespace QskStandardSymbol
{ {
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
Q_NAMESPACE_EXPORT(QSK_EXPORT)
#else
QSK_EXPORT Q_NAMESPACE QSK_EXPORT Q_NAMESPACE
#endif
enum Type enum Type
{ {

View File

@ -1,3 +1,3 @@
if(TARGET Qt5::Svg) if(TARGET ${Qt}::Svg)
add_subdirectory(svg2qvg) add_subdirectory(svg2qvg)
endif() endif()

View File

@ -26,14 +26,14 @@ if(BUILD_SVG2QVG_STANDALONE)
target_link_libraries(${TARGET_NAME} target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
Qt5::Gui ${Qt}::Gui
Qt5::GuiPrivate ${Qt}::GuiPrivate
Qt5::Svg) ${Qt}::Svg)
else() else()
target_link_libraries(${TARGET_NAME} target_link_libraries(${TARGET_NAME}
PRIVATE PRIVATE
qskinny qskinny
Qt5::Svg) ${Qt}::Svg)
endif() endif()
install(TARGETS ${TARGET_NAME} DESTINATION ${TARGET_INSTALL_SUFFIX}) install(TARGETS ${TARGET_NAME} DESTINATION ${TARGET_INSTALL_SUFFIX})