Merge branch 'cmake' of https://github.com/vrcomputing/qskinny into cmake

This commit is contained in:
Uwe Rathmann 2023-03-08 09:25:06 +01:00
commit 502cc5e9b1
51 changed files with 2390 additions and 5 deletions

View File

@ -91,10 +91,12 @@ PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
RawStringFormats:
- Delimiter: pb
Language: TextProto
BasedOnStyle: google
RawStringFormats:
- Language: TextProto
Delimiters:
- 'pb'
- 'proto'
BasedOnStyle: google
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
@ -112,5 +114,6 @@ SpacesInSquareBrackets: true
Standard: Cpp11
TabWidth: 4
UseTab: Never
UseCRLF: Always
...

459
.github/workflows/cmake.yml vendored Normal file
View File

@ -0,0 +1,459 @@
name: CMake Build Matrix
# Directories
# - $GITHUB_WORKSPACE/qskinny_source : Checkout directory for qskinny sources
# - $GITHUB_WORKSPACE/qskinny_build : Build directory for QSkinny CMake
# - $GITHUB_WORKSPACE/qskinny_install : Install directory for QSkinny package
# - $GITHUB_WORKSPACE/qskinny_build_test : Build directory for QSkinny CMake integration test
on:
push:
branches: [cmake]
pull_request:
branches: [master]
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "Windows Latest MSVC Qt5",
os: windows-latest,
artifact: "windows_msvc.7z",
build_type: "Release",
cc: "cl",
cxx: "cl",
environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
archiver: "7z a",
generators: "Visual Studio 17 2022",
cmake:
{
qtversion: "5.15.2",
qtdirkey: "Qt5_DIR",
qtdirvalue: "../Qt/5.15.2/msvc2019_64/lib/cmake/Qt5",
qtprefixpath: "../Qt/5.15.2/msvc2019_64",
},
screenshot_filename: "windows-latest-msvc-qt-5-15-2.jpg",
}
- {
name: "Windows Latest MSVC Qt6",
os: windows-latest,
artifact: "windows_msvc.7z",
build_type: "Release",
cc: "cl",
cxx: "cl",
environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
archiver: "7z a",
generators: "Visual Studio 17 2022",
cmake:
{
qtversion: "6.2.4",
qtdirkey: "Qt6_DIR",
qtdirvalue: "../Qt/6.2.4/msvc2019_64/lib/cmake/Qt6",
qtprefixpath: "../Qt/6.2.4/msvc2019_64",
},
screenshot_filename: "windows-latest-msvc-qt-6-2-4.jpg",
}
- {
name: "Windows 2019 MSVC Qt5",
os: windows-2019,
artifact: "windows_msvc.7z",
build_type: "Release",
cc: "cl",
cxx: "cl",
environment_script: "C:/Program Files/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
archiver: "7z a",
generators: "Visual Studio 16 2019",
cmake:
{
qtversion: "5.15.2",
qtdirkey: "Qt5_DIR",
qtdirvalue: "../Qt/5.15.2/msvc2019_64/lib/cmake/Qt5",
qtprefixpath: "../Qt/5.15.2/msvc2019_64",
},
screenshot_filename: "windows-2019-msvc-qt-5-15-2.jpg",
}
- {
name: "Windows 2019 MSVC Qt6",
os: windows-2019,
artifact: "windows_msvc.7z",
build_type: "Release",
cc: "cl",
cxx: "cl",
environment_script: "C:/Program Files/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
archiver: "7z a",
generators: "Visual Studio 16 2019",
cmake:
{
qtversion: "6.2.4",
qtdirkey: "Qt6_DIR",
qtdirvalue: "../Qt/6.2.4/msvc2019_64/lib/cmake/Qt6",
qtprefixpath: "../Qt/6.2.4/msvc2019_64",
},
screenshot_filename: "windows-2019-msvc-qt-6-2-4.jpg",
}
- {
name: "Ubuntu Latest GCC Qt5",
os: ubuntu-latest,
artifact: "ubuntu_gcc.7z",
build_type: "Release",
cc: "gcc",
cxx: "g++",
archiver: "7z a",
generators: "Ninja",
env: { DISPLAY: ":1" },
cmake:
{
qtversion: "5.15.2",
qtdirkey: "Qt5_DIR",
qtdirvalue: "../Qt/5.15.2/gcc_64/lib/cmake/Qt5",
qtprefixpath: "../Qt/5.15.2/gcc_64",
},
screenshot_filename: "ubuntu-latest-gcc-qt-5-15-2.jpg",
}
- {
name: "Ubuntu Latest GCC Qt6",
os: ubuntu-latest,
artifact: "ubuntu_gcc.7z",
build_type: "Release",
cc: "gcc",
cxx: "g++",
archiver: "7z a",
generators: "Ninja",
env: { DISPLAY: ":1" },
cmake:
{
qtversion: "6.2.4",
qtdirkey: "Qt6_DIR",
qtdirvalue: "../Qt/6.2.4/gcc_64/lib/cmake/Qt6",
qtprefixpath: "../Qt/6.2.4/gcc_64",
},
screenshot_filename: "ubuntu-latest-gcc-qt-6-2-4.jpg",
}
- {
name: "Ubuntu GCC 9 Qt5",
os: ubuntu-latest,
artifact: "ubuntu_gcc9.7z",
build_type: "Release",
cc: "gcc",
cxx: "g++",
archiver: "7z a",
generators: "Ninja",
env: { DISPLAY: ":1" },
cmake:
{
qtversion: "5.15.2",
qtdirkey: "Qt5_DIR",
qtdirvalue: "../Qt/5.15.2/gcc_64/lib/cmake/Qt5",
qtprefixpath: "../Qt/5.15.2/gcc_64",
},
screenshot_filename: "ubuntu-latest-gcc-9-qt-5-15-2.jpg",
}
- {
name: "Ubuntu GCC 9 Qt6",
os: ubuntu-latest,
artifact: "ubuntu_gcc9.7z",
build_type: "Release",
cc: "gcc",
cxx: "g++",
archiver: "7z a",
generators: "Ninja",
env: { DISPLAY: ":1" },
cmake:
{
qtversion: "6.2.4",
qtdirkey: "Qt6_DIR",
qtdirvalue: "../Qt/6.2.4/gcc_64/lib/cmake/Qt6",
qtprefixpath: "../Qt/6.2.4/gcc_64",
},
screenshot_filename: "ubuntu-latest-gcc-9-qt-6-2-4.jpg",
}
- {
name: "macOS Latest Clang Qt5",
os: macos-latest,
artifact: "macos_clang.7z",
build_type: "Release",
cc: "clang",
cxx: "clang++",
archiver: "7za a",
generators: "Ninja",
cmake:
{
qtversion: "5.15.2",
qtdirkey: "Qt5_DIR",
qtdirvalue: "../Qt/5.15.2/clang_64/lib/cmake/Qt5",
qtprefixpath: "../Qt/5.15.2/clang_64",
},
screenshot_filename: "macos-latest-clang-qt-5-15-2.jpg",
}
- {
name: "macOS Latest Clang Qt6",
os: macos-latest,
artifact: "macos_clang.7z",
build_type: "Release",
cc: "clang",
cxx: "clang++",
archiver: "7za a",
generators: "Ninja",
cmake:
{
qtversion: "6.2.4",
qtdirkey: "Qt6_DIR",
qtdirvalue: "../Qt/6.2.4/clang_64/lib/cmake/Qt6",
qtprefixpath: "../Qt/6.2.4/clang_64",
},
screenshot_filename: "macos-latest-clang-qt-6-2-4.jpg",
}
steps:
- name: Git Checkout
uses: actions/checkout@v3
with:
path: qskinny_source
- name: Print env
run: |
echo github.event.action: ${{ github.event.action }}
echo github.event_name: ${{ github.event_name }}
- name: Install dependencies on windows
if: startsWith(matrix.config.os, 'windows')
run: |
choco install ninja
choco install cmake --version=3.16.3
ninja --version
cmake --version
- name: Install dependencies on ubuntu
if: startsWith(matrix.config.name, 'Ubuntu Latest GCC')
run: |
sudo apt-get update
sudo apt-get install ninja-build cmake
ninja --version
cmake --version
gcc --version
- name: Install dependencies on ubuntu9
if: startsWith(matrix.config.name, 'Ubuntu GCC 9')
run: |
echo Update gcc-9 =======================================================================
echo gcc version before
gcc --version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install ninja-build cmake gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
echo gcc version after
gcc --version
echo Update ninja =======================================================================
echo ninja version before
ninja --version
# wget https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-linux.zip
wget https://github.com/ninja-build/ninja/releases/latest/download/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
echo ninja version after
ninja --version
echo Update cmake =======================================================================
echo cmake version before
cmake --version
# curl --silent "https://api.github.com/repos/Kitware/CMake/releases/latest" | sed -n 's/.*tag_name":\s"\(.*\)".*/\1/p' | head -2
# wget https://github.com/Kitware/CMake/releases/latest/download/cmake-3.16.5-Linux-x86_64.sh
cmake_version=$(curl --silent "https://api.github.com/repos/Kitware/CMake/releases/latest" | sed -n 's/.*tag_name":\s"\(.*\)".*/\1/p' | head -2 | cut -c 2-)
echo cmake download latest v$cmake_version version
wget https://github.com/Kitware/CMake/releases/download/v$cmake_version/cmake-$cmake_version-Linux-x86_64.sh
chmod +x cmake-$cmake_version-Linux-x86_64.sh
sudo mkdir /opt/cmake
sudo ./cmake-$cmake_version-Linux-x86_64.sh --prefix=/opt/cmake --skip-license
sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake/bin/cmake 1 --force
echo cmake version after
cmake --version
- name: Install dependencies on macos
if: startsWith(matrix.config.os, 'macos')
run: |
brew install p7zip cmake ninja
ninja --version
cmake --version
- name: Install needed xkbcommon symlink
if: startsWith(matrix.config.name, 'Ubuntu') && endsWith(matrix.config.name, 'Qt6')
run: sudo apt-get install libxkbcommon-dev -y
- name: Install hunspell for Ubuntu
if: false && startsWith(matrix.config.name, 'Ubuntu')
run: |
sudo apt-get install -y libhunspell-dev
- name: Install pinyin for Ubuntu
if: false && startsWith(matrix.config.name, 'Ubuntu')
run: |
sudo apt-get install -y libimepinyin-dev
- name: Install imagemagick for Ubuntu
if: startsWith(matrix.config.name, 'Ubuntu')
run: |
sudo apt-get install -y imagemagick
- name: Cache Qt5
if: endsWith(matrix.config.name, 'Qt5')
id: cache-qt-5-15
uses: actions/cache@v1 # not v2!
with:
path: ../Qt/5.15.2
key: ${{ runner.os }}-QtCache-Qt5
- name: Cache Qt6
if: endsWith(matrix.config.name, 'Qt6')
id: cache-qt-6-2
uses: actions/cache@v1 # not v2!
with:
path: ../Qt/6.2.4
key: ${{ runner.os }}-QtCache-Qt6
- name: Install Qt5
if: endsWith(matrix.config.name, 'Qt5')
uses: jurplel/install-qt-action@v3
with:
version: "5.15.2"
target: "desktop"
install-deps: "true"
modules: "qtwebengine"
cached: ${{ steps.cache-qt-5-15.outputs.cache-hit }}
setup-python: "false"
tools: ""
set-env: "true"
tools-only: "false"
- name: Install Qt6
if: endsWith(matrix.config.name, 'Qt6')
uses: jurplel/install-qt-action@v3
with:
version: "6.2.4"
target: "desktop"
install-deps: "true"
modules: "qtwebengine"
cached: ${{ steps.cache-qt-6-2.outputs.cache-hit }}
setup-python: "false"
tools: ""
set-env: "true"
tools-only: "false"
- name: Configure ( QSkinny )
shell: bash
run: |
mkdir qskinny_build
mkdir qskinny_install
cmake \
-S qskinny_source \
-B qskinny_build \
-G "${{ matrix.config.generators }}" \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
-DCMAKE_INSTALL_PREFIX:PATH=qskinny_install \
-DCMAKE_PREFIX_PATH:PATH="${{ matrix.config.cmake.qtprefixpath }}" \
-D${{ matrix.config.cmake.qtdirkey }}:PATH="${{ matrix.config.cmake.qtdirvalue }}"
- name: Build ( QSkinny )
shell: bash
run: cmake --build qskinny_build --config ${{ matrix.config.build_type }}
#- name: Tests
# shell: bash
# run: ctest -j14 -C Release -T test --output-on-failure
- name: Install ( QSkinny ) Strip
shell: bash
run: cmake --install qskinny_build --prefix qskinny_install --strip --config ${{ matrix.config.build_type }}
- name: Smoke test ( QSkinny ) on MacOS
if: startsWith(matrix.config.name, 'macOS')
run: |
echo "starting iotdashboard"
DYLD_LIBRARY_PATH=./qskinny_install/lib:./qskinny_install/plugins/skins ./qskinny_build/examples/iotdashboard/iotdashboard.app/Contents/MacOS/iotdashboard -qwindowgeometry 1024x600+75+100 &
sleep 10
- name: Smoke Test ( QSkinny ) on Windows
if: startsWith(matrix.config.name, 'Windows')
run: |
$Env:PATH += ";qskinny_install/lib"
$Env:PATH += ";qskinny_install/plugins/skins"
echo "starting iotdashboard"
Start-Process qskinny_build\examples\iotdashboard\Release\iotdashboard.exe -ArgumentList "-qwindowgeometry 1024x600+0+0"
Start-Sleep -s 10
- name: Smoke test ( QSkinny ) on Ubuntu
if: startsWith(matrix.config.name, 'Ubuntu')
env:
DISPLAY: ":1"
run: |
echo starting Xvfb
Xvfb :1 &
sleep 10
echo starting iotdashboard
./qskinny_build/examples/iotdashboard/iotdashboard &
sleep 10
- uses: OrbitalOwen/desktop-screenshot-action@0.1
with:
file-name: ${{ matrix.config.screenshot_filename }}
- name: Smoke Test Cleanup ( QSkinny ) on Windows
if: startsWith(matrix.config.name, 'Windows')
run: |
taskkill /IM iotdashboard.exe /T
- name: Smoke Test Cleanup ( QSkinny ) on MacOS
if: startsWith(matrix.config.name, 'macOS')
run: |
killall iotdashboard
- name: Smoke Test Cleanup ( QSkinny ) on Ubuntu
if: startsWith(matrix.config.name, 'Ubuntu')
run: |
killall iotdashboard
killall Xvfb
- name: Configure ( CMake Integration Test )
shell: bash
run: |
mkdir qskinny_build_test
cmake \
-S qskinny_source/examples/iotdashboard_smoketest \
-B qskinny_build_test \
-G "${{ matrix.config.generators }}" \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
-DCMAKE_PREFIX_PATH:PATH="${{ matrix.config.cmake.qtprefixpath }}" \
-D${{ matrix.config.cmake.qtdirkey }}:PATH="${{ matrix.config.cmake.qtdirvalue }}" \
-DQSkinny_DIR:PATH=$GITHUB_WORKSPACE/qskinny_install/lib/cmake/QSkinny
- name: Build ( CMake Integration Test )
shell: bash
run: cmake --build qskinny_build_test --config ${{ matrix.config.build_type }}
# - name: Pack
# shell: bash
# working-directory: instdir
# run: |
# ls -laR
# ${{ matrix.config.archiver }} ../${{ matrix.config.artifact }} .
# - name: Upload
# uses: actions/upload-artifact@v1
# with:
# path: ./${{ matrix.config.artifact }}
# name: ${{ matrix.config.artifact }}
# - name: Upload release asset
# if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'created')
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ github.event.release.upload_url }}
# asset_path: ./${{ matrix.config.artifact }}
# asset_name: ${{ matrix.config.artifact }}.zip
# asset_content_type: application/zip

1
.gitignore vendored
View File

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

130
CMakeLists.txt Normal file
View File

@ -0,0 +1,130 @@
cmake_minimum_required(VERSION 3.16.3)
project(QSkinny VERSION 999.99.9)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include(${CMAKE_SOURCE_DIR}/features/qskconfig.cmake)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
if(QT_VERSION_MAJOR VERSION_EQUAL "5")
find_package(Qt5 5.15 REQUIRED COMPONENTS Core Gui OpenGL Quick Svg Widgets)
find_package(Qt5 5.15 OPTIONAL_COMPONENTS QuickWidgets WebEngine WebEngineCore)
message(WARNING "using QSkinny's 'qt_add_executable()'")
function(qt_add_executable)
add_executable(${ARGV})
endfunction(qt_add_executable)
message(WARNING "using QSkinny's 'qt_add_library()'")
function(qt_add_library)
add_library(${ARGV})
endfunction(qt_add_library)
elseif(QT_VERSION_MAJOR VERSION_EQUAL "6")
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Quick QuickWidgets Svg Widgets)
find_package(Qt6 OPTIONAL_COMPONENTS QuickWidgets WebEngineCore WebEngineQuick)
else()
message(FATAL_ERROR "Couldn't find any Qt version!")
endif()
# optional package hunspell
if(NOT LINUX AND ENABLE_HUNSPELL)
message(WARNING "Feature 'hunspell' only available for UNIX!")
unset(ENABLE_HUNSPELL CACHE)
endif()
# optional package pinyin
if(NOT LINUX AND ENABLE_PINYIN)
message(WARNING "Feature 'pinyin' only available for UNIX!")
unset(ENABLE_PINYIN CACHE)
endif()
if(ENABLE_HUNSPELL)
include(cmake/QSkinnyOptionalHunspell.cmake)
endif()
if(ENABLE_PINYIN)
include(cmake/QSkinnyOptionalPinyin.cmake)
endif()
# define install directories
set(QSK_INSTALL_DOCS doc)
set(QSK_INSTALL_HEADERS include)
set(QSK_INSTALL_LIBS lib)
set(QSK_INSTALL_BINS bin)
set(QSK_INSTALL_PLUGINS plugins)
set(QSK_INSTALL_EXAMPLES examples)
# define debug postfix globally
set(CMAKE_DEBUG_POSTFIX d)
# define binary install directory globally
set(CMAKE_INSTALL_BINDIR ${QSK_INSTALL_BINS}$<$<CONFIG:Debug>:/debug>)
add_subdirectory(src)
add_subdirectory(skins)
add_subdirectory(inputcontext)
add_subdirectory(qmlexport)
add_subdirectory(tools)
add_subdirectory(support)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
if(BUILD_PLAYGROUND)
add_subdirectory(playground)
endif()
#TODO add doxygen support
#OTHER_FILES =
#doc / Doxyfile
#doc/*.dox
# doc/*.metadox
# doc/classes/*.dox
# doc/classes/*.metadox
set(PACKAGE_NAME ${PROJECT_NAME})
set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
set(PACKAGE_NAMESPACE Qsk)
set(PACKAGE_LOCATION lib/cmake/${PROJECT_NAME})
install(TARGETS qskinny EXPORT ${PACKAGE_NAME}Targets
LIBRARY DESTINATION ${QSK_INSTALL_LIBS}
ARCHIVE DESTINATION ${QSK_INSTALL_LIBS}
RUNTIME DESTINATION ${QSK_INSTALL_LIBS}
INCLUDES DESTINATION ${QSK_INSTALL_HEADERS}
PUBLIC_HEADER DESTINATION ${QSK_INSTALL_HEADERS})
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}ConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
export(EXPORT ${PACKAGE_NAME}Targets
FILE ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}Targets.cmake
NAMESPACE ${PACKAGE_NAMESPACE}::)
configure_file(cmake/${PACKAGE_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}Config.cmake
COPYONLY)
install(EXPORT ${PACKAGE_NAME}Targets
FILE
${PACKAGE_NAME}Targets.cmake
NAMESPACE
${PACKAGE_NAMESPACE}::
DESTINATION
${PACKAGE_LOCATION})
install(
FILES
cmake/${PACKAGE_NAME}Config.cmake
cmake/${PACKAGE_NAME}Macros.cmake
cmake/${PACKAGE_NAME}OptionalHunspell.cmake
cmake/${PACKAGE_NAME}OptionalPinyin.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}ConfigVersion.cmake
DESTINATION
${PACKAGE_LOCATION}
COMPONENT
Devel)

View File

@ -2,6 +2,8 @@
![](https://github.com/uwerat/qskinny/workflows/CI/badge.svg)
[![CMake Build Matrix](https://github.com/vrcomputing/qskinny/actions/workflows/cmake.yml/badge.svg)](https://github.com/vrcomputing/qskinny/actions/workflows/cmake.yml)
The (Q)Skinny library is a framework built on top of the Qt scene graph
and very few core classes from Qt/Quick. It offers a set of lightweight controls,
that can be used from C++ and/or QML.
@ -37,6 +39,10 @@ On debian bullseye these packages need to be installed: `build-essential
qt-qmake qtbase5-dev qtbase5-private-dev qtdeclarative5-dev
qtdeclarative5-private-dev libqt5svg5-dev`.
> Optional: When enabling the `hunspell` feature the following package needs to be installed: `libhunspell-dev`
> Optional: When enabling the `pinyin` feature the following package needs to be installed: `libimepinyin-dev`
If you want to know more about QSkinny - or even like to give it a specific
direction - please contact support@qskinny.org.

View File

@ -0,0 +1,2 @@
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTargets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyMacros.cmake")

14
cmake/QSkinnyMacros.cmake Normal file
View File

@ -0,0 +1,14 @@
if(TARGET ${Qt}::Svg)
## @param SVG_FILENAME absolute filename to the svg
## @param QVG_FILENAME absolute filename to the qvg
function(qsk_svg2qvg SVG_FILENAME QVG_FILENAME)
get_filename_component(QVG_FILENAME ${QVG_FILENAME} ABSOLUTE)
get_filename_component(SVG_FILENAME ${SVG_FILENAME} ABSOLUTE)
add_custom_command(
COMMAND svg2qvg ${SVG_FILENAME} ${QVG_FILENAME}
OUTPUT ${QVG_FILENAME}
DEPENDS ${SVG_FILENAME}
WORKING_DIRECTORY $<TARGET_FILE_DIR:${Qt}::Svg>
COMMENT "Compiling ${SVG_FILENAME} to ${QVG_FILENAME}")
endfunction()
endif()

View File

@ -0,0 +1,20 @@
find_package(PkgConfig)
pkg_check_modules(PKG_HUNSPELL QUIET hunspell)
find_path(HUNSPELL_INCLUDE_DIRS
NAMES hunspell.hxx
PATH_SUFFIXES hunspell
HINTS ${PKG_HUNSPELL_INCLUDE_DIRS})
find_library(HUNSPELL_LIBRARIES
NAMES ${PKG_HUNSPELL_LIBRARIES} hunspell hunspell-1.8 hunspell-1.7 hunspell-1.6 libhunspell
HINTS ${PKG_HUNSPELL_LIBRARY_DIRS})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(HUNSPELL
REQUIRED_VARS HUNSPELL_LIBRARIES HUNSPELL_INCLUDE_DIRS
VERSION_VAR PKG_HUNSPELL_VERSION)
mark_as_advanced(HUNSPELL_INCLUDE_DIRS HUNSPELL_LIBRARIES)
add_library(hunspell SHARED IMPORTED GLOBAL)
set_target_properties(hunspell PROPERTIES IMPORTED_LOCATION ${HUNSPELL_LIBRARIES})
target_include_directories(hunspell
INTERFACE
${HUNSPELL_INCLUDE_DIRS})

View File

@ -0,0 +1,23 @@
find_package(PkgConfig)
pkg_check_modules(PKG_PINYIN QUIET pinyin)
find_path(PINYIN_INCLUDE_DIRS
NAMES pinyinime.h
PATH_SUFFIXES pinyin LibIME LibIME/libime/pinyin
HINTS ${PKG_PINYIN_INCLUDE_DIRS})
find_library(PINYIN_LIBRARIES
NAMES ${PKG_PINYIN_LIBRARIES} IMEPinyin imepinyin ime libime libimepinyin
HINTS ${PKG_PINYIN_LIBRARY_DIRS})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PINYIN
REQUIRED_VARS PINYIN_LIBRARIES PINYIN_INCLUDE_DIRS
VERSION_VAR PKG_PINYIN_VERSION)
mark_as_advanced(PINYIN_INCLUDE_DIRS PINYIN_LIBRARIES)
add_library(pinyin SHARED IMPORTED GLOBAL)
set_target_properties(pinyin PROPERTIES IMPORTED_LOCATION ${PINYIN_LIBRARIES})
target_include_directories(pinyin
INTERFACE
${PINYIN_INCLUDE_DIRS})
find_package(LibIMEPinyin REQUIRED)
find_package(Fcitx5Utils REQUIRED)

18
examples/CMakeLists.txt Normal file
View File

@ -0,0 +1,18 @@
#c++
add_subdirectory(desktop)
add_subdirectory(gallery)
add_subdirectory(layouts)
add_subdirectory(listbox)
add_subdirectory(messagebox)
add_subdirectory(mycontrols)
add_subdirectory(qvgviewer)
add_subdirectory(thumbnails)
add_subdirectory(tabview)
add_subdirectory(iotdashboard)
#qml
add_subdirectory(boxes)
add_subdirectory(buttons)
add_subdirectory(frames)
add_subdirectory(glabels)
add_subdirectory(messageboxQml)

View File

@ -0,0 +1,20 @@
list(APPEND TARGET_HEADERS
Box.h)
list(APPEND TARGET_SOURCES
Box.cpp
main.cpp)
set(TARGET_NAME boxes)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,21 @@
list(APPEND TARGET_RESSOURCES
buttons.qrc)
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME buttons)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
qskqmlexport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)

View File

@ -0,0 +1,16 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME desktop)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,25 @@
list(APPEND TARGET_RESSOURCES
frames.qrc)
list(APPEND TARGET_HEADERS
Frame.h)
list(APPEND TARGET_SOURCES
Frame.cpp
main.cpp)
set(TARGET_NAME frames)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
qskqmlexport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)

View File

@ -0,0 +1,66 @@
list(APPEND TARGET_HEADERS
label/LabelPage.h)
list(APPEND TARGET_SOURCES
label/LabelPage.cpp)
list(APPEND TARGET_HEADERS
slider/SliderPage.h)
list(APPEND TARGET_SOURCES
slider/SliderPage.cpp)
list(APPEND TARGET_HEADERS
progressbar/ProgressBarPage.h)
list(APPEND TARGET_SOURCES
progressbar/ProgressBarPage.cpp)
list(APPEND TARGET_HEADERS
button/ButtonPage.h)
list(APPEND TARGET_SOURCES
button/ButtonPage.cpp)
list(APPEND TARGET_HEADERS
textinput/TextInputPage.h)
list(APPEND TARGET_SOURCES
textinput/TextInputPage.cpp)
list(APPEND TARGET_HEADERS
selector/SelectorPage.h)
list(APPEND TARGET_SOURCES
selector/SelectorPage.cpp)
list(APPEND TARGET_HEADERS
dialog/DialogPage.h)
list(APPEND TARGET_SOURCES
dialog/DialogPage.cpp)
list(APPEND TARGET_HEADERS
Page.h)
list(APPEND TARGET_SOURCES
Page.cpp
main.cpp)
set(TARGET_NAME gallery)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
target_include_directories(${TARGET_NAME}
PRIVATE
${CMAKE_CURRENT_LIST_DIR})

View File

@ -0,0 +1,21 @@
list(APPEND TARGET_RESSOURCES
glabels.qrc)
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME glabels)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
qskqmlexport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)

View File

@ -0,0 +1,101 @@
list(APPEND TARGET_SOURCES
Box.cpp
BoxWithButtons.cpp
CircularProgressBar.cpp
CircularProgressBarSkinlet.cpp
DashboardPage.cpp
Diagram.cpp
DiagramSkinlet.cpp
GraphicProvider.cpp
GridBox.cpp
LightDisplaySkinlet.cpp
LightDisplay.cpp
MainItem.cpp
MenuBar.cpp
MyDevices.cpp
PieChart.cpp
PieChartPainted.cpp
PieChartSkinlet.cpp
RoomsPage.cpp
RoundedIcon.cpp
Skin.cpp
TopBar.cpp
RoundButton.cpp
UsageBox.cpp
UsageDiagram.cpp
MainWindow.cpp
main.cpp)
list(APPEND TARGET_SOURCES
nodes/DiagramDataNode.cpp
nodes/DiagramSegmentsNode.cpp
nodes/RadialTickmarksNode.cpp)
list(APPEND TARGET_HEADERS
Box.h
BoxWithButtons.h
CircularProgressBar.h
CircularProgressBarSkinlet.h
Diagram.h
DiagramSkinlet.h
GraphicProvider.h
GridBox.h
LightDisplaySkinlet.h
LightDisplay.h
DashboardPage.h
MainItem.h
MainWindow.h
MenuBar.h
MyDevices.h
PieChart.h
PieChartPainted.h
PieChartSkinlet.h
RoomsPage.h
RoundedIcon.h
Skin.h
TopBar.h
RoundButton.h
UsageBox.h
UsageDiagram.h)
list(APPEND TARGET_HEADERS
nodes/DiagramDataNode.h
nodes/DiagramSegmentsNode.h
nodes/RadialTickmarksNode.h)
list(APPEND TARGET_RESSOURCES
images.qrc
fonts.qrc)
set(TARGET_NAME iotdashboard)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS}
${TARGET_RESSOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
if(TARGET Qsk::qskinny)
# integration test
# - qsktestsupport doesn't exists
# - qskinny has a namespace Qsk
target_link_libraries(${TARGET_NAME}
PRIVATE
Qsk::qskinny
Qt::Svg)
else()
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
Qt::Svg)
target_compile_definitions(${TARGET_NAME}
PRIVATE
USE_SHORTCUTS)
endif()

View File

@ -7,7 +7,9 @@
#include "GraphicProvider.h"
#include "Skin.h"
#ifdef USE_SHORTCUTS
#include <SkinnyShortcut.h>
#endif
#include <QskSetup.h>
#include <QskShortcutMap.h>
@ -75,9 +77,11 @@ int main( int argc, char* argv[] )
qskSetup->setSkin( "DaytimeSkin" );
#ifdef USE_SHORTCUTS
// With CTRL-B you can rotate a couple of visual debug modes
SkinnyShortcut::enable( SkinnyShortcut::RotateSkin | SkinnyShortcut::DebugBackground |
SkinnyShortcut::DebugStatistics | SkinnyShortcut::Quit );
#endif
MainWindow window;
window.show();

View File

@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.18)
project(iotdashboard_smoketest)
find_package(QSkinny REQUIRED)
find_package(Qt6 COMPONENTS Core QUIET)
if (NOT Qt6_FOUND)
find_package(Qt5 5.15 REQUIRED COMPONENTS Core Gui OpenGL Quick Svg Widgets)
find_package(Qt5 5.15 OPTIONAL_COMPONENTS QuickWidgets WebEngine WebEngineCore)
message(WARNING "using QSkinny's 'qt_add_executable()'")
function(qt_add_executable)
add_executable(${ARGV})
endfunction(qt_add_executable)
message(WARNING "using QSkinny's 'qt_add_library()'")
function(qt_add_library)
add_library(${ARGV})
endfunction(qt_add_library)
else()
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Quick QuickWidgets Svg Widgets)
find_package(Qt6 OPTIONAL_COMPONENTS QuickWidgets WebEngineCore WebEngineQuick)
endif()
add_subdirectory(../iotdashboard ${CMAKE_CURRENT_BINARY_DIR}/../iotdashboard)

View File

@ -0,0 +1,37 @@
list(APPEND TARGET_RESSOURCES
layouts.qrc)
list(APPEND TARGET_HEADERS
TestRectangle.h
ButtonBox.h
FlowLayoutPage.h
GridLayoutPage.h
LinearLayoutPage.h
DynamicConstraintsPage.h
StackLayoutPage.h)
list(APPEND TARGET_SOURCES
TestRectangle.cpp
ButtonBox.cpp
FlowLayoutPage.cpp
GridLayoutPage.cpp
LinearLayoutPage.cpp
DynamicConstraintsPage.cpp
StackLayoutPage.cpp
main.cpp)
set(TARGET_NAME layouts)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qskqmlexport
qsktestsupport)

View File

@ -0,0 +1,17 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME listbox)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,17 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME messagebox)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,21 @@
list(APPEND TARGET_RESSOURCES
messagebox.qrc)
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME messageboxQml)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
qskqmlexport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)

View File

@ -0,0 +1,25 @@
list(APPEND TARGET_SOURCES
MySkin.cpp
MyToggleButton.cpp
MyToggleButtonSkinlet.cpp
main.cpp)
list(APPEND TARGET_HEADERS
MyToggleButton.h
MyToggleButtonSkinlet.h
MySkin.h)
set(TARGET_NAME mycontrols)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,60 @@
list(APPEND TARGET_HEADERS
MainWindow.h)
list(APPEND TARGET_SOURCES
MainWindow.cpp
main.cpp)
list(APPEND TARGET_RESSOURCES
qvgviewer.qrc)
list(APPEND TARGET_SVGS
svg/01.01.10.svg
svg/01.03.04q.svg
svg/01.08.05q.svg
svg/01.25.18.svg)
list(APPEND TARGET_QVGS
qvg/01.01.10.qvg
qvg/01.03.04q.qvg
qvg/01.08.05q.qvg
qvg/01.25.18.qvg)
set(TARGET_NAME qvgviewer)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS}
${TARGET_RESSOURCES}
${TARGET_SVGS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
if(ENABLE_AUTOQVG)
qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.01.10.svg
${CMAKE_CURRENT_LIST_DIR}/qvg/01.01.10.qvg)
qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.03.04q.svg
${CMAKE_CURRENT_LIST_DIR}/qvg/01.03.04q.qvg)
qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.08.05q.svg
${CMAKE_CURRENT_LIST_DIR}/qvg/01.08.05q.qvg)
qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.25.18.svg
${CMAKE_CURRENT_LIST_DIR}/qvg/01.25.18.qvg)
else()
# When cross compiling we need to have the svg2qvg tool being
# compiled for the build environment - not for the one of the target.
# So we better have precompiled qvg files in the repository to
# make the build process much easier
endif()
target_sources(${TARGET_NAME} PRIVATE ${TARGET_QVGS})
source_group("generated" FILES ${TARGET_QVGS})
source_group("svg" FILES ${TARGET_SVGS})

View File

@ -0,0 +1,24 @@
list(APPEND TARGET_HEADERS
CustomSlider.h
CustomSliderSkinlet.h
OtherSlider.h)
list(APPEND TARGET_SOURCES
CustomSlider.cpp
CustomSliderSkinlet.cpp
OtherSlider.cpp
main.cpp)
set(TARGET_NAME tabview)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

View File

@ -0,0 +1,16 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME thumbnails)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER examples)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)

173
features/qskconfig.cmake Normal file
View File

@ -0,0 +1,173 @@
############################################################################
# QSkinny - Copyright (C) 2016 Uwe Rathmann
# This file may be used under the terms of the QSkinny License, Version 1.0
############################################################################
set(QSK_VERSION ${CMAKE_PROJECT_VERSION})
# trying the PREFIX environment variable first
set(QSK_INSTALL_PREFIX $ENV{PREFIX}) # TODO still required?
if("${QSK_INSTALL_PREFIX}" STREQUAL "")
set(QSK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") # TODO where does QT_INSTALL_PREFIX come from?
if (UNIX)
set(QSK_INSTALL_PREFIX /usr/local/qskinny-${QSK_VERSION})
endif()
if (MSVC)
set(QSK_INSTALL_PREFIX C:/Qskinny-${QSK_VERSION})
endif()
endif()
# TODO find compiler flag equivalent
list(APPEND CONFIG no_private_qt_headers_warning)
list(APPEND CONFIG warn_on)
list(APPEND CONFIG no_keywords)
list(APPEND CONFIG silent)
#list(APPEND CONFIG -= depend_includepath) # TODO was -=
list(APPEND CONFIG strict_c++)
list(APPEND CONFIG c++11)
list(APPEND CONFIG pedantic)
list(APPEND CONFIG hide_symbols)
#list(APPEND CONFIG += debug)
#list(APPEND CONFIG += sanitize)
# TODO
# use_no_rpath {
# CONFIG -= use_local_rpath use_install_rpath
# } else {
# cross_compile {
# CONFIG *= use_install_rpath
# QMAKE_RPATHLINKDIR *= $${QSK_PLUGIN_DIR}/skins
# } else {
# !use_install_rpath: CONFIG *= use_local_rpath
# }
# }
option(BUILD_QSKDLL "Build qskinny as shared library" ON)
option(BUILD_EXAMPLES "Build qskinny examples" ON)
option(BUILD_PLAYGROUND "Build qskinny playground" ON)
option(BUILD_SVG2QVG_STANDALONE "If 'ON' application won't be linked against qskinny library" ON)
option(ENABLE_PINYIN "UNIX ONLY OPTION: Enable romanization system for standard mandarin chinese" OFF)
option(ENABLE_HUNSPELL "UNIX ONLY OPTION: Enable spell checker" OFF)
option(ENABLE_FONT_CONFIG "Enable font config for font caching" ON)
option(ENABLE_ENSURE_SKINS "Enabling fall back code, that inserts some skin factories manually when not finding skin factories as plugins" ON)
option(ENABLE_AUTOQVG "enable automatic qvg compilation" OFF)
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()
if(LINUX)
if ("pedantic" IN_LIST CONFIG)
add_compile_definitions(QT_STRICT_ITERATORS)
# Qt headers do not stand pedantic checks, so it's better
# to exclude them by declaring them as system includes
list(APPEND CONFIG qtassysteminclude)
endif()
if ("qtassysteminclude" IN_LIST CONFIG)
# As most distros set QT_INSTALL_HEADERS to /usr/include we
# would run into gcc compiler errors and better drop it
# from the list below. Should be no problem as we don't
# add the Qt module to our includes and therefore don't
# need this path.
# TODO find solution for all platforms
# QMAKE_CXXFLAGS += \
# -isystem $$[QT_INSTALL_HEADERS]/QtCore \
# -isystem $$[QT_INSTALL_HEADERS]/QtCore/$$[QT_VERSION]/QtCore \
# -isystem $$[QT_INSTALL_HEADERS]/QtGui \
# -isystem $$[QT_INSTALL_HEADERS]/QtGui/$$[QT_VERSION]/QtGui \
# -isystem $$[QT_INSTALL_HEADERS]/QtQuick \
# -isystem $$[QT_INSTALL_HEADERS]/QtQuick/$$[QT_VERSION]/QtQuick \
# -isystem $$[QT_INSTALL_HEADERS]/QtQml \
# -isystem $$[QT_INSTALL_HEADERS]/QtQml/$$[QT_VERSION]/QtQml \
endif()
endif()
if ("${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+" OR "${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+-64")
# --- optional optimzations
if (CMAKE_BUILD_TYPE EQUAL "Debug")
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -O0) # TODO check if still required
else()
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -O3 -ffast-math) # TODO check if still required
endif()
endif()
if ("pedantic" IN_LIST CONFIG)
if ("${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+" OR "${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+-64")
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pedantic-errors)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wextra)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Werror=format-security)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wsuggest-override)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wlogical-op)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wconversion)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wfloat-equal)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wshadow)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wsuggest-final-types)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wsuggest-final-methods)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fanalyzer)
endif()
if ("${CMAKE_CXX_COMPILER}" MATCHES ".*linux-clang")
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -pedantic-errors)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Weverything)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-c++98-compat-pedantic)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-global-constructors)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-exit-time-destructors)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-padded)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-float-equal)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-undefined-reinterpret-cast)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-deprecated)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-switch-enum)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-keyword-macro)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-old-style-cast)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-used-but-marked-unused)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-weak-vtables)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-shadow)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-double-promotion)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-conversion)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-documentation-unknown-command)
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-unused-macros)
endif()
endif()
if ("sanitize" IN_LIST CONFIG)
list(APPEND CONFIG sanitizer)
list(APPEND CONFIG sanitize_address)
# CONFIG *= sanitize_undefined
if ("${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+" OR "${CMAKE_CXX_COMPILER}" MATCHES ".*linux-g\\+\\+-64")
# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fsanitize-address-use-after-scope)
#QMAKE_LFLAGS *= -fsanitize-address-use-after-scope
endif()
endif()
if (CMAKE_BUILD_TYPE EQUAL "Debug")
add_compile_definitions(ITEM_STATISTICS=1)
endif()
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x000000
set(LOCAL_PRI $ENV{QSK_LOCAL_PRI})
if (${LOCAL_PRI}) # TODO not empty check
if(EXISTS ${LOCAL_PRI})
# When not working with the Qt/Creator it is often more convenient
# to include the specific options of your local build, than passing
# them all on the command line
include(${LOCAL_PRI})
endif()
endif()

View File

@ -0,0 +1,55 @@
set(TARGET_NAME qskinputcontext)
list(APPEND TARGET_HEADERS
QskInputContextGlobal.h)
list(APPEND TARGET_SOURCES
QskInputContextPlugin.cpp)
list(APPEND TARGET_OTHER_FILES
metadata.json)
if(ENABLE_PINYIN)
list(APPEND TARGET_HEADERS
${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.h)
list(APPEND TARGET_SOURCES
${CMAKE_SOURCE_DIR}/src/inputpanel/QskPinyinTextPredictor.cpp)
endif()
if(ENABLE_HUNSPELL)
list(APPEND TARGET_HEADERS
${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.h)
list(APPEND TARGET_SOURCES
${CMAKE_SOURCE_DIR}/src/inputpanel/QskHunspellTextPredictor.cpp)
endif()
qt_add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_OTHER_FILES})
if(ENABLE_PINYIN)
target_link_libraries(${TARGET_NAME}
PRIVATE
pinyin
Fcitx5::Utils)
endif()
if(ENABLE_HUNSPELL)
target_link_libraries(${TARGET_NAME}
PRIVATE
hunspell)
endif()
if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PRIVATE
QSK_INPUTCONTEXT_MAKEDLL)
endif()
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
Qt::GuiPrivate)
set_target_properties(${TARGET_NAME} PROPERTIES
AUTOMOC ON)
install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_PLUGINS}/platforminputcontexts)

23
playground/CMakeLists.txt Normal file
View File

@ -0,0 +1,23 @@
add_subdirectory(anchors)
add_subdirectory(dials)
add_subdirectory(dialogbuttons)
add_subdirectory(invoker)
add_subdirectory(inputpanel)
add_subdirectory(images)
add_subdirectory(shadows)
if (QT_VERSION_MAJOR VERSION_EQUAL "6")
if(TARGET Qt::WebEngineCore)
if(TARGET Qt::WebEngineQuick)
add_subdirectory(webview)
endif()
endif()
elseif(Qt_VERSION VERSION_EQUAL "5")
if(TARGET Qt::WebEngine)
add_subdirectory(webview)
endif()
endif()
if(TARGET Qt::QuickWidgets)
add_subdirectory(grids)
endif()

View File

@ -0,0 +1,36 @@
list(APPEND TARGET_HEADERS
kiwi/Constraint.h
kiwi/Expression.h
kiwi/Solver.h
kiwi/Strength.h
kiwi/Term.h
kiwi/Variable.h)
list(APPEND TARGET_SOURCES
kiwi/Expression.cpp
kiwi/Constraint.cpp
kiwi/Solver.cpp)
list(APPEND TARGET_HEADERS
AnchorBox.h)
list(APPEND TARGET_SOURCES
AnchorBox.cpp
main.cpp)
set(TARGET_NAME anchors)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS}
${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,20 @@
set(TARGET_NAME qskexample)
list(APPEND TARGET_HEADERS
Window.h)
list(APPEND TARGET_SOURCES
Window.cpp
main.cpp)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE ${TARGET_SOURCES} ${TARGET_HEADERS})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,32 @@
list(APPEND TARGET_HEADERS
SkinFactory.h
Dial.h
DialSkinlet.h
Dashboard.h)
list(APPEND TARGET_SOURCES
SkinFactory.cpp
Dial.cpp
DialSkinlet.cpp
Dashboard.cpp
main.cpp)
list(APPEND TARGET_RESSOURCES
images.qrc)
set(TARGET_NAME dials)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS}
${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,34 @@
list(APPEND TARGET_HEADERS
GridAccessor.h
GridSkinny.h
GridWidgets.h
GridGraphics.h
GridQuick.h
TestBox.h)
list(APPEND TARGET_SOURCES
GridAccessor.cpp
GridSkinny.cpp
GridWidgets.cpp
GridGraphics.cpp
GridQuick.cpp
TestBox.cpp
main.cpp)
set(TARGET_NAME grid)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport
Qt::QuickWidgets)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,27 @@
list(APPEND TARGET_RESSOURCES
images.qrc)
list(APPEND TARGET_HEADERS
Image.h)
list(APPEND TARGET_SOURCES
Image.cpp
main.cpp)
set(TARGET_NAME images)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS}
${TARGET_RESSOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qskqmlexport
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,17 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME inputpanel)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,24 @@
list(APPEND TARGET_HEADERS
Callback.h
Invoker.h)
list(APPEND TARGET_SOURCES
Callback.cpp
Invoker.cpp
main.cpp)
set(TARGET_NAME invoker)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES}
${TARGET_HEADERS})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTOMOC_MOC_OPTIONS -nw
FOLDER playground)

View File

@ -0,0 +1,22 @@
list(APPEND TARGET_HEADERS
ShadowedBox.h)
list(APPEND TARGET_SOURCES
ShadowedBox.cpp
main.cpp)
set(TARGET_NAME shadows)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_HEADERS}
${TARGET_SOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -0,0 +1,30 @@
list(APPEND TARGET_SOURCES
main.cpp)
set(TARGET_NAME webview)
qt_add_executable(${TARGET_NAME} WIN32 MACOSX_BUNDLE
${TARGET_SOURCES})
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
qsktestsupport)
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}
PROPERTIES
AUTOMOC ON
FOLDER playground)

View File

@ -37,7 +37,10 @@ int main( int argc, char* argv[] )
QskObjectCounter counter( true );
#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();
#endif
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app( argc, argv );

36
qmlexport/CMakeLists.txt Normal file
View File

@ -0,0 +1,36 @@
set(TARGET_NAME qskqmlexport)
list(APPEND TARGET_HEADERS
QskQmlGlobal.h
QskShortcutQml.h
QskLayoutQml.h
QskMainQml.h
QskQml.h)
list(APPEND TARGET_SOURCES
QskShortcutQml.cpp
QskLayoutQml.cpp
QskMainQml.cpp
QskQml.cpp)
qt_add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS})
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON)
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny)
target_include_directories(${TARGET_NAME}
PUBLIC
${CMAKE_CURRENT_LIST_DIR})
if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PRIVATE
QSK_QML_MAKEDLL)
endif()
install(TARGETS ${TARGET_NAME} DESTINATION qmlexport)

2
skins/CMakeLists.txt Normal file
View File

@ -0,0 +1,2 @@
add_subdirectory(squiek)
add_subdirectory(material3)

View File

@ -0,0 +1,35 @@
set(QSK_PLUGIN_SUBDIR skins)
set(TARGET_NAME material3skin)
list(APPEND TARGET_HEADERS
QskMaterial3Global.h
QskMaterial3Skin.h
QskMaterial3SkinFactory.h)
list(APPEND TARGET_SOURCES
QskMaterial3Skin.cpp
QskMaterial3SkinFactory.cpp)
list(APPEND TARGET_OTHER_FILES
metadata.json)
if(BUILD_QSKDLL)
qt_add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES})
else()
qt_add_library(${TARGET_NAME} STATIC ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES})
endif()
target_link_libraries(${TARGET_NAME} PRIVATE qskinny)
if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PRIVATE
QSK_MATERIAL3_MAKEDLL)
endif()
set_target_properties(${TARGET_NAME} PROPERTIES
AUTOMOC ON
FOLDER skins)
install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_PLUGINS}/${QSK_PLUGIN_SUBDIR})

View File

@ -12,9 +12,10 @@
class QSK_MATERIAL3_EXPORT QskMaterial3SkinFactory : public QskSkinFactory
{
Q_OBJECT
#if defined( QSK_MATERIAL3_MAKEDLL )
Q_PLUGIN_METADATA( IID QskSkinFactoryIID FILE "metadata.json" )
Q_INTERFACES( QskSkinFactory )
#endif
public:
QskMaterial3SkinFactory( QObject* parent = nullptr );

View File

@ -0,0 +1,37 @@
set(QSK_PLUGIN_SUBDIR skins)
set(TARGET_NAME squiekskin)
list(APPEND TARGET_HEADERS
QskSquiekGlobal.h
QskSquiekSkin.h
QskSquiekSkinFactory.h)
list(APPEND TARGET_SOURCES
QskSquiekSkin.cpp
QskSquiekSkinFactory.cpp)
list(APPEND TARGET_OTHER_FILES
metadata.json)
if(BUILD_QSKDLL)
qt_add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES})
else()
qt_add_library(${TARGET_NAME} STATIC ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES})
endif()
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny)
if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PRIVATE
QSK_SQUIEK_MAKEDLL)
endif()
set_target_properties(${TARGET_NAME} PROPERTIES
AUTOMOC ON
FOLDER skins)
install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_PLUGINS}/${QSK_PLUGIN_SUBDIR})

View File

@ -13,8 +13,10 @@ class QSK_SQUIEK_EXPORT QskSquiekSkinFactory : public QskSkinFactory
{
Q_OBJECT
#if defined( QSK_SQUIEK_MAKEDLL )
Q_PLUGIN_METADATA( IID QskSkinFactoryIID FILE "metadata.json" )
Q_INTERFACES( QskSkinFactory )
#endif
public:
QskSquiekSkinFactory( QObject* parent = nullptr );

456
src/CMakeLists.txt Normal file
View File

@ -0,0 +1,456 @@
include(${CMAKE_SOURCE_DIR}/cmake/QSkinnyMacros.cmake)
list(APPEND TARGET_HEADERS
common/QskArcMetrics.h
common/QskAspect.h
common/QskBoxBorderColors.h
common/QskBoxBorderMetrics.h
common/QskBoxShapeMetrics.h
common/QskBoxHints.h
common/QskFunctions.h
common/QskGlobal.h
common/QskGradient.h
common/QskGradientStop.h
common/QskHctColor.h
common/QskIntervalF.h
common/QskMargins.h
common/QskMetaFunction.h
common/QskMetaFunction.hpp
common/QskMetaInvokable.h
common/QskNamespace.h
common/QskObjectCounter.h
common/QskPlacementPolicy.h
common/QskPlatform.h
common/QskRgbValue.h
common/QskScaleEngine.h
common/QskScaleTickmarks.h
common/QskShadowMetrics.h
common/QskSizePolicy.h
common/QskStateCombination.h
common/QskTextColors.h
common/QskTextOptions.h)
list(APPEND TARGET_SOURCES
common/QskArcMetrics.cpp
common/QskAspect.cpp
common/QskBoxBorderColors.cpp
common/QskBoxBorderMetrics.cpp
common/QskBoxShapeMetrics.cpp
common/QskBoxHints.cpp
common/QskFunctions.cpp
common/QskGradient.cpp
common/QskGradientStop.cpp
common/QskHctColor.cpp
common/QskIntervalF.cpp
common/QskMargins.cpp
common/QskMetaFunction.cpp
common/QskMetaInvokable.cpp
common/QskObjectCounter.cpp
common/QskPlatform.cpp
common/QskPlacementPolicy.cpp
common/QskRgbValue.cpp
common/QskScaleEngine.cpp
common/QskScaleTickmarks.cpp
common/QskShadowMetrics.cpp
common/QskSizePolicy.cpp
common/QskTextColors.cpp
common/QskTextOptions.cpp)
list(APPEND TARGET_HEADERS
graphic/QskColorFilter.h
graphic/QskGraphic.h
graphic/QskGraphicImageProvider.h
graphic/QskGraphicIO.h
graphic/QskGraphicPaintEngine.h
graphic/QskGraphicProvider.h
graphic/QskGraphicProviderMap.h
graphic/QskGraphicTextureFactory.h
graphic/QskPainterCommand.h
graphic/QskStandardSymbol.h)
list(APPEND TARGET_SOURCES
graphic/QskColorFilter.cpp
graphic/QskGraphic.cpp
graphic/QskGraphicImageProvider.cpp
graphic/QskGraphicIO.cpp
graphic/QskGraphicPaintEngine.cpp
graphic/QskGraphicProvider.cpp
graphic/QskGraphicProviderMap.cpp
graphic/QskGraphicTextureFactory.cpp
graphic/QskPainterCommand.cpp
graphic/QskStandardSymbol.cpp)
list(APPEND TARGET_HEADERS
nodes/QskArcNode.h
nodes/QskArcRenderer.h
nodes/QskBoxNode.h
nodes/QskBoxClipNode.h
nodes/QskBoxRenderer.h
nodes/QskBoxRendererColorMap.h
nodes/QskBoxShadowNode.h
nodes/QskGraphicNode.h
nodes/QskPaintedNode.h
nodes/QskPlainTextRenderer.h
nodes/QskRichTextRenderer.h
nodes/QskScaleRenderer.h
nodes/QskSGNode.h
nodes/QskShadedBoxNode.h
nodes/QskTextNode.h
nodes/QskTextRenderer.h
nodes/QskTextureRenderer.h
nodes/QskTickmarksNode.h
nodes/QskVertex.h)
list(APPEND TARGET_SOURCES
nodes/QskArcNode.cpp
nodes/QskArcRenderer.cpp
nodes/QskBoxNode.cpp
nodes/QskBoxClipNode.cpp
nodes/QskBoxRendererRect.cpp
nodes/QskBoxRendererEllipse.cpp
nodes/QskBoxRendererDEllipse.cpp
nodes/QskBoxShadowNode.cpp
nodes/QskGraphicNode.cpp
nodes/QskPaintedNode.cpp
nodes/QskPlainTextRenderer.cpp
nodes/QskRichTextRenderer.cpp
nodes/QskScaleRenderer.cpp
nodes/QskSGNode.cpp
nodes/QskShadedBoxNode.cpp
nodes/QskTextNode.cpp
nodes/QskTextRenderer.cpp
nodes/QskTextureRenderer.cpp
nodes/QskTickmarksNode.cpp
nodes/QskVertex.cpp)
list(APPEND TARGET_RESSOURCES
nodes/shaders.qrc)
list(APPEND TARGET_HEADERS
controls/QskAbstractButton.h
controls/QskAnimationHint.h
controls/QskAnimator.h
controls/QskApplicationView.h
controls/QskBoundedControl.h
controls/QskBoundedInput.h
controls/QskBoundedRangeInput.h
controls/QskBoundedValueInput.h
controls/QskBox.h
controls/QskBoxSkinlet.h
controls/QskCheckBox.h
controls/QskCheckBoxSkinlet.h
controls/QskControl.h
controls/QskControlPrivate.h
controls/QskDirtyItemFilter.h
controls/QskEvent.h
controls/QskFlickAnimator.h
controls/QskFocusIndicator.h
controls/QskFocusIndicatorSkinlet.h
controls/QskGesture.h
controls/QskGestureRecognizer.h
controls/QskGraphicLabel.h
controls/QskGraphicLabelSkinlet.h
controls/QskHintAnimator.h
controls/QskInputGrabber.h
controls/QskListView.h
controls/QskListViewSkinlet.h
controls/QskMenu.h
controls/QskMenuSkinlet.h
controls/QskObjectTree.h
controls/QskPageIndicator.h
controls/QskPageIndicatorSkinlet.h
controls/QskPanGestureRecognizer.h
controls/QskPopup.h
controls/QskPopupSkinlet.h
controls/QskPushButton.h
controls/QskPushButtonSkinlet.h
controls/QskProgressBar.h
controls/QskProgressBarSkinlet.h
controls/QskQuick.h
controls/QskQuickItem.h
controls/QskQuickItemPrivate.h
controls/QskScrollArea.h
controls/QskScrollBox.h
controls/QskScrollView.h
controls/QskScrollViewSkinlet.h
controls/QskSegmentedBar.h
controls/QskSegmentedBarSkinlet.h
controls/QskSeparator.h
controls/QskSeparatorSkinlet.h
controls/QskSetup.h
controls/QskShortcutMap.h
controls/QskSimpleListBox.h
controls/QskSkin.h
controls/QskSkinFactory.h
controls/QskSkinHintTable.h
controls/QskSkinHintTableEditor.h
controls/QskSkinManager.h
controls/QskSkinStateChanger.h
controls/QskSkinTransition.h
controls/QskSkinlet.h
controls/QskSkinnable.h
controls/QskSlider.h
controls/QskSliderSkinlet.h
controls/QskStatusIndicator.h
controls/QskStatusIndicatorSkinlet.h
controls/QskSubWindowArea.h
controls/QskSubWindowAreaSkinlet.h
controls/QskSubWindow.h
controls/QskSubWindowSkinlet.h
controls/QskSwitchButton.h
controls/QskSwitchButtonSkinlet.h
controls/QskTabBar.h
controls/QskTabButton.h
controls/QskTabButtonSkinlet.h
controls/QskTabView.h
controls/QskTabViewSkinlet.h
controls/QskTextInput.h
controls/QskTextInputSkinlet.h
controls/QskTextLabel.h
controls/QskTextLabelSkinlet.h
controls/QskVariantAnimator.h
controls/QskWindow.h)
list(APPEND TARGET_SOURCES
controls/QskAbstractButton.cpp
controls/QskAnimator.cpp
controls/QskAnimationHint.cpp
controls/QskApplicationView.cpp
controls/QskBoundedControl.cpp
controls/QskBoundedInput.cpp
controls/QskBoundedRangeInput.cpp
controls/QskBoundedValueInput.cpp
controls/QskBox.cpp
controls/QskBoxSkinlet.cpp
controls/QskCheckBox.cpp
controls/QskCheckBoxSkinlet.cpp
controls/QskControl.cpp
controls/QskControlPrivate.cpp
controls/QskDirtyItemFilter.cpp
controls/QskEvent.cpp
controls/QskFlickAnimator.cpp
controls/QskFocusIndicator.cpp
controls/QskFocusIndicatorSkinlet.cpp
controls/QskGesture.cpp
controls/QskGestureRecognizer.cpp
controls/QskGraphicLabel.cpp
controls/QskGraphicLabelSkinlet.cpp
controls/QskHintAnimator.cpp
controls/QskInputGrabber.cpp
controls/QskListView.cpp
controls/QskListViewSkinlet.cpp
controls/QskMenuSkinlet.cpp
controls/QskMenu.cpp
controls/QskObjectTree.cpp
controls/QskPageIndicator.cpp
controls/QskPageIndicatorSkinlet.cpp
controls/QskPanGestureRecognizer.cpp
controls/QskPopup.cpp
controls/QskPopupSkinlet.cpp
controls/QskPushButton.cpp
controls/QskPushButtonSkinlet.cpp
controls/QskProgressBar.cpp
controls/QskProgressBarSkinlet.cpp
controls/QskQuick.cpp
controls/QskQuickItem.cpp
controls/QskQuickItemPrivate.cpp
controls/QskScrollArea.cpp
controls/QskScrollBox.cpp
controls/QskScrollView.cpp
controls/QskScrollViewSkinlet.cpp
controls/QskSegmentedBar.cpp
controls/QskSegmentedBarSkinlet.cpp
controls/QskSeparator.cpp
controls/QskSeparatorSkinlet.cpp
controls/QskSetup.cpp
controls/QskShortcutMap.cpp
controls/QskSimpleListBox.cpp
controls/QskSkin.cpp
controls/QskSkinHintTable.cpp
controls/QskSkinHintTableEditor.cpp
controls/QskSkinFactory.cpp
controls/QskSkinManager.cpp
controls/QskSkinTransition.cpp
controls/QskSkinlet.cpp
controls/QskSkinnable.cpp
controls/QskSlider.cpp
controls/QskSliderSkinlet.cpp
controls/QskStatusIndicator.cpp
controls/QskStatusIndicatorSkinlet.cpp
controls/QskSubWindowArea.cpp
controls/QskSubWindowAreaSkinlet.cpp
controls/QskSubWindow.cpp
controls/QskSubWindowSkinlet.cpp
controls/QskSwitchButton.cpp
controls/QskSwitchButtonSkinlet.cpp
controls/QskTabBar.cpp
controls/QskTabButton.cpp
controls/QskTabButtonSkinlet.cpp
controls/QskTabView.cpp
controls/QskTabViewSkinlet.cpp
controls/QskTextInput.cpp
controls/QskTextInputSkinlet.cpp
controls/QskTextLabel.cpp
controls/QskTextLabelSkinlet.cpp
controls/QskVariantAnimator.cpp
controls/QskWindow.cpp)
list(APPEND TARGET_HEADERS
layouts/QskGridBox.h
layouts/QskGridLayoutEngine.h
layouts/QskIndexedLayoutBox.h
layouts/QskLayoutChain.h
layouts/QskLayoutEngine2D.h
layouts/QskLayoutElement.h
layouts/QskLayoutMetrics.h
layouts/QskLinearBox.h
layouts/QskLinearLayoutEngine.h
layouts/QskStackBoxAnimator.h
layouts/QskStackBox.h
layouts/QskSubcontrolLayoutEngine.h)
list(APPEND TARGET_SOURCES
layouts/QskGridBox.cpp
layouts/QskGridLayoutEngine.cpp
layouts/QskIndexedLayoutBox.cpp
layouts/QskLayoutChain.cpp
layouts/QskLayoutEngine2D.cpp
layouts/QskLayoutElement.cpp
layouts/QskLayoutMetrics.cpp
layouts/QskLinearBox.cpp
layouts/QskLinearLayoutEngine.cpp
layouts/QskStackBoxAnimator.cpp
layouts/QskStackBox.cpp
layouts/QskSubcontrolLayoutEngine.cpp)
list(APPEND TARGET_HEADERS
dialogs/QskDialog.h
dialogs/QskDialogButton.h
dialogs/QskDialogButtonBox.h
dialogs/QskDialogSubWindow.h
dialogs/QskDialogWindow.h
dialogs/QskMessageSubWindow.h
dialogs/QskMessageWindow.h
dialogs/QskSelectionSubWindow.h
dialogs/QskSelectionWindow.h)
list(APPEND TARGET_SOURCES
dialogs/QskDialogButton.cpp
dialogs/QskDialogButtonBox.cpp
dialogs/QskDialog.cpp
dialogs/QskDialogSubWindow.cpp
dialogs/QskDialogWindow.cpp
dialogs/QskMessageSubWindow.cpp
dialogs/QskMessageWindow.cpp
dialogs/QskSelectionSubWindow.cpp
dialogs/QskSelectionWindow.cpp)
list(APPEND TARGET_HEADERS
inputpanel/QskTextPredictor.h
inputpanel/QskInputContext.h
inputpanel/QskInputPanel.h
inputpanel/QskInputPanelBox.h
inputpanel/QskInputPredictionBar.h
inputpanel/QskVirtualKeyboard.h)
list(APPEND TARGET_SOURCES
inputpanel/QskTextPredictor.cpp
inputpanel/QskInputContext.cpp
inputpanel/QskInputPanel.cpp
inputpanel/QskInputPanelBox.cpp
inputpanel/QskInputPredictionBar.cpp
inputpanel/QskVirtualKeyboard.cpp)
if(ENABLE_PINYIN)
list(APPEND TARGET_HEADERS
inputpanel/QskPinyinTextPredictor.h)
list(APPEND TARGET_SOURCES
inputpanel/QskPinyinTextPredictor.cpp)
endif()
if(ENABLE_HUNSPELL)
list(APPEND TARGET_HEADERS
inputpanel/QskHunspellTextPredictor.h)
list(APPEND TARGET_SOURCES
inputpanel/QskHunspellTextPredictor.cpp)
endif()
set(TARGET_NAME qskinny)
if(BUILD_QSKDLL)
qt_add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
else()
qt_add_library(${TARGET_NAME} STATIC ${TARGET_SOURCES} ${TARGET_HEADERS} ${TARGET_RESSOURCES})
endif()
if(BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PUBLIC
QSK_DLL
PRIVATE
QSK_MAKEDLL)
endif()
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/common>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/controls>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/dialogs>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/graphic>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/inputpanel>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/layouts>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/nodes>)
target_include_directories(${TARGET_NAME}
INTERFACE
$<INSTALL_INTERFACE:${QSK_INSTALL_HEADERS}>)
target_link_libraries(${TARGET_NAME}
PUBLIC
Qt::Core
Qt::CorePrivate
Qt::Quick
Qt::QuickPrivate)
if (QT_VERSION_MAJOR VERSION_GREATER "5")
target_link_libraries(${TARGET_NAME}
PUBLIC
Qt::OpenGL
Qt::OpenGLPrivate)
endif()
if(ENABLE_HUNSPELL)
target_link_libraries(${TARGET_NAME}
PRIVATE
hunspell)
endif()
if(ENABLE_PINYIN)
target_compile_definitions(${TARGET_NAME} PRIVATE PINYIN)
target_link_libraries(${TARGET_NAME}
PRIVATE
pinyin
Fcitx5::Utils)
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/inputcontext>)
endif()
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOMOC ON
AUTORCC ON
FOLDER libs)
# TODO hack for standalone qvg2svg
set_target_properties(${TARGET_NAME}
PROPERTIES
AUTOGEN_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/qskinny_autogen)
list(TRANSFORM TARGET_HEADERS PREPEND "${CMAKE_CURRENT_LIST_DIR}/")
set_target_properties(${TARGET_NAME}
PROPERTIES
PUBLIC_HEADER "${TARGET_HEADERS}")

67
support/CMakeLists.txt Normal file
View File

@ -0,0 +1,67 @@
list(APPEND TARGET_HEADERS
SkinnyGlobal.h
SkinnyNamespace.h
SkinnyShapeFactory.h
SkinnyShapeProvider.h
SkinnyShortcut.h)
list(APPEND TARGET_SOURCES
SkinnyNamespace.cpp
SkinnyShapeFactory.cpp
SkinnyShapeProvider.cpp
SkinnyShortcut.cpp)
set(TARGET_NAME qsktestsupport)
if (BUILD_QSKDLL)
qt_add_library(${TARGET_NAME} SHARED ${TARGET_SOURCES} ${TARGET_HEADERS})
else()
qt_add_library(${TARGET_NAME} STATIC ${TARGET_SOURCES} ${TARGET_HEADERS})
endif()
if(ENABLE_FONT_CONFIG)
set(QSK_FONTDIR ${CMAKE_CURRENT_LIST_DIR}/fonts)
set(QSK_FONTCACHEDIR ${CMAKE_CURRENT_BINARY_DIR}/fontconfig)
set(QSK_FONTCONF_FILE ${QSK_FONTCACHEDIR}/fonts.conf)
configure_file(fonts.conf.cmake.in ${QSK_FONTCONF_FILE}
@ONLY
NEWLINE_STYLE LF)
target_compile_definitions(${TARGET_NAME}
PRIVATE
FONTCONFIG_FILE=${QSK_FONTCONF_FILE})
endif()
set_target_properties(${TARGET_NAME} PROPERTIES
AUTOMOC ON)
target_link_libraries(${TARGET_NAME}
PUBLIC
qskinny)
if (BUILD_QSKDLL)
target_compile_definitions(${TARGET_NAME}
PRIVATE
SKINNY_MAKEDLL)
endif()
target_compile_definitions(${TARGET_NAME}
PRIVATE
PLUGIN_PATH=${CMAKE_INSTALL_PREFIX}/skins)
target_include_directories(${TARGET_NAME}
PUBLIC
${CMAKE_CURRENT_LIST_DIR})
if(ENABLE_ENSURE_SKINS)
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/skins)
target_compile_definitions(${TARGET_NAME} PRIVATE ENSURE_SKINS)
target_link_libraries(${TARGET_NAME}
PRIVATE
squiekskin
material3skin)
endif()
install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_LIBS})

View File

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>@QSK_FONTDIR@</dir>
<cachedir>@QSK_FONTCACHEDIR@/cache</cachedir>
</fontconfig>

3
tools/CMakeLists.txt Normal file
View File

@ -0,0 +1,3 @@
if(TARGET Qt::Svg)
add_subdirectory(svg2qvg)
endif()

View File

@ -0,0 +1,53 @@
set(TARGET_NAME svg2qvg)
set(TARGET_SOURCES main.cpp)
qt_add_executable(${TARGET_NAME} ${TARGET_SOURCES})
if(BUILD_SVG2QVG_STANDALONE)
# NOTE: when building standalone some moc files are transitively required.
# These files are being created by the qskinny build, hence we add an explicit dependency.
# E.g. main.cpp -> #include <QskGraphic.cpp> -> #include "moc_QskGraphic.cpp"
add_dependencies(${TARGET_NAME} qskinny)
# TODO hack for standalone qvg2svg
get_target_property(qskinny_AUTOGEN_DIR qskinny AUTOGEN_BUILD_DIR)
if (${qskinny_AUTOGEN_DIR} STREQUAL "")
message(FATAL_ERROR "Directory '${qskinny_AUTOGEN_DIR}' doesn't exist")
endif()
# TODO fix multi configuration generators
if(CMAKE_GENERATOR MATCHES "Visual Studio.*")
add_definitions("/I${qskinny_AUTOGEN_DIR}/include_\$(Configuration)")
else()
target_include_directories(${TARGET_NAME}
PRIVATE
${qskinny_AUTOGEN_DIR}/include)
endif()
target_include_directories(${TARGET_NAME}
PRIVATE
${CMAKE_SOURCE_DIR}/src/common
${CMAKE_SOURCE_DIR}/src/graphic)
target_compile_definitions(${TARGET_NAME}
PRIVATE
QSK_STANDALONE)
target_link_libraries(${TARGET_NAME}
PRIVATE
Qt::Gui
Qt::GuiPrivate
Qt::Svg)
else()
target_link_libraries(${TARGET_NAME}
PRIVATE
qskinny
Qt::Svg)
endif()
set_target_properties(${TARGET_NAME}
PROPERTIES
FOLDER tools)
install(TARGETS ${TARGET_NAME})