Compare commits
1 Commits
master
...
features/s
Author | SHA1 | Date |
---|---|---|
|
c7fe25a63e |
|
@ -58,6 +58,44 @@ jobs:
|
|||
},
|
||||
screenshot_filename: "windows-latest-msvc-qt-6.5.0.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.5.0",
|
||||
qtdirkey: "Qt6_DIR",
|
||||
qtdirvalue: "../Qt/6.5.0/msvc2019_64/lib/cmake/Qt6",
|
||||
qtprefixpath: "../Qt/6.5.0/msvc2019_64",
|
||||
},
|
||||
screenshot_filename: "windows-2019-msvc-qt-6.5.0.jpg",
|
||||
}
|
||||
- {
|
||||
name: "Ubuntu Latest GCC Qt5",
|
||||
os: ubuntu-latest,
|
||||
|
@ -97,9 +135,47 @@ jobs:
|
|||
},
|
||||
screenshot_filename: "ubuntu-latest-gcc-qt-6.5.0.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.5.0",
|
||||
qtdirkey: "Qt6_DIR",
|
||||
qtdirvalue: "../Qt/6.5.0/gcc_64/lib/cmake/Qt6",
|
||||
qtprefixpath: "../Qt/6.5.0/gcc_64",
|
||||
},
|
||||
screenshot_filename: "ubuntu-latest-gcc-9-qt-6.5.0.jpg",
|
||||
}
|
||||
- {
|
||||
name: "macOS Latest Clang Qt5",
|
||||
os: macos-13,
|
||||
os: macos-latest,
|
||||
artifact: "macos_clang.7z",
|
||||
build_type: "Release",
|
||||
cc: "clang",
|
||||
|
@ -162,11 +238,46 @@ jobs:
|
|||
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: |
|
||||
find /opt/homebrew/ -name EXTERNALLY-MANAGED|xargs rm
|
||||
brew install cmake ninja
|
||||
brew install p7zip cmake ninja
|
||||
ninja --version
|
||||
cmake --version
|
||||
|
||||
|
@ -193,28 +304,46 @@ jobs:
|
|||
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.5.0
|
||||
# key: ${{ runner.os }}-QtCache-Qt6
|
||||
|
||||
- name: Install Qt5
|
||||
if: endsWith(matrix.config.name, 'Qt5')
|
||||
uses: jurplel/install-qt-action@v4
|
||||
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@v4
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: "6.5.0"
|
||||
target: "desktop"
|
||||
install-deps: "true"
|
||||
modules: "qtwebengine qtshadertools"
|
||||
cached: ${{ steps.cache-qt-6-2.outputs.cache-hit }}
|
||||
setup-python: "false"
|
||||
tools: ""
|
||||
set-env: "true"
|
||||
tools-only: "false"
|
||||
|
@ -278,7 +407,7 @@ jobs:
|
|||
./qskinny_build/examples/bin/iotdashboard --screenshot ${{ matrix.config.screenshot_filename }} &
|
||||
sleep 10
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.config.screenshot_filename }}
|
||||
path: ${{ matrix.config.screenshot_filename }}
|
||||
|
@ -301,7 +430,7 @@ jobs:
|
|||
if: startsWith(matrix.config.name, 'Ubuntu')
|
||||
run: |
|
||||
killall iotdashboard
|
||||
# killall Xvfb
|
||||
killall Xvfb
|
||||
|
||||
- name: Configure ( CMake Integration Test )
|
||||
shell: bash
|
||||
|
@ -317,7 +446,29 @@ jobs:
|
|||
-DQSkinny_DIR:PATH=$GITHUB_WORKSPACE/qskinny_install/lib/cmake/QSkinny
|
||||
|
||||
- name: Build ( CMake Integration Test )
|
||||
env:
|
||||
DISPLAY: ":1"
|
||||
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
|
||||
|
|
|
@ -18,9 +18,9 @@ macro(qsk_setup_options)
|
|||
|
||||
# we actually want to use cmake_dependent_option - minimum cmake version ??
|
||||
|
||||
option( BUILD_TOOLS_STANDALONE "Build tools without qskinny library dependency" ON )
|
||||
option( BUILD_SVG2QVG_STANDALONE "Build svg2qvg without qskinny library dependency" ON )
|
||||
if( NOT BUILD_TOOLS )
|
||||
set( BUILD_TOOLS_STANDALONE OFF )
|
||||
set( BUILD_SVG2QVG_STANDALONE OFF )
|
||||
endif()
|
||||
|
||||
if( NOT BUILD_INPUTCONTEXT )
|
||||
|
@ -130,22 +130,6 @@ install(
|
|||
COMPONENT
|
||||
Devel)
|
||||
|
||||
|
||||
# install cmake helper scripts
|
||||
install(
|
||||
FILES
|
||||
${QSK_CMAKE_DIR}/scripts/QSkinnySvg2Qvg.lin.sh
|
||||
${QSK_CMAKE_DIR}/scripts/QSkinnySvg2Qvg.mac.sh
|
||||
${QSK_CMAKE_DIR}/scripts/QSkinnySvg2Qvg.win.bat
|
||||
DESTINATION
|
||||
${PACKAGE_LOCATION}/scripts
|
||||
PERMISSIONS
|
||||
OWNER_READ OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT
|
||||
Devel)
|
||||
|
||||
# Build other libraries
|
||||
if(BUILD_QML_EXPORT)
|
||||
add_subdirectory(qmlexport)
|
||||
|
|
25
LICENSES
|
@ -14,31 +14,8 @@ a) HCT color system
|
|||
SPDX-License-Identifier: Apache License 2.0
|
||||
Copyright (C) 2021 Google LLC
|
||||
|
||||
b) Cassowary constraint solving algorithm ( examples )
|
||||
b) Cassowary constraint solving algorithm
|
||||
|
||||
Code: https://github.com/nucleic/kiwi
|
||||
SPDX-License-Identifier: BSD 3-Clause "New" or "Revised" License
|
||||
Copyright (c) 2013, Nucleic Development Team
|
||||
|
||||
fonts ( needed for the Material3/Fluent2 skin )
|
||||
|
||||
a) Material3 Icons
|
||||
|
||||
Code: https://github.com/google/material-design-icons
|
||||
SPDX-License-Identifier: Apache License 2.0
|
||||
|
||||
b) Roboto Fonts
|
||||
|
||||
Code: https://github.com/googlefonts/roboto-classic
|
||||
SPDX-License-Identifier: SIL Open Font License 1.1
|
||||
Copyright 2011 The Roboto Project Authors
|
||||
|
||||
c) Fluent2 Icons
|
||||
|
||||
Code: https://github.com/microsoft/fluentui-system-icons
|
||||
SPDX-License-Identifier: MIT License
|
||||
|
||||
d) Segoe-UI Fonts
|
||||
|
||||
Code: https://github.com/mrbvrz/segoe-ui-linux
|
||||
License: https://github.com/mrbvrz/segoe-ui-linux/blob/master/license.txt
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTargets.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTools.cmake" OPTIONAL)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyToolsTargets.cmake" OPTIONAL)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyQmlExportTargets.cmake" OPTIONAL)
|
||||
|
|
|
@ -8,41 +8,11 @@
|
|||
function(qsk_svg2qvg SVG_FILENAME QVG_FILENAME)
|
||||
get_filename_component(QVG_FILENAME ${QVG_FILENAME} ABSOLUTE)
|
||||
get_filename_component(SVG_FILENAME ${SVG_FILENAME} ABSOLUTE)
|
||||
|
||||
if(TARGET Qt6::Svg)
|
||||
set(QtSvgTarget Qt6::Svg)
|
||||
elseif(TARGET Qt5::Svg)
|
||||
set(QtSvgTarget Qt5::Svg)
|
||||
endif()
|
||||
|
||||
# find svg2qvg target location
|
||||
get_target_property(Svg2QvgLocation Qsk::Svg2Qvg LOCATION)
|
||||
get_filename_component(Svg2QvgDirectory ${Svg2QvgLocation} DIRECTORY)
|
||||
message(STATUS "Svg2QvgLocation: ${Svg2QvgLocation}")
|
||||
message(STATUS "Svg2QvgDirectory: ${Svg2QvgDirectory}")
|
||||
|
||||
# find qt svg target location
|
||||
get_target_property(QtSvgTargetLocation ${QtSvgTarget} LOCATION)
|
||||
get_filename_component(QtSvgTargetDirectory ${QtSvgTargetLocation} DIRECTORY)
|
||||
message(STATUS "QtSvgTargetLocation: ${QtSvgTargetLocation}")
|
||||
message(STATUS "QtSvgTargetDirectory: ${QtSvgTargetDirectory}")
|
||||
|
||||
# select platform specific wrapper script
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
set(script ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/scripts/QSkinnySvg2Qvg.win.bat)
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(script ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/scripts/QSkinnySvg2Qvg.mac.sh)
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
set(script ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/scripts/QSkinnySvg2Qvg.lin.sh)
|
||||
else()
|
||||
message(FATAL "Unsupported operating system")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
COMMAND ${script} ${Svg2QvgLocation} ${SVG_FILENAME} ${QVG_FILENAME} ${QtSvgTargetDirectory}
|
||||
COMMAND svg2qvg ${SVG_FILENAME} ${QVG_FILENAME}
|
||||
OUTPUT ${QVG_FILENAME}
|
||||
DEPENDS ${SVG_FILENAME}
|
||||
COMMENT "Compiling ${SVG_FILENAME} to ${QVG_FILENAME}"
|
||||
VERBATIM)
|
||||
WORKING_DIRECTORY $<TARGET_FILE_DIR:${Qt}::Svg>
|
||||
COMMENT "Compiling ${SVG_FILENAME} to ${QVG_FILENAME}")
|
||||
endfunction()
|
||||
|
||||
|
|
|
@ -20,45 +20,6 @@ function(qsk_add_executable target)
|
|||
|
||||
endfunction()
|
||||
|
||||
function(qsk_embed_sources target)
|
||||
|
||||
# In cross platform scenarios you might need the qvg converter
|
||||
# tools for the build - not the target - platform. To avoid having
|
||||
# to build all libraries those tools offer a standalone
|
||||
# mode that includes some source files instead.
|
||||
|
||||
# Some moc files are transitively required:
|
||||
# - f.e #include <QskGraphic.cpp> -> #include "moc_QskGraphic.cpp"
|
||||
# Those will be generated when adding the dependency below
|
||||
|
||||
add_dependencies(${target} 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)")
|
||||
elseif(CMAKE_GENERATOR MATCHES "Ninja Multi.*")
|
||||
target_include_directories(${target}
|
||||
PRIVATE
|
||||
${qskinny_AUTOGEN_DIR}/include_$<CONFIG>)
|
||||
else()
|
||||
target_include_directories(${target} PRIVATE ${qskinny_AUTOGEN_DIR}/include)
|
||||
endif()
|
||||
|
||||
target_include_directories(${target}
|
||||
PRIVATE
|
||||
${QSK_SOURCE_DIR}/src/common
|
||||
${QSK_SOURCE_DIR}/src/graphic)
|
||||
|
||||
target_compile_definitions(${target} PRIVATE QSK_STANDALONE)
|
||||
target_link_libraries(${target} PRIVATE Qt::Gui Qt::GuiPrivate)
|
||||
endfunction()
|
||||
|
||||
function(qsk_add_library target)
|
||||
|
||||
if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
|
||||
|
@ -86,16 +47,10 @@ function(qsk_add_plugin target TYPE CLASS_NAME)
|
|||
# So for the moment better don't do:
|
||||
# qt6_add_plugin(${target} SHARED ${CLASS_NAME} )
|
||||
|
||||
if(BUILD_QSKDLL)
|
||||
set(library_type SHARED)
|
||||
else()
|
||||
set(library_type STATIC)
|
||||
endif()
|
||||
|
||||
if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
|
||||
qt6_add_library(${target} ${library_type})
|
||||
qt6_add_library(${target} SHARED )
|
||||
else()
|
||||
add_library(${target} ${library_type})
|
||||
add_library(${target} SHARED )
|
||||
endif()
|
||||
|
||||
set_target_properties(${target} PROPERTIES
|
||||
|
@ -149,7 +104,7 @@ function(qsk_add_example target)
|
|||
|
||||
endfunction()
|
||||
|
||||
function(qsk_add_shaders target shader_name)
|
||||
function(qsk_add_shaders target)
|
||||
|
||||
cmake_parse_arguments( arg "" "" "FILES" ${ARGN} )
|
||||
|
||||
|
@ -160,13 +115,7 @@ function(qsk_add_shaders target shader_name)
|
|||
list(APPEND outfiles "${qsbname}.qsb")
|
||||
endforeach()
|
||||
|
||||
qt6_add_shaders( ${target} ${shader_name} BATCHABLE PRECOMPILE QUIET
|
||||
qt6_add_shaders( ${target} "qskshaders" BATCHABLE PRECOMPILE QUIET
|
||||
PREFIX "/qskinny/shaders" ${ARGV} OUTPUTS ${outfiles} )
|
||||
|
||||
# pass on OUTPUT_TARGETS to the caller of this function
|
||||
cmake_parse_arguments(PARSE_ARGV 1 arg "" "OUTPUT_TARGETS" "")
|
||||
if (arg_OUTPUT_TARGETS)
|
||||
set(${arg_OUTPUT_TARGETS} ${${arg_OUTPUT_TARGETS}} PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
|
|
@ -54,7 +54,7 @@ macro(qsk_enable_pedantic_flags)
|
|||
|
||||
add_compile_options( -Wnon-virtual-dtor )
|
||||
add_compile_options( -Woverloaded-virtual )
|
||||
# add_compile_options( -Wfloat-equal )
|
||||
add_compile_options( -Wfloat-equal )
|
||||
|
||||
if ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" )
|
||||
|
||||
|
|
|
@ -54,36 +54,16 @@ macro(qsk_setup_Qt)
|
|||
# C++, but QSkinny itself does not need the WebEngine at all.
|
||||
|
||||
if (QT_VERSION_MAJOR VERSION_LESS 6)
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET
|
||||
OPTIONAL_COMPONENTS WebEngine)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET
|
||||
OPTIONAL_COMPONENTS QuickShapes)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET OPTIONAL_COMPONENTS WebEngine)
|
||||
set( Qt5WebEngineQuick_FOUND ${Qt5WebEngine_FOUND} )
|
||||
set( Qt5QuickShapesPrivate_FOUND ${Qt5QuickShapes_FOUND} )
|
||||
else()
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET
|
||||
OPTIONAL_COMPONENTS WebEngineCore WebEngineQuick)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET
|
||||
OPTIONAL_COMPONENTS QuickShapesPrivate)
|
||||
|
||||
find_package(Qt${QT_VERSION_MAJOR} QUIET
|
||||
OPTIONAL_COMPONENTS QuickDialogs2Utils QuickDialogs2 )
|
||||
endif()
|
||||
|
||||
if( NOT Qt${QT_VERSION_MAJOR}WebEngineQuick_FOUND)
|
||||
message(STATUS "No Qt/Quick WebEngine support: skipping some unimportant examples")
|
||||
endif()
|
||||
|
||||
if (NOT Qt${QT_VERSION_MAJOR}QuickShapesPrivate_FOUND)
|
||||
message(STATUS "No Qt/Quick Shapes support: skipping some unimportant examples")
|
||||
endif()
|
||||
|
||||
if( NOT Qt${QT_VERSION_MAJOR}QuickDialogs2_FOUND)
|
||||
message(STATUS "No Qt/Quick Dialogs2 support: skipping some unimportant examples")
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
SVG2QVG=$1
|
||||
SVG=$2
|
||||
QVG=$3
|
||||
|
||||
LD_LIBRARY_PATH=$4:$LD_LIBRARY_PATH $SVG2QVG $SVG $QVG
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
SVG2QVG=$1
|
||||
SVG=$2
|
||||
QVG=$3
|
||||
|
||||
export DYLD_LIBRARY_PATH=$4:$DYLD_LIBRARY_PATH
|
||||
otool -L $SVG2QVG
|
||||
|
||||
DYLD_LIBRARY_PATH=$4:$DYLD_LIBRARY_PATH $SVG2QVG $SVG $QVG
|
|
@ -1,6 +0,0 @@
|
|||
set SVG2QVG=%1
|
||||
set SVG=%2
|
||||
set QVG=%3
|
||||
set PATH=%4;%PATH%
|
||||
|
||||
%SVG2QVG% %SVG% %QVG%
|
|
@ -1,3 +1,4 @@
|
|||
add_subdirectory(squiek)
|
||||
add_subdirectory(material3)
|
||||
add_subdirectory(fluent2)
|
||||
add_subdirectory(fusion)
|
||||
|
|
|
@ -3,27 +3,13 @@
|
|||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
############################################################################
|
||||
|
||||
list(APPEND HEADERS
|
||||
QskFluent2Global.h QskFluent2Theme.h QskFluent2SkinFactory.h
|
||||
set(SOURCES
|
||||
QskFluent2Global.h
|
||||
QskFluent2Theme.h QskFluent2Theme.cpp
|
||||
QskFluent2Skin.h QskFluent2Skin.cpp
|
||||
QskFluent2SkinFactory.h QskFluent2SkinFactory.cpp
|
||||
)
|
||||
qt_add_resources(SOURCES icons.qrc)
|
||||
|
||||
list(APPEND PRIVATE_HEADERS
|
||||
QskFluent2TextFieldSkinlet.h
|
||||
)
|
||||
|
||||
list(APPEND SOURCES
|
||||
QskFluent2Theme.cpp
|
||||
QskFluent2Skin.cpp
|
||||
QskFluent2SkinFactory.cpp
|
||||
QskFluent2TextFieldSkinlet.cpp
|
||||
)
|
||||
|
||||
qt_add_resources(SOURCES QskFluent2Icons.qrc)
|
||||
|
||||
qsk_add_plugin(fluent2skin skins QskFluent2SkinFactory
|
||||
${SOURCES} ${HEADERS} ${PRIVATE_HEADERS}
|
||||
)
|
||||
|
||||
set_target_properties(fluent2skin PROPERTIES
|
||||
DEFINE_SYMBOL QSK_FLUENT2_MAKEDLL
|
||||
)
|
||||
qsk_add_plugin(fluent2skin skins QskFluent2SkinFactory ${SOURCES})
|
||||
set_target_properties(fluent2skin PROPERTIES DEFINE_SYMBOL QSK_FLUENT2_MAKEDLL )
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/fluent2">
|
||||
<file>icons/qvg/checkmark.qvg</file>
|
||||
<file>icons/qvg/chevron_down.qvg</file>
|
||||
<file>icons/qvg/chevron_up.qvg</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -21,6 +21,9 @@ class QSK_FLUENT2_EXPORT QskFluent2Skin : public QskSkin
|
|||
QskFluent2Skin( QObject* parent = nullptr );
|
||||
~QskFluent2Skin() override;
|
||||
|
||||
void addTheme( QskAspect::Section, const QskFluent2Theme& );
|
||||
void setup();
|
||||
|
||||
enum GraphicRole
|
||||
{
|
||||
GraphicRoleFillColorTextDisabled,
|
||||
|
@ -31,15 +34,22 @@ class QSK_FLUENT2_EXPORT QskFluent2Skin : public QskSkin
|
|||
GraphicRoleFillColorTextSecondary,
|
||||
};
|
||||
|
||||
enum FontRole
|
||||
{
|
||||
Caption = TinyFont,
|
||||
Body = DefaultFont,
|
||||
BodyStrong = SmallFont,
|
||||
BodyLarge = MediumFont,
|
||||
Subtitle = LargeFont,
|
||||
Title = HugeFont,
|
||||
TitleLarge,
|
||||
Display,
|
||||
};
|
||||
|
||||
static constexpr QskAspect::Variation Standard = QskAspect::NoVariation;
|
||||
static constexpr QskAspect::Variation Accent = QskAspect::Large;
|
||||
|
||||
protected:
|
||||
void initHints() override;
|
||||
|
||||
private:
|
||||
void addTheme( QskAspect::Section, const QskFluent2Theme& );
|
||||
|
||||
void setupFonts();
|
||||
void setupGraphicFilters( const QskFluent2Theme& );
|
||||
void setGraphicColor( GraphicRole, QRgb );
|
||||
|
|
|
@ -5,8 +5,18 @@
|
|||
|
||||
#include "QskFluent2SkinFactory.h"
|
||||
#include "QskFluent2Skin.h"
|
||||
#include "QskFluent2Theme.h"
|
||||
|
||||
static const QString name = QStringLiteral( "Fluent2" );
|
||||
static const QString nameLight = QStringLiteral( "Fluent2 Light" );
|
||||
static const QString nameDark = QStringLiteral( "Fluent2 Dark" );
|
||||
|
||||
namespace
|
||||
{
|
||||
inline constexpr QRgb rgbGray( int value )
|
||||
{
|
||||
return qRgba( value, value, value, 255 );
|
||||
}
|
||||
}
|
||||
|
||||
QskFluent2SkinFactory::QskFluent2SkinFactory( QObject* parent )
|
||||
: QskSkinFactory( parent )
|
||||
|
@ -19,15 +29,71 @@ QskFluent2SkinFactory::~QskFluent2SkinFactory()
|
|||
|
||||
QStringList QskFluent2SkinFactory::skinNames() const
|
||||
{
|
||||
return { name };
|
||||
return { nameLight, nameDark };
|
||||
}
|
||||
|
||||
QskSkin* QskFluent2SkinFactory::createSkin( const QString& skinName )
|
||||
{
|
||||
if ( QString::compare( skinName, name, Qt::CaseInsensitive ) == 0 )
|
||||
return new QskFluent2Skin();
|
||||
QskSkin::ColorScheme colorScheme;
|
||||
|
||||
return nullptr;
|
||||
if ( QString::compare( skinName, nameLight, Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
colorScheme = QskSkin::LightScheme;
|
||||
}
|
||||
else if ( QString::compare( skinName, nameDark, Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
colorScheme = QskSkin::DarkScheme;
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
QskSkin::ColorScheme scheme;
|
||||
QskFluent2Theme::BaseColors baseColors;
|
||||
QskFluent2Theme::AccentColors accentColors;
|
||||
|
||||
QskFluent2Theme theme() const { return { scheme, baseColors, accentColors }; }
|
||||
} colors[2];
|
||||
|
||||
switch( colorScheme )
|
||||
{
|
||||
case QskSkin::LightScheme:
|
||||
{
|
||||
colors[0].scheme = colorScheme;
|
||||
colors[0].baseColors = { rgbGray( 243 ), rgbGray( 249 ), rgbGray( 238 ) };
|
||||
colors[0].accentColors = { 0xff0078d4, 0xff005eb7, 0xff003d92, 0xff001968 };
|
||||
|
||||
colors[1].scheme = colorScheme;
|
||||
colors[1].baseColors = { rgbGray( 249 ), rgbGray( 249 ), rgbGray( 238 ) };
|
||||
colors[1].accentColors = colors[0].accentColors;
|
||||
|
||||
break;
|
||||
}
|
||||
case QskSkin::DarkScheme:
|
||||
{
|
||||
colors[0].scheme = colorScheme;
|
||||
colors[0].baseColors = { rgbGray( 32 ), rgbGray( 40 ), rgbGray( 28 ) };
|
||||
colors[0].accentColors = { 0xff0078d4, 0xff0093f9, 0xff60ccfe, 0xff98ecfe };
|
||||
|
||||
colors[1].scheme = colorScheme;
|
||||
colors[1].baseColors = { rgbGray( 40 ), rgbGray( 44 ), rgbGray( 28 ) };
|
||||
colors[1].accentColors = colors[0].accentColors;
|
||||
|
||||
break;
|
||||
}
|
||||
default:;
|
||||
}
|
||||
|
||||
auto skin = new QskFluent2Skin();
|
||||
|
||||
skin->addTheme( QskAspect::Body, colors[0].theme() );
|
||||
skin->addTheme( QskAspect::Header, colors[1].theme() );
|
||||
skin->addTheme( QskAspect::Footer, colors[1].theme() );
|
||||
|
||||
return skin;
|
||||
}
|
||||
|
||||
#include "moc_QskFluent2SkinFactory.cpp"
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskFluent2TextFieldSkinlet.h"
|
||||
#include "QskTextField.h"
|
||||
|
||||
using Q = QskTextField;
|
||||
|
||||
QskFluent2TextFieldSkinlet::QskFluent2TextFieldSkinlet( QskSkin* skin )
|
||||
: Inherited( skin )
|
||||
{
|
||||
}
|
||||
|
||||
QskFluent2TextFieldSkinlet::~QskFluent2TextFieldSkinlet()
|
||||
{
|
||||
}
|
||||
|
||||
QRectF QskFluent2TextFieldSkinlet::subControlRect( const QskSkinnable* skinnable,
|
||||
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
return Inherited::subControlRect( skinnable, contentsRect, subControl );
|
||||
}
|
||||
|
||||
QSizeF QskFluent2TextFieldSkinlet::sizeHint( const QskSkinnable* skinnable,
|
||||
Qt::SizeHint which, const QSizeF& constraint ) const
|
||||
{
|
||||
return Inherited::sizeHint( skinnable, which, constraint );
|
||||
}
|
||||
|
||||
#include "moc_QskFluent2TextFieldSkinlet.cpp"
|
|
@ -1,29 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_FLUENT2_TEXTFIELD_SKINLET_H
|
||||
#define QSK_FLUENT2_TEXTFIELD_SKINLET_H
|
||||
|
||||
#include "QskFluent2Global.h"
|
||||
#include "QskTextFieldSkinlet.h"
|
||||
|
||||
class QSK_FLUENT2_EXPORT QskFluent2TextFieldSkinlet : public QskTextFieldSkinlet
|
||||
{
|
||||
Q_GADGET
|
||||
|
||||
using Inherited = QskTextFieldSkinlet;
|
||||
|
||||
public:
|
||||
Q_INVOKABLE QskFluent2TextFieldSkinlet( QskSkin* = nullptr );
|
||||
~QskFluent2TextFieldSkinlet() override;
|
||||
|
||||
QRectF subControlRect( const QskSkinnable*,
|
||||
const QRectF& rect, QskAspect::Subcontrol ) const override;
|
||||
|
||||
QSizeF sizeHint( const QskSkinnable*,
|
||||
Qt::SizeHint, const QSizeF& ) const override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -117,7 +117,7 @@ QskFluent2Theme::QskFluent2Theme( QskSkin::ColorScheme colorScheme,
|
|||
|
||||
colors.control.defaultColor = rgbGray( 0, 0.0578 );
|
||||
colors.control.secondary = rgbGray( 0, 0.1622 );
|
||||
colors.control.onAccentDefault = rgbGray( 255, 0.08 );
|
||||
colors.control.onAccentDefault = rgbGray( 255.08 );
|
||||
colors.control.onAccentSecondary = rgbGray( 0, 0.40 );
|
||||
colors.control.onAccentTertiary = rgbGray( 0, 0.2169 );
|
||||
colors.control.onAccentDisabled = rgbGray( 0, 0.0578 );
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
Definitions ( where possible ) taken from:
|
||||
- https://www.figma.com/file/NAWMapFlXnoOb86Q2H5GKr/Windows-UI-(Community)
|
||||
|
||||
The Figma model uses the "Segoe Fluent Icons" [1]. Unfortunately its license is
|
||||
too restrictive for being included in the QSkinny project. Fortunately similar
|
||||
icons are also available from the "Fluent UI System Icons" project [2].
|
||||
|
||||
However glyph names/numbers and the corresponding unicode values do not match
|
||||
and can't be taken 1:1 from the Figma model.
|
||||
|
||||
"Fluent UI System Icons" offers different icon packages ( as font ):
|
||||
|
||||
- FluentSystemIcons-Light.ttf
|
||||
- FluentSystemIcons-Regular.ttf
|
||||
- FluentSystemIcons-Filled.ttf
|
||||
- FluentSystemIcons-Resizable.ttf
|
||||
|
||||
For some reason ( might be a bug in the downloaded version ) the checkmark
|
||||
glyph offered from the "Regular" font ( pixelsize 12 ) is different
|
||||
( works better ) to the one from the "Resizable" font.
|
||||
|
||||
That's why we decided to use the "Regular" font for now.
|
||||
|
||||
[1] https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font
|
||||
[2] https://github.com/microsoft/fluentui-system-icons
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<RCC>
|
||||
<qresource prefix="/fluent2">
|
||||
<file>icons/qvg/checkmark.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-closed.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-open.qvg</file>
|
||||
<file>icons/qvg/segmented-button-check.qvg</file>
|
||||
<file>icons/qvg/spin-box-arrow-down.qvg</file>
|
||||
<file>icons/qvg/spin-box-arrow-up.qvg</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="11" height="8" viewBox="0 0 11 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.00195312 3.49805C0.00195312 3.36133 0.0507812 3.24414 0.148438 3.14648C0.246094 3.04883 0.363281 3 0.5 3C0.636719 3 0.753906 3.04883 0.851562 3.14648L3.5 5.79492L9.14844 0.146484C9.24609 0.0488281 9.36328 0 9.5 0C9.57031 0 9.63477 0.0136719 9.69336 0.0410156C9.75586 0.0644531 9.80859 0.0996094 9.85156 0.146484C9.89844 0.189453 9.93555 0.242187 9.96289 0.304688C9.99023 0.363281 10.0039 0.427734 10.0039 0.498047C10.0039 0.634766 9.95312 0.753906 9.85156 0.855469L3.85156 6.85547C3.75391 6.95312 3.63672 7.00195 3.5 7.00195C3.36328 7.00195 3.24609 6.95312 3.14844 6.85547L0.148438 3.85547C0.0507812 3.75781 0.00195312 3.63867 0.00195312 3.49805Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 777 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 157 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" transform="rotate(180 4 2.5)" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 187 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.24914 8.12738L1.12164 4.99988L0.0566406 6.05738L4.24914 10.2499L13.2491 1.24988L12.1916 0.192383L4.24914 8.12738Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 246 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.5 1.125C0.5 1.02344 0.537109 0.935547 0.611328 0.861328C0.685547 0.787109 0.773438 0.75 0.875 0.75C0.976562 0.75 1.06445 0.787109 1.13867 0.861328L5 4.7168L8.86133 0.861328C8.93555 0.787109 9.02344 0.75 9.125 0.75C9.22656 0.75 9.31445 0.787109 9.38867 0.861328C9.46289 0.935547 9.5 1.02344 9.5 1.125C9.5 1.22656 9.46289 1.31445 9.38867 1.38867L5.26367 5.51367C5.18945 5.58789 5.10156 5.625 5 5.625C4.89844 5.625 4.81055 5.58789 4.73633 5.51367L0.611328 1.38867C0.537109 1.31445 0.5 1.22656 0.5 1.125Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 631 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.5 4.875C0.5 4.77344 0.537109 4.68555 0.611328 4.61133L4.73633 0.486328C4.81055 0.412109 4.89844 0.375 5 0.375C5.10156 0.375 5.18945 0.412109 5.26367 0.486328L9.38867 4.61133C9.46289 4.68555 9.5 4.77344 9.5 4.875C9.5 4.97656 9.46289 5.06445 9.38867 5.13867C9.31445 5.21289 9.22656 5.25 9.125 5.25C9.02344 5.25 8.93555 5.21289 8.86133 5.13867L5 1.2832L1.13867 5.13867C1.06445 5.21289 0.976562 5.25 0.875 5.25C0.773438 5.25 0.685547 5.21289 0.611328 5.13867C0.537109 5.06445 0.5 4.97656 0.5 4.875Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 625 B |
|
@ -1,11 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
function symbol2qvg {
|
||||
fontfile=FluentSystemIcons-Regular.ttf
|
||||
glyph2qvg ${fontfile} 12 $1 qvg/$2.qvg
|
||||
}
|
||||
|
||||
|
||||
symbol2qvg 1724 checkmark
|
||||
symbol2qvg 1792 chevron_down
|
||||
symbol2qvg 1816 chevron_up
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"FactoryId": "Fluent2Factory",
|
||||
"Skins": [ "Fluent2" ]
|
||||
"Skins": [ { "Name": "Fluent2 Light", "Scheme": "Light" },
|
||||
{ "Name": "Fluent2 Dark", "Scheme": "Dark" } ]
|
||||
}
|
||||
|
|
|
@ -4,11 +4,10 @@
|
|||
############################################################################
|
||||
|
||||
set(SOURCES
|
||||
QskFusionGlobal.h
|
||||
QskFusionPalette.h QskFusionPalette.cpp
|
||||
QskFusionSkin.h QskFusionSkin.cpp
|
||||
QskFusionGlobal.h QskFusionSkin.h QskFusionSkin.cpp
|
||||
QskFusionSkinFactory.h QskFusionSkinFactory.cpp
|
||||
)
|
||||
qt_add_resources(SOURCES icons.qrc)
|
||||
|
||||
qsk_add_plugin(fusionskin skins QskFusionSkinFactory ${SOURCES})
|
||||
set_target_properties(fusionskin PROPERTIES DEFINE_SYMBOL QSK_FUSION_MAKEDLL)
|
||||
set_target_properties(fusionskin PROPERTIES DEFINE_SYMBOL QSK_FUSION_MAKEDLL )
|
||||
|
|
|
@ -1,181 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskFusionPalette.h"
|
||||
#include <QskRgbValue.h>
|
||||
|
||||
#if 0
|
||||
extern QPalette qt_fusionPalette();
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
inline constexpr QRgb rgbGray( int value )
|
||||
{
|
||||
return qRgb( value, value, value );
|
||||
}
|
||||
}
|
||||
|
||||
QskFusionPalette::QskFusionPalette( QskSkin::ColorScheme colorScheme )
|
||||
{
|
||||
using namespace QskRgb;
|
||||
using P = QPalette;
|
||||
|
||||
struct
|
||||
{
|
||||
QRgb base, background, text, disabledText, light, midLight, mid, dark,
|
||||
darkDisabled, highlight, disabledHighlight, shadow, disabledShadow,
|
||||
hightlightedText, link;
|
||||
} colors;
|
||||
|
||||
if ( colorScheme == QskSkin::DarkScheme )
|
||||
{
|
||||
colors.base = rgbGray( 36 );
|
||||
colors.background = rgbGray( 50 );
|
||||
colors.text = rgbGray( 240 );
|
||||
colors.disabledText = rgbGray( 130 );
|
||||
colors.light = rgbGray( 75 );
|
||||
colors.midLight = rgbGray( 42 );
|
||||
colors.mid = rgbGray( 38 );
|
||||
colors.dark = rgbGray( 33 );
|
||||
colors.darkDisabled = rgbGray( 190 );
|
||||
colors.highlight = qRgb( 48, 140, 198 );
|
||||
colors.disabledHighlight = rgbGray( 145 );
|
||||
colors.shadow = rgbGray( 25 );
|
||||
colors.disabledShadow = rgbGray( 36 );
|
||||
colors.hightlightedText = colors.text;
|
||||
colors.link = colors.highlight;
|
||||
}
|
||||
else
|
||||
{
|
||||
colors.base = White;
|
||||
colors.background = rgbGray( 239 );
|
||||
colors.text = Black;
|
||||
colors.disabledText = rgbGray( 190 );
|
||||
colors.light = White;
|
||||
colors.midLight = rgbGray( 202 );
|
||||
colors.mid = rgbGray( 184 );
|
||||
colors.dark = rgbGray( 159 );
|
||||
colors.darkDisabled = rgbGray( 190 );
|
||||
colors.highlight = qRgb( 48, 140, 198 );
|
||||
colors.disabledHighlight = rgbGray( 145 );
|
||||
colors.shadow = rgbGray( 118 );
|
||||
colors.disabledShadow = rgbGray( 177 );
|
||||
colors.hightlightedText = White;
|
||||
colors.link = Blue;
|
||||
}
|
||||
|
||||
setColor( P::WindowText, colors.text );
|
||||
setColor( P::Button, colors.background );
|
||||
|
||||
setColor( P::Light, colors.light );
|
||||
setColor( P::Midlight, colors.midLight );
|
||||
setColor( P::Dark, colors.dark );
|
||||
setColor( P::Mid, colors.mid );
|
||||
|
||||
setColor( P::Text, colors.text );
|
||||
setColor( P::BrightText, colors.light );
|
||||
setColor( P::ButtonText, colors.text );
|
||||
|
||||
setColor( P::Base, colors.base );
|
||||
setColor( P::Window, colors.background );
|
||||
setColor( P::Shadow, colors.shadow );
|
||||
setColor( P::AlternateBase, interpolated( colors.base, colors.background, 0.5 ) );
|
||||
|
||||
setColor( P::Highlight, colors.highlight );
|
||||
setColor( P::HighlightedText, colors.hightlightedText );
|
||||
|
||||
setColor( P::Link, colors.link);
|
||||
setColor( P::LinkVisited, Magenta );
|
||||
|
||||
setColor( P::ToolTipBase, qRgb( 255, 255, 220 ) );
|
||||
setColor( P::ToolTipText, Black );
|
||||
|
||||
setColor( P::PlaceholderText, toTransparent( colors.text, 128 ) );
|
||||
|
||||
// disabled colors
|
||||
|
||||
setColor( P::Disabled, P::Text, colors.disabledText );
|
||||
setColor( P::Disabled, P::WindowText, colors.disabledText );
|
||||
setColor( P::Disabled, P::ButtonText, colors.disabledText );
|
||||
|
||||
setColor( P::Disabled, P::Base, colors.background );
|
||||
setColor( P::Disabled, P::Dark, colors.darkDisabled );
|
||||
setColor( P::Disabled, P::Shadow, colors.disabledShadow );
|
||||
|
||||
setColor( P::Disabled, P::Highlight, colors.disabledHighlight );
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK( 6, 6, 0 )
|
||||
setColor( P::Active, P::Accent, active( P::Highlight ) );
|
||||
setColor( P::Disabled, P::Accent, disabled( P::Highlight ) );
|
||||
#endif
|
||||
|
||||
initExtraColors();
|
||||
}
|
||||
|
||||
QskFusionPalette::QskFusionPalette( const QPalette& palette )
|
||||
{
|
||||
using P = QPalette;
|
||||
|
||||
for ( int i = 0; i < 2; i++ )
|
||||
{
|
||||
const auto group = static_cast< P::ColorGroup >( i );
|
||||
|
||||
for ( int j = 0; j < P::NColorRoles; j++ )
|
||||
{
|
||||
const auto role = static_cast< P::ColorRole >( j );
|
||||
m_colors[ group ][ role ] = palette.color( group, role ).rgba();
|
||||
}
|
||||
}
|
||||
|
||||
initExtraColors();
|
||||
}
|
||||
|
||||
QskFusionPalette::~QskFusionPalette()
|
||||
{
|
||||
}
|
||||
|
||||
void QskFusionPalette::initExtraColors()
|
||||
{
|
||||
using P = QPalette;
|
||||
|
||||
outline = QskRgb::darker( active( P::Window ), 140 );
|
||||
|
||||
button = active( P::Button );
|
||||
|
||||
{
|
||||
auto c = QColor::fromRgba( button );
|
||||
const int val = qGray( button );
|
||||
c = c.lighter( 100 + qMax( 1, ( 180 - val ) / 6 ) );
|
||||
c.setHsv(c.hue(), c.saturation() * 0.75, c.value() );
|
||||
|
||||
button = c.rgba();
|
||||
}
|
||||
|
||||
{
|
||||
auto c = QColor::fromRgba( button ).toHsv();
|
||||
c.setHsv( c.hue(), qMin( 255, (int)( c.saturation() ) ),
|
||||
qMin( 255, (int)( c.value() * 0.9 ) ) );
|
||||
|
||||
groove = c.rgba();
|
||||
}
|
||||
|
||||
tabFrame = QskRgb::lighter( button, 104 );
|
||||
|
||||
highlightedOutline = active( QPalette::Highlight );
|
||||
|
||||
{
|
||||
highlightedOutline = QskRgb::darker( highlightedOutline, 125 );
|
||||
|
||||
auto c = QColor::fromRgba( highlightedOutline );
|
||||
if ( c.value() > 160 )
|
||||
{
|
||||
c.setHsl(c.hue(), c.saturation(), 160 );
|
||||
highlightedOutline = c.rgba();
|
||||
}
|
||||
}
|
||||
|
||||
error = QskRgb::DarkRed; // ????
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_FUSION_PALETTE_H
|
||||
#define QSK_FUSION_PALETTE_H
|
||||
|
||||
#include "QskSkin.h"
|
||||
#include "QskFusionGlobal.h"
|
||||
#include "QskRgbValue.h"
|
||||
|
||||
#include <qpalette.h>
|
||||
|
||||
class QskFusionPalette
|
||||
{
|
||||
public:
|
||||
QskFusionPalette( QskSkin::ColorScheme = QskSkin::LightScheme );
|
||||
QskFusionPalette( const QPalette& );
|
||||
|
||||
~QskFusionPalette();
|
||||
|
||||
QRgb active( QPalette::ColorRole ) const;
|
||||
QRgb disabled( QPalette::ColorRole ) const;
|
||||
|
||||
QRgb color( QPalette::ColorGroup, QPalette::ColorRole ) const;
|
||||
|
||||
QRgb lighter( QPalette::ColorGroup, QPalette::ColorRole, int factor ) const;
|
||||
QRgb darker( QPalette::ColorGroup, QPalette::ColorRole, int factor ) const;
|
||||
|
||||
QRgb outline;
|
||||
QRgb button;
|
||||
QRgb groove;
|
||||
QRgb tabFrame;
|
||||
QRgb highlightedOutline;
|
||||
QRgb error;
|
||||
|
||||
private:
|
||||
void initExtraColors();
|
||||
|
||||
void setColor( QPalette::ColorRole, QRgb );
|
||||
void setColor( QPalette::ColorGroup, QPalette::ColorRole, QRgb );
|
||||
|
||||
QRgb m_colors[ 2 ][ QPalette::NColorRoles ] = { };
|
||||
};
|
||||
|
||||
inline QRgb QskFusionPalette::color(
|
||||
QPalette::ColorGroup group, QPalette::ColorRole role ) const
|
||||
{
|
||||
Q_ASSERT( group >= 0 && group < 2 );
|
||||
return m_colors[group][role];
|
||||
}
|
||||
|
||||
inline QRgb QskFusionPalette::lighter( QPalette::ColorGroup group,
|
||||
QPalette::ColorRole role, int factor ) const
|
||||
{
|
||||
return QskRgb::lighter( color( group, role ), factor );
|
||||
}
|
||||
|
||||
inline QRgb QskFusionPalette::darker( QPalette::ColorGroup group,
|
||||
QPalette::ColorRole role, int factor ) const
|
||||
{
|
||||
return QskRgb::darker( color( group, role ), factor );
|
||||
}
|
||||
|
||||
inline QRgb QskFusionPalette::active( QPalette::ColorRole role ) const
|
||||
{
|
||||
return m_colors[ QPalette::Active ][ role ];
|
||||
}
|
||||
|
||||
inline QRgb QskFusionPalette::disabled( QPalette::ColorRole role ) const
|
||||
{
|
||||
return m_colors[ QPalette::Disabled ][ role ];
|
||||
}
|
||||
|
||||
inline void QskFusionPalette::setColor(
|
||||
QPalette::ColorRole role, QRgb rgb )
|
||||
{
|
||||
setColor( QPalette::Active, role, rgb );
|
||||
setColor( QPalette::Disabled, role, rgb );
|
||||
}
|
||||
|
||||
inline void QskFusionPalette::setColor(
|
||||
QPalette::ColorGroup group, QPalette::ColorRole role, QRgb rgb )
|
||||
{
|
||||
Q_ASSERT( group >= 0 && group < 2 );
|
||||
m_colors[group][role] = rgb;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -16,7 +16,7 @@ class QSK_FUSION_EXPORT QskFusionSkin : public QskSkin
|
|||
using Inherited = QskSkin;
|
||||
|
||||
public:
|
||||
QskFusionSkin( QObject* parent = nullptr );
|
||||
QskFusionSkin( QskSkin::ColorScheme, QObject* parent = nullptr );
|
||||
~QskFusionSkin() override;
|
||||
|
||||
enum GraphicRole
|
||||
|
@ -24,13 +24,9 @@ class QSK_FUSION_EXPORT QskFusionSkin : public QskSkin
|
|||
GraphicNormal,
|
||||
GraphicDisabled,
|
||||
GraphicHighlighted,
|
||||
GraphicError,
|
||||
GraphicIndicator
|
||||
GraphicError
|
||||
};
|
||||
|
||||
protected:
|
||||
void initHints() override;
|
||||
|
||||
private:
|
||||
void setGraphicColor( GraphicRole, QRgb );
|
||||
};
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
#include "QskFusionSkinFactory.h"
|
||||
#include "QskFusionSkin.h"
|
||||
|
||||
static const QString name = QStringLiteral( "Fusion" );
|
||||
static const QStringList fusionSkinNames =
|
||||
{ QStringLiteral( "Fusion Light" ), QStringLiteral( "Fusion Dark" ) };
|
||||
|
||||
QskFusionSkinFactory::QskFusionSkinFactory( QObject* parent )
|
||||
: QskSkinFactory( parent )
|
||||
|
@ -19,13 +20,16 @@ QskFusionSkinFactory::~QskFusionSkinFactory()
|
|||
|
||||
QStringList QskFusionSkinFactory::skinNames() const
|
||||
{
|
||||
return { name };
|
||||
return fusionSkinNames;
|
||||
}
|
||||
|
||||
QskSkin* QskFusionSkinFactory::createSkin( const QString& skinName )
|
||||
{
|
||||
if ( QString::compare( skinName, name, Qt::CaseInsensitive ) == 0 )
|
||||
return new QskFusionSkin();
|
||||
if ( QString::compare( skinName, fusionSkinNames[0], Qt::CaseInsensitive ) == 0 )
|
||||
return new QskFusionSkin( QskSkin::LightScheme );
|
||||
|
||||
if ( QString::compare( skinName, fusionSkinNames[1], Qt::CaseInsensitive ) == 0 )
|
||||
return new QskFusionSkin( QskSkin::DarkScheme );
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<RCC>
|
||||
<qresource prefix="/fusion">
|
||||
<file>icons/qvg/check_small.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-closed.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-open.qvg</file>
|
||||
<file>icons/qvg/segmented-button-check.qvg</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="12" height="10" viewBox="0 0 12 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4 9.4L0 5.4L1.4 4L4 6.6L10.6 0L12 1.4L4 9.4Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 175 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 157 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" transform="rotate(180 4 2.5)" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 187 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.24914 8.12738L1.12164 4.99988L0.0566406 6.05738L4.24914 10.2499L13.2491 1.24988L12.1916 0.192383L4.24914 8.12738Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 246 B |
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"FactoryId": "FusionFactory",
|
||||
"Skins": [ "Fusion" ]
|
||||
"Skins": [ { "Name": "Fusion Light", "Scheme": "Light" },
|
||||
{ "Name": "Fusion Dark", "Scheme": "Dark" } ]
|
||||
}
|
||||
|
|
|
@ -3,30 +3,11 @@
|
|||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
############################################################################
|
||||
|
||||
list(APPEND HEADERS
|
||||
QskMaterial3Global.h QskMaterial3Skin.h QskMaterial3SkinFactory.h
|
||||
set(SOURCES
|
||||
QskMaterial3Global.h QskMaterial3Skin.h QskMaterial3Skin.cpp
|
||||
QskMaterial3SkinFactory.h QskMaterial3SkinFactory.cpp
|
||||
)
|
||||
qt_add_resources(SOURCES icons.qrc)
|
||||
|
||||
list(APPEND PRIVATE_HEADERS
|
||||
QskMaterial3ProgressBarSkinlet.h
|
||||
QskMaterial3SliderSkinlet.h
|
||||
QskMaterial3TextFieldSkinlet.h
|
||||
)
|
||||
|
||||
list(APPEND SOURCES
|
||||
QskMaterial3Skin.cpp
|
||||
QskMaterial3SkinFactory.cpp
|
||||
QskMaterial3ProgressBarSkinlet.cpp
|
||||
QskMaterial3SliderSkinlet.cpp
|
||||
QskMaterial3TextFieldSkinlet.cpp
|
||||
)
|
||||
|
||||
qt_add_resources(SOURCES QskMaterial3Icons.qrc)
|
||||
|
||||
qsk_add_plugin(material3skin skins QskMaterial3SkinFactory
|
||||
${SOURCES} ${HEADERS} ${PRIVATE_HEADERS}
|
||||
)
|
||||
|
||||
set_target_properties(material3skin PROPERTIES
|
||||
DEFINE_SYMBOL QSK_MATERIAL3_MAKEDLL
|
||||
)
|
||||
qsk_add_plugin(material3skin skins QskMaterial3SkinFactory ${SOURCES})
|
||||
set_target_properties(material3skin PROPERTIES DEFINE_SYMBOL QSK_MATERIAL3_MAKEDLL )
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/m3">
|
||||
<file>icons/qvg/add.qvg</file>
|
||||
<file>icons/qvg/arrow_drop_down.qvg</file>
|
||||
<file>icons/qvg/arrow_drop_up.qvg</file>
|
||||
<file>icons/qvg/check.qvg</file>
|
||||
<file>icons/qvg/close.qvg</file>
|
||||
<file>icons/qvg/remove.qvg</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,94 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskMaterial3ProgressBarSkinlet.h"
|
||||
#include <QskProgressBar.h>
|
||||
#include <QskBoxHints.h>
|
||||
#include <QskMargins.h>
|
||||
#include <QskClipNode.h>
|
||||
#include <QskSGNode.h>
|
||||
|
||||
using Q = QskProgressBar;
|
||||
|
||||
QskMaterial3ProgressBarSkinlet::QskMaterial3ProgressBarSkinlet( QskSkin* skin )
|
||||
: Inherited( skin )
|
||||
{
|
||||
appendNodeRoles( { StopIndicatorRole } );
|
||||
}
|
||||
|
||||
QSGNode* QskMaterial3ProgressBarSkinlet::updateSubNode(
|
||||
const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const
|
||||
{
|
||||
auto progressBar = static_cast< const QskProgressBar* >( skinnable );
|
||||
|
||||
switch( nodeRole )
|
||||
{
|
||||
case GrooveRole:
|
||||
{
|
||||
auto clippedNode = QskSGNode::findChildNode( node, GrooveRole );
|
||||
clippedNode = Inherited::updateSubNode( skinnable, nodeRole, clippedNode );
|
||||
|
||||
if ( clippedNode == nullptr )
|
||||
return nullptr;
|
||||
|
||||
auto clipNode = updateGrooveClipNode( progressBar, node );
|
||||
QskSGNode::setNodeRole( clippedNode, nodeRole );
|
||||
QskSGNode::setParentNode( clippedNode, clipNode );
|
||||
|
||||
return clipNode;
|
||||
}
|
||||
case StopIndicatorRole:
|
||||
{
|
||||
if ( !( progressBar->isIndeterminate() || progressBar->hasOrigin() ) )
|
||||
return updateStopIndicatorNode( progressBar, node );
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
||||
}
|
||||
|
||||
QSGNode* QskMaterial3ProgressBarSkinlet::updateStopIndicatorNode(
|
||||
const QskProgressBar* progressBar, QSGNode* node ) const
|
||||
{
|
||||
auto rect = progressBar->subControlRect( Q::Groove );
|
||||
if ( rect.isEmpty() )
|
||||
return nullptr;
|
||||
|
||||
if( progressBar->orientation() == Qt::Horizontal )
|
||||
rect.setLeft( rect.right() - rect.height() );
|
||||
else
|
||||
rect.setBottom( rect.top() + rect.width() );
|
||||
|
||||
QskBoxHints hints;
|
||||
hints.shape = progressBar->boxShapeHint( Q::Fill );
|
||||
hints.gradient = progressBar->gradientHint( Q::Fill ).endColor();
|
||||
|
||||
return updateBoxNode( progressBar, node, rect, hints );
|
||||
}
|
||||
|
||||
QSGNode* QskMaterial3ProgressBarSkinlet::updateGrooveClipNode(
|
||||
const QskProgressBar* progressBar, QSGNode* node ) const
|
||||
{
|
||||
auto rect = progressBar->subControlRect( Q::Fill );
|
||||
if ( rect.isEmpty() )
|
||||
return nullptr;
|
||||
|
||||
QskMargins margins;
|
||||
if ( progressBar->orientation() == Qt::Horizontal )
|
||||
margins.setMargins( rect.height(), 0.0 );
|
||||
else
|
||||
margins.setMargins( 0.0, rect.width() );
|
||||
|
||||
rect = rect.marginsAdded( margins );
|
||||
|
||||
auto clipNode = QskSGNode::ensureNode< QskClipNode >( node );
|
||||
clipNode->setRegion( progressBar->subControlRect( Q::Groove ), rect );
|
||||
|
||||
return clipNode;
|
||||
}
|
||||
|
||||
#include "moc_QskMaterial3ProgressBarSkinlet.cpp"
|
|
@ -1,37 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_MATERIAL3_PROGRESSBAR_SKINLET_H
|
||||
#define QSK_MATERIAL3_PROGRESSBAR_SKINLET_H
|
||||
|
||||
#include <QskProgressBarSkinlet.h>
|
||||
|
||||
class QskProgressBar;
|
||||
|
||||
class QskMaterial3ProgressBarSkinlet : QskProgressBarSkinlet
|
||||
{
|
||||
Q_GADGET
|
||||
|
||||
using Inherited = QskProgressBarSkinlet;
|
||||
|
||||
public:
|
||||
enum NodeRole
|
||||
{
|
||||
StopIndicatorRole = Inherited::RoleCount,
|
||||
RoleCount
|
||||
};
|
||||
|
||||
Q_INVOKABLE QskMaterial3ProgressBarSkinlet( QskSkin* = nullptr );
|
||||
|
||||
protected:
|
||||
QSGNode* updateSubNode( const QskSkinnable*,
|
||||
quint8 nodeRole, QSGNode* ) const override;
|
||||
|
||||
private:
|
||||
QSGNode* updateStopIndicatorNode( const QskProgressBar*, QSGNode* ) const;
|
||||
QSGNode* updateGrooveClipNode( const QskProgressBar*, QSGNode* ) const;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -80,13 +80,7 @@ class QSK_MATERIAL3_EXPORT QskMaterial3Theme
|
|||
QRgb outlineVariant;
|
||||
|
||||
QRgb surfaceContainerHighest;
|
||||
QRgb surfaceContainerHighest38;
|
||||
|
||||
QRgb inverseSurface;
|
||||
QRgb inverseOnSurface;
|
||||
QRgb inversePrimary;
|
||||
|
||||
QRgb scrim;
|
||||
QRgb shadow;
|
||||
|
||||
QskShadowMetrics elevation0;
|
||||
|
@ -98,14 +92,6 @@ class QSK_MATERIAL3_EXPORT QskMaterial3Theme
|
|||
const qreal focusOpacity = 0.12;
|
||||
const qreal pressedOpacity = 0.12;
|
||||
const qreal draggedOpacity = 0.16;
|
||||
const qreal disabledOpacity = 0.38;
|
||||
|
||||
QRgb hoverColor( QRgb foreground, QRgb background ) const;
|
||||
QRgb focusColor( QRgb foreground, QRgb background ) const;
|
||||
QRgb pressedColor( QRgb foreground, QRgb background ) const;
|
||||
QRgb disabledColor( QRgb foreground, QRgb background ) const;
|
||||
|
||||
qreal stateOpacity( int state ) const;
|
||||
|
||||
QskBoxShapeMetrics shapeExtraSmallTop;
|
||||
};
|
||||
|
@ -117,26 +103,34 @@ class QSK_MATERIAL3_EXPORT QskMaterial3Skin : public QskSkin
|
|||
using Inherited = QskSkin;
|
||||
|
||||
public:
|
||||
QskMaterial3Skin( const QskMaterial3Theme&, QObject* parent = nullptr );
|
||||
~QskMaterial3Skin() override;
|
||||
|
||||
enum GraphicRole
|
||||
{
|
||||
GraphicRoleOnError,
|
||||
GraphicRoleOnPrimary,
|
||||
GraphicRoleOnPrimaryContainer,
|
||||
GraphicRoleOnSecondaryContainer,
|
||||
GraphicRoleOnSurface,
|
||||
GraphicRoleOnSurface38,
|
||||
GraphicRoleOnSurfaceVariant,
|
||||
GraphicRolePrimary,
|
||||
GraphicRoleSurface,
|
||||
GraphicRoleSurfaceContainerHighest,
|
||||
GraphicRoleSurfaceContainerHighest38,
|
||||
};
|
||||
|
||||
QskMaterial3Skin( QObject* parent = nullptr );
|
||||
~QskMaterial3Skin() override;
|
||||
enum FontRole
|
||||
{
|
||||
M3BodyMedium = DefaultFont,
|
||||
M3BodyLarge = LargeFont,
|
||||
M3HeadlineSmall = SmallFont,
|
||||
M3LabelLarge = HugeFont,
|
||||
};
|
||||
|
||||
protected:
|
||||
void initHints() override;
|
||||
static constexpr QskAspect::Variation Filled = QskAspect::NoVariation;
|
||||
static constexpr QskAspect::Variation Tonal = QskAspect::Huge;
|
||||
static constexpr QskAspect::Variation Elevated = QskAspect::Large;
|
||||
static constexpr QskAspect::Variation Outlined = QskAspect::Small;
|
||||
static constexpr QskAspect::Variation Text = QskAspect::Tiny;
|
||||
|
||||
private:
|
||||
void setupFonts();
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
#include "QskMaterial3SkinFactory.h"
|
||||
#include "QskMaterial3Skin.h"
|
||||
|
||||
static const QString name = QStringLiteral( "Material3" );
|
||||
static const QString materialLightSkinName = QStringLiteral( "Material3 Light" );
|
||||
static const QString materialDarkSkinName = QStringLiteral( "Material3 Dark" );
|
||||
|
||||
QskMaterial3SkinFactory::QskMaterial3SkinFactory( QObject* parent )
|
||||
: QskSkinFactory( parent )
|
||||
|
@ -19,13 +20,21 @@ QskMaterial3SkinFactory::~QskMaterial3SkinFactory()
|
|||
|
||||
QStringList QskMaterial3SkinFactory::skinNames() const
|
||||
{
|
||||
return { name };
|
||||
return { materialLightSkinName, materialDarkSkinName };
|
||||
}
|
||||
|
||||
QskSkin* QskMaterial3SkinFactory::createSkin( const QString& skinName )
|
||||
{
|
||||
if ( QString::compare( skinName, name, Qt::CaseInsensitive ) == 0 )
|
||||
return new QskMaterial3Skin();
|
||||
if ( QString::compare( skinName, materialLightSkinName, Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
QskMaterial3Theme theme( QskSkin::LightScheme );
|
||||
return new QskMaterial3Skin( theme );
|
||||
}
|
||||
else if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
QskMaterial3Theme theme( QskSkin::DarkScheme );
|
||||
return new QskMaterial3Skin( theme );
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -1,124 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskMaterial3SliderSkinlet.h"
|
||||
|
||||
#include <QskSlider.h>
|
||||
#include <QskClipNode.h>
|
||||
#include <QskSGNode.h>
|
||||
#include <QskFunctions.h>
|
||||
|
||||
using Q = QskSlider;
|
||||
|
||||
static inline bool qskHasOrigin( const QskSlider* slider )
|
||||
{
|
||||
return !qskFuzzyCompare( slider->origin(), slider->minimum() );
|
||||
}
|
||||
|
||||
QskMaterial3SliderSkinlet::QskMaterial3SliderSkinlet( QskSkin* skin )
|
||||
: Inherited( skin )
|
||||
{
|
||||
}
|
||||
|
||||
QRectF QskMaterial3SliderSkinlet::subControlRect( const QskSkinnable* skinnable,
|
||||
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
if ( subControl == Q::Scale )
|
||||
{
|
||||
auto r = Inherited::subControlRect( skinnable, contentsRect, Q::Scale );
|
||||
|
||||
const auto handleSize = skinnable->strutSizeHint( Q::Handle );
|
||||
|
||||
const auto slider = static_cast< const QskSlider* >( skinnable );
|
||||
if( slider->orientation() == Qt::Horizontal )
|
||||
{
|
||||
const auto m = 0.5 * handleSize.width();
|
||||
r.adjust( m, 0.0, -m, 0.0 );
|
||||
}
|
||||
{
|
||||
const auto m = 0.5 * handleSize.height();
|
||||
r.adjust( 0.0, m, 0.0, -m );
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
return Inherited::subControlRect( skinnable, contentsRect, subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskMaterial3SliderSkinlet::updateSubNode(
|
||||
const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const
|
||||
{
|
||||
switch( nodeRole )
|
||||
{
|
||||
case GrooveRole:
|
||||
case FillRole:
|
||||
{
|
||||
auto clippedNode = QskSGNode::findChildNode( node, nodeRole );
|
||||
clippedNode = Inherited::updateSubNode( skinnable, nodeRole, clippedNode );
|
||||
|
||||
if ( clippedNode )
|
||||
{
|
||||
const auto slider = static_cast< const QskSlider* >( skinnable );
|
||||
|
||||
auto clipNode = QskSGNode::ensureNode< QskClipNode >( node );
|
||||
|
||||
clipNode->setRegion( slider->subControlRect( Q::Panel ),
|
||||
slider->subControlRect( Q::Handle ) );
|
||||
|
||||
QskSGNode::setNodeRole( clippedNode, nodeRole );
|
||||
QskSGNode::setParentNode( clippedNode, clipNode );
|
||||
|
||||
return clipNode;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
||||
}
|
||||
|
||||
QVector< qreal > QskMaterial3SliderSkinlet::graduation( const QskSlider* slider ) const
|
||||
{
|
||||
QVector< qreal > graduation;
|
||||
|
||||
if ( hasGraduation( slider ) )
|
||||
{
|
||||
const auto g = Inherited::graduation( slider );
|
||||
|
||||
// adding the boundaries
|
||||
|
||||
graduation.reserve( g.count() + 2 );
|
||||
graduation += slider->minimum();
|
||||
graduation += g;
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto policy = slider->flagHint< Qsk::Policy >(
|
||||
Q::Tick | QskAspect::Option, Qsk::Maybe );
|
||||
|
||||
if ( policy != Qsk::Never )
|
||||
{
|
||||
if ( qskHasOrigin( slider ) )
|
||||
{
|
||||
graduation.reserve( 3 );
|
||||
graduation += slider->minimum();
|
||||
graduation += slider->origin();
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
else
|
||||
{
|
||||
graduation.reserve( 1 );
|
||||
graduation += slider->maximum();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return graduation;
|
||||
}
|
||||
|
||||
#include "moc_QskMaterial3SliderSkinlet.cpp"
|
|
@ -1,36 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskMaterial3TextFieldSkinlet.h"
|
||||
#include "QskTextField.h"
|
||||
|
||||
QskMaterial3TextFieldSkinlet::QskMaterial3TextFieldSkinlet( QskSkin* skin )
|
||||
: Inherited( skin )
|
||||
{
|
||||
}
|
||||
|
||||
QskMaterial3TextFieldSkinlet::~QskMaterial3TextFieldSkinlet()
|
||||
{
|
||||
}
|
||||
|
||||
QRectF QskMaterial3TextFieldSkinlet::subControlRect( const QskSkinnable* skinnable,
|
||||
const QRectF& contentsRect, QskAspect::Subcontrol subControl ) const
|
||||
{
|
||||
return Inherited::subControlRect( skinnable, contentsRect, subControl );
|
||||
}
|
||||
|
||||
QSGNode* QskMaterial3TextFieldSkinlet::updateSubNode(
|
||||
const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const
|
||||
{
|
||||
return Inherited::updateSubNode( skinnable, nodeRole, node );
|
||||
}
|
||||
|
||||
QSizeF QskMaterial3TextFieldSkinlet::sizeHint( const QskSkinnable* skinnable,
|
||||
Qt::SizeHint which, const QSizeF& constraint ) const
|
||||
{
|
||||
return Inherited::sizeHint( skinnable, which, constraint );
|
||||
}
|
||||
|
||||
#include "moc_QskMaterial3TextFieldSkinlet.cpp"
|
|
@ -1,33 +0,0 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_MATERIAL3_TEXTFIELD_SKINLET_H
|
||||
#define QSK_MATERIAL3_TEXTFIELD_SKINLET_H
|
||||
|
||||
#include "QskMaterial3Global.h"
|
||||
#include "QskTextFieldSkinlet.h"
|
||||
|
||||
class QSK_MATERIAL3_EXPORT QskMaterial3TextFieldSkinlet : public QskTextFieldSkinlet
|
||||
{
|
||||
Q_GADGET
|
||||
|
||||
using Inherited = QskTextFieldSkinlet;
|
||||
|
||||
public:
|
||||
Q_INVOKABLE QskMaterial3TextFieldSkinlet( QskSkin* = nullptr );
|
||||
~QskMaterial3TextFieldSkinlet() override;
|
||||
|
||||
QRectF subControlRect( const QskSkinnable*,
|
||||
const QRectF& rect, QskAspect::Subcontrol ) const override;
|
||||
|
||||
QSizeF sizeHint( const QskSkinnable*,
|
||||
Qt::SizeHint, const QSizeF& ) const override;
|
||||
|
||||
protected:
|
||||
QSGNode* updateSubNode( const QskSkinnable*,
|
||||
quint8 nodeRole, QSGNode* ) const override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,8 @@
|
|||
<RCC>
|
||||
<qresource prefix="/m3">
|
||||
<file>icons/qvg/check_small.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-closed.qvg</file>
|
||||
<file>icons/qvg/combo-box-arrow-open.qvg</file>
|
||||
<file>icons/qvg/segmented-button-check.qvg</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="12" height="10" viewBox="0 0 12 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4 9.4L0 5.4L1.4 4L4 6.6L10.6 0L12 1.4L4 9.4Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 175 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 157 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.25 0.5L4 4.25L7.75 0.5H0.25Z" transform="rotate(180 4 2.5)" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 187 B |
|
@ -0,0 +1,4 @@
|
|||
<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.24914 8.12738L1.12164 4.99988L0.0566406 6.05738L4.24914 10.2499L13.2491 1.24988L12.1916 0.192383L4.24914 8.12738Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 246 B |
|
@ -1,15 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
function symbol2qvg {
|
||||
fontfile=MaterialSymbolsOutlined.ttf
|
||||
glyph2qvg ${fontfile} 24 $1 qvg/$2.qvg
|
||||
}
|
||||
|
||||
symbol2qvg 3067 check
|
||||
symbol2qvg 3084 close
|
||||
|
||||
symbol2qvg 5022 arrow_drop_down
|
||||
symbol2qvg 5023 arrow_drop_up
|
||||
|
||||
symbol2qvg 3082 add
|
||||
symbol2qvg 3080 remove
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"FactoryId": "Material3Factory",
|
||||
"Skins": [ "Material3" ]
|
||||
"Skins": [ { "Name": "Material3 Light", "Scheme": "Light" },
|
||||
{ "Name": "Material3 Dark", "Scheme": "Dark" } ]
|
||||
}
|
||||
|
|
|
@ -3,12 +3,8 @@
|
|||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
############################################################################
|
||||
|
||||
set(SOURCES main.cpp)
|
||||
set(target systemdialogs)
|
||||
|
||||
qsk_add_example(${target} ${SOURCES})
|
||||
|
||||
target_link_libraries(${target} PRIVATE
|
||||
Qt::QuickDialogs2UtilsPrivate
|
||||
Qt::QuickDialogs2Private
|
||||
qsk_add_plugin(squiekskin skins QskSquiekSkinFactory
|
||||
QskSquiekGlobal.h QskSquiekSkin.h QskSquiekSkin.cpp
|
||||
QskSquiekSkinFactory.h QskSquiekSkinFactory.cpp
|
||||
)
|
||||
set_target_properties(squiekskin PROPERTIES DEFINE_SYMBOL QSK_SQUIEK_MAKEDLL)
|
|
@ -0,0 +1,25 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_SQUIEK_GLOBAL_H
|
||||
#define QSK_SQUIEK_GLOBAL_H
|
||||
|
||||
#include "QskGlobal.h"
|
||||
|
||||
#ifdef QSK_DLL
|
||||
|
||||
#if defined( QSK_SQUIEK_MAKEDLL ) // create a DLL library
|
||||
#define QSK_SQUIEK_EXPORT Q_DECL_EXPORT
|
||||
#else // use a DLL library
|
||||
#define QSK_SQUIEK_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
|
||||
#endif // QSK_DLL
|
||||
|
||||
#ifndef QSK_SQUIEK_EXPORT
|
||||
#define QSK_SQUIEK_EXPORT
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -0,0 +1,31 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_SQUIEK_SKIN_H
|
||||
#define QSK_SQUIEK_SKIN_H
|
||||
|
||||
#include "QskSquiekGlobal.h"
|
||||
#include <QskSkin.h>
|
||||
#include <memory>
|
||||
|
||||
class QSK_SQUIEK_EXPORT QskSquiekSkin : public QskSkin
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
using Inherited = QskSkin;
|
||||
|
||||
public:
|
||||
QskSquiekSkin( QObject* parent = nullptr );
|
||||
~QskSquiekSkin() override;
|
||||
|
||||
private:
|
||||
void resetColors( const QColor& accent ) override;
|
||||
void addGraphicRole( int role, const QColor& );
|
||||
|
||||
class PrivateData;
|
||||
std::unique_ptr< PrivateData > m_data;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,33 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#include "QskSquiekSkinFactory.h"
|
||||
#include "QskSquiekSkin.h"
|
||||
|
||||
static const QString squiekSkinName = QStringLiteral( "Squiek" );
|
||||
|
||||
QskSquiekSkinFactory::QskSquiekSkinFactory( QObject* parent )
|
||||
: QskSkinFactory( parent )
|
||||
{
|
||||
}
|
||||
|
||||
QskSquiekSkinFactory::~QskSquiekSkinFactory()
|
||||
{
|
||||
}
|
||||
|
||||
QStringList QskSquiekSkinFactory::skinNames() const
|
||||
{
|
||||
return { squiekSkinName };
|
||||
}
|
||||
|
||||
QskSkin* QskSquiekSkinFactory::createSkin( const QString& skinName )
|
||||
{
|
||||
if ( QString::compare( skinName, squiekSkinName, Qt::CaseInsensitive ) == 0 )
|
||||
return new QskSquiekSkin();
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#include "moc_QskSquiekSkinFactory.cpp"
|
|
@ -0,0 +1,29 @@
|
|||
/******************************************************************************
|
||||
* QSkinny - Copyright (C) The authors
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef QSK_SQUIEK_SKIN_FACTORY_H
|
||||
#define QSK_SQUIEK_SKIN_FACTORY_H
|
||||
|
||||
#include "QskSquiekGlobal.h"
|
||||
#include <QskSkinFactory.h>
|
||||
|
||||
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 );
|
||||
~QskSquiekSkinFactory() override;
|
||||
|
||||
QStringList skinNames() const override;
|
||||
QskSkin* createSkin( const QString& skinName ) override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"FactoryId": "SquiekFactory",
|
||||
"Skins": [ { "Name": "Squiek", "Scheme": "Unknown" } ]
|
||||
}
|
470
doc/Doxyfile
|
@ -1,4 +1,4 @@
|
|||
# Doxyfile 1.9.8
|
||||
# Doxyfile 1.9.3
|
||||
|
||||
# This file describes the settings to be used by the documentation system
|
||||
# doxygen (www.doxygen.org) for a project.
|
||||
|
@ -12,16 +12,6 @@
|
|||
# For lists, items can also be appended using:
|
||||
# TAG += value [value, ...]
|
||||
# Values that contain spaces should be placed between quotes (\" \").
|
||||
#
|
||||
# Note:
|
||||
#
|
||||
# Use doxygen to compare the used configuration file with the template
|
||||
# configuration file:
|
||||
# doxygen -x [configFile]
|
||||
# Use doxygen to compare the used configuration file with the template
|
||||
# configuration file without replacing the environment variables or CMake type
|
||||
# replacement variables:
|
||||
# doxygen -x_noenv [configFile]
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
|
@ -48,13 +38,13 @@ PROJECT_NAME = QSkinny
|
|||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.8.0
|
||||
PROJECT_NUMBER = 0.0.1
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
# quick idea about the purpose of the project. Keep the description short.
|
||||
|
||||
PROJECT_BRIEF = C++/Qt UI toolkit
|
||||
PROJECT_BRIEF =
|
||||
|
||||
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
||||
# in the documentation. The maximum height of the logo should not exceed 55
|
||||
|
@ -68,30 +58,18 @@ PROJECT_LOGO =
|
|||
# entered, it will be relative to the location where doxygen was started. If
|
||||
# left blank the current directory will be used.
|
||||
|
||||
OUTPUT_DIRECTORY = api
|
||||
OUTPUT_DIRECTORY =
|
||||
|
||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
|
||||
# sub-directories (in 2 levels) under the output directory of each output format
|
||||
# and will distribute the generated files over these directories. Enabling this
|
||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
|
||||
# directories (in 2 levels) under the output directory of each output format and
|
||||
# will distribute the generated files over these directories. Enabling this
|
||||
# option can be useful when feeding doxygen a huge amount of source files, where
|
||||
# putting all generated files in the same directory would otherwise causes
|
||||
# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
|
||||
# control the number of sub-directories.
|
||||
# performance problems for the file system.
|
||||
# The default value is: NO.
|
||||
|
||||
CREATE_SUBDIRS = NO
|
||||
|
||||
# Controls the number of sub-directories that will be created when
|
||||
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
|
||||
# level increment doubles the number of directories, resulting in 4096
|
||||
# directories at level 8 which is the default and also the maximum value. The
|
||||
# sub-directories are organized in 2 levels, the first level always has a fixed
|
||||
# number of 16 directories.
|
||||
# Minimum value: 0, maximum value: 8, default value: 8.
|
||||
# This tag requires that the tag CREATE_SUBDIRS is set to YES.
|
||||
|
||||
CREATE_SUBDIRS_LEVEL = 8
|
||||
|
||||
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
|
||||
# characters to appear in the names of generated files. If set to NO, non-ASCII
|
||||
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
|
||||
|
@ -103,14 +81,14 @@ ALLOW_UNICODE_NAMES = NO
|
|||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
|
||||
# documentation generated by doxygen is written. Doxygen will use this
|
||||
# information to generate all constant output in the proper language.
|
||||
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
|
||||
# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
|
||||
# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
|
||||
# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
|
||||
# English messages), Korean, Korean-en (Korean with English messages), Latvian,
|
||||
# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
|
||||
# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
|
||||
# Swedish, Turkish, Ukrainian and Vietnamese.
|
||||
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
|
||||
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
|
||||
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
|
||||
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
|
||||
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
|
||||
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
|
||||
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
|
||||
# Ukrainian and Vietnamese.
|
||||
# The default value is: English.
|
||||
|
||||
OUTPUT_LANGUAGE = English
|
||||
|
@ -358,17 +336,6 @@ MARKDOWN_SUPPORT = YES
|
|||
|
||||
TOC_INCLUDE_HEADINGS = 5
|
||||
|
||||
# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
|
||||
# generate identifiers for the Markdown headings. Note: Every identifier is
|
||||
# unique.
|
||||
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
|
||||
# sequence number starting at 0 and GITHUB use the lower case version of title
|
||||
# with any whitespace replaced by '-' and punctuation characters removed.
|
||||
# The default value is: DOXYGEN.
|
||||
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
|
||||
|
||||
MARKDOWN_ID_STYLE = DOXYGEN
|
||||
|
||||
# When enabled doxygen tries to link words that correspond to documented
|
||||
# classes, or namespaces to their corresponding documentation. Such a link can
|
||||
# be prevented in individual cases by putting a % sign in front of the word or
|
||||
|
@ -480,7 +447,7 @@ TYPEDEF_HIDES_STRUCT = NO
|
|||
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
|
||||
# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
|
||||
# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
|
||||
# during processing. When set to 0 doxygen will based this on the number of
|
||||
# cores available in the system. You can set it explicitly to a value larger
|
||||
# than 0 to get more control over the balance between CPU load and processing
|
||||
|
@ -493,14 +460,6 @@ LOOKUP_CACHE_SIZE = 0
|
|||
|
||||
NUM_PROC_THREADS = 1
|
||||
|
||||
# If the TIMESTAMP tag is set different from NO then each generated page will
|
||||
# contain the date or date and time when the page was generated. Setting this to
|
||||
# NO can help when comparing the output of multiple runs.
|
||||
# Possible values are: YES, NO, DATETIME and DATE.
|
||||
# The default value is: NO.
|
||||
|
||||
TIMESTAMP = NO
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -582,8 +541,7 @@ HIDE_UNDOC_MEMBERS = NO
|
|||
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
|
||||
# undocumented classes that are normally visible in the class hierarchy. If set
|
||||
# to NO, these classes will be included in the various overviews. This option
|
||||
# will also hide undocumented C++ concepts if enabled. This option has no effect
|
||||
# if EXTRACT_ALL is enabled.
|
||||
# has no effect if EXTRACT_ALL is enabled.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
|
@ -614,15 +572,14 @@ INTERNAL_DOCS = NO
|
|||
# filesystem is case sensitive (i.e. it supports files in the same directory
|
||||
# whose names only differ in casing), the option must be set to YES to properly
|
||||
# deal with such files in case they appear in the input. For filesystems that
|
||||
# are not case sensitive the option should be set to NO to properly deal with
|
||||
# are not case sensitive the option should be be set to NO to properly deal with
|
||||
# output files written for symbols that only differ in casing, such as for two
|
||||
# classes, one named CLASS and the other named Class, and to also support
|
||||
# references to files without having to specify the exact matching casing. On
|
||||
# Windows (including Cygwin) and MacOS, users should typically set this option
|
||||
# to NO, whereas on Linux or other Unix flavors it should typically be set to
|
||||
# YES.
|
||||
# Possible values are: SYSTEM, NO and YES.
|
||||
# The default value is: SYSTEM.
|
||||
# The default value is: system dependent.
|
||||
|
||||
CASE_SENSE_NAMES = YES
|
||||
|
||||
|
@ -874,26 +831,11 @@ WARN_IF_INCOMPLETE_DOC = YES
|
|||
|
||||
WARN_NO_PARAMDOC = NO
|
||||
|
||||
# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
|
||||
# undocumented enumeration values. If set to NO, doxygen will accept
|
||||
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
|
||||
# will automatically be disabled.
|
||||
# The default value is: NO.
|
||||
|
||||
WARN_IF_UNDOC_ENUM_VAL = NO
|
||||
|
||||
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
|
||||
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
|
||||
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
|
||||
# at the end of the doxygen process doxygen will return with a non-zero status.
|
||||
# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves
|
||||
# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not
|
||||
# write the warning messages in between other messages but write them at the end
|
||||
# of a run, in case a WARN_LOGFILE is defined the warning messages will be
|
||||
# besides being in the defined file also be shown at the end of a run, unless
|
||||
# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
|
||||
# the behavior will remain as with the setting FAIL_ON_WARNINGS.
|
||||
# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
|
||||
# Possible values are: NO, YES and FAIL_ON_WARNINGS.
|
||||
# The default value is: NO.
|
||||
|
||||
WARN_AS_ERROR = NO
|
||||
|
@ -904,21 +846,10 @@ WARN_AS_ERROR = NO
|
|||
# and the warning text. Optionally the format may contain $version, which will
|
||||
# be replaced by the version of the file (if it could be obtained via
|
||||
# FILE_VERSION_FILTER)
|
||||
# See also: WARN_LINE_FORMAT
|
||||
# The default value is: $file:$line: $text.
|
||||
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
|
||||
# In the $text part of the WARN_FORMAT command it is possible that a reference
|
||||
# to a more specific place is given. To make it easier to jump to this place
|
||||
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
|
||||
# Example:
|
||||
# WARN_LINE_FORMAT = "'vi $file +$line'"
|
||||
# See also: WARN_FORMAT
|
||||
# The default value is: at line $line of file $file.
|
||||
|
||||
WARN_LINE_FORMAT = "at line $line of file $file"
|
||||
|
||||
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
|
||||
# messages should be written. If left blank the output is written to standard
|
||||
# error (stderr). In case the file specified cannot be opened for writing the
|
||||
|
@ -947,21 +878,10 @@ INPUT = . \
|
|||
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
||||
# documentation (see:
|
||||
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
|
||||
# See also: INPUT_FILE_ENCODING
|
||||
# The default value is: UTF-8.
|
||||
|
||||
INPUT_ENCODING = UTF-8
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
|
||||
# character encoding on a per file pattern basis. Doxygen will compare the file
|
||||
# name with each pattern and apply the encoding instead of the default
|
||||
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
|
||||
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
|
||||
# "INPUT_ENCODING" for further information on supported encodings.
|
||||
|
||||
INPUT_FILE_ENCODING =
|
||||
|
||||
# If the value of the INPUT tag contains directories, you can use the
|
||||
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
|
||||
# *.h) to filter out the source-files in the directories.
|
||||
|
@ -973,12 +893,12 @@ INPUT_FILE_ENCODING =
|
|||
# Note the list of default checked file patterns might differ from the list of
|
||||
# default file extension mappings.
|
||||
#
|
||||
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,
|
||||
# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,
|
||||
# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,
|
||||
# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be
|
||||
# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
|
||||
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
|
||||
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
|
||||
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
|
||||
# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
|
||||
# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
|
||||
# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
|
||||
# *.vhdl, *.ucf, *.qsf and *.ice.
|
||||
|
||||
FILE_PATTERNS =
|
||||
|
||||
|
@ -1011,22 +931,20 @@ EXCLUDE_SYMLINKS = NO
|
|||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories for example use the pattern */test/*
|
||||
|
||||
EXCLUDE_PATTERNS = *Private.* \
|
||||
moc*.cpp \
|
||||
*.moc
|
||||
EXCLUDE_PATTERNS = *Private.* moc*.cpp *.moc
|
||||
|
||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
|
||||
# (namespaces, classes, functions, etc.) that should be excluded from the
|
||||
# output. The symbol name can be a fully qualified name, a word, or if the
|
||||
# wildcard * is used, a substring. Examples: ANamespace, AClass,
|
||||
# ANamespace::AClass, ANamespace::*Test
|
||||
#
|
||||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories use the pattern */test/*
|
||||
|
||||
EXCLUDE_SYMBOLS = QskPainterCommand::PixmapData \
|
||||
QskPainterCommand::ImageData \
|
||||
QskPainterCommand::StateData \
|
||||
QHash \
|
||||
QList \
|
||||
std
|
||||
QskPainterCommand::StateData
|
||||
|
||||
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
|
||||
# that contain example code fragments that are included (see the \include
|
||||
|
@ -1069,11 +987,6 @@ IMAGE_PATH = images
|
|||
# code is scanned, but not when the output code is generated. If lines are added
|
||||
# or removed, the anchors will not be placed correctly.
|
||||
#
|
||||
# Note that doxygen will use the data processed and written to standard output
|
||||
# for further processing, therefore nothing else, like debug statements or used
|
||||
# commands (so in case of a Windows batch file always use @echo OFF), should be
|
||||
# written to standard output.
|
||||
#
|
||||
# Note that for custom extensions or not directly supported extensions you also
|
||||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||
# properly processed by doxygen.
|
||||
|
@ -1115,15 +1028,6 @@ FILTER_SOURCE_PATTERNS =
|
|||
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
|
||||
# The Fortran standard specifies that for fixed formatted Fortran code all
|
||||
# characters from position 72 are to be considered as comment. A common
|
||||
# extension is to allow longer lines before the automatic comment starts. The
|
||||
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
|
||||
# be processed before the automatic comment starts.
|
||||
# Minimum value: 7, maximum value: 10000, default value: 72.
|
||||
|
||||
FORTRAN_COMMENT_AFTER = 72
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -1210,46 +1114,6 @@ USE_HTAGS = NO
|
|||
|
||||
VERBATIM_HEADERS = YES
|
||||
|
||||
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
|
||||
# clang parser (see:
|
||||
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
|
||||
# performance. This can be particularly helpful with template rich C++ code for
|
||||
# which doxygen's built-in parser lacks the necessary type information.
|
||||
# Note: The availability of this option depends on whether or not doxygen was
|
||||
# generated with the -Duse_libclang=ON option for CMake.
|
||||
# The default value is: NO.
|
||||
|
||||
CLANG_ASSISTED_PARSING = NO
|
||||
|
||||
# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
|
||||
# tag is set to YES then doxygen will add the directory of each input to the
|
||||
# include path.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
|
||||
|
||||
CLANG_ADD_INC_PATHS = YES
|
||||
|
||||
# If clang assisted parsing is enabled you can provide the compiler with command
|
||||
# line options that you would normally use when invoking the compiler. Note that
|
||||
# the include paths will already be set by doxygen for the files and directories
|
||||
# specified with INPUT and INCLUDE_PATH.
|
||||
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
|
||||
|
||||
CLANG_OPTIONS =
|
||||
|
||||
# If clang assisted parsing is enabled you can provide the clang parser with the
|
||||
# path to the directory containing a file called compile_commands.json. This
|
||||
# file is the compilation database (see:
|
||||
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
|
||||
# options used when the source files were built. This is equivalent to
|
||||
# specifying the -p option to a clang tool, such as clang-check. These options
|
||||
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
|
||||
# will be added as well.
|
||||
# Note: The availability of this option depends on whether or not doxygen was
|
||||
# generated with the -Duse_libclang=ON option for CMake.
|
||||
|
||||
CLANG_DATABASE_PATH =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -1261,11 +1125,10 @@ CLANG_DATABASE_PATH =
|
|||
|
||||
ALPHABETICAL_INDEX = YES
|
||||
|
||||
# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
|
||||
# that should be ignored while generating the index headers. The IGNORE_PREFIX
|
||||
# tag works for classes, function and member names. The entity will be placed in
|
||||
# the alphabetical list under the first letter of the entity name that remains
|
||||
# after removing the prefix.
|
||||
# In case all classes in a project start with a common prefix, all classes will
|
||||
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
|
||||
# can be used to specify a prefix (or a list of prefixes) that should be ignored
|
||||
# while generating the index headers.
|
||||
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
|
||||
|
||||
IGNORE_PREFIX = Qsk \
|
||||
|
@ -1345,15 +1208,10 @@ HTML_STYLESHEET =
|
|||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# list). For an example see the documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ./customdoxygen.css
|
||||
HTML_EXTRA_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the HTML output directory. Note
|
||||
|
@ -1365,19 +1223,6 @@ HTML_EXTRA_STYLESHEET = ./customdoxygen.css
|
|||
|
||||
HTML_EXTRA_FILES =
|
||||
|
||||
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
|
||||
# should be rendered with a dark or light theme.
|
||||
# Possible values are: LIGHT always generate light mode output, DARK always
|
||||
# generate dark mode output, AUTO_LIGHT automatically set the mode according to
|
||||
# the user preference, use light mode if no preference is set (the default),
|
||||
# AUTO_DARK automatically set the mode according to the user preference, use
|
||||
# dark mode if no preference is set and TOGGLE allow to user to switch between
|
||||
# light and dark mode via a button.
|
||||
# The default value is: AUTO_LIGHT.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_COLORSTYLE = AUTO_LIGHT
|
||||
|
||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||
# will adjust the colors in the style sheet and background images according to
|
||||
# this color. Hue is specified as an angle on a color-wheel, see
|
||||
|
@ -1387,7 +1232,7 @@ HTML_COLORSTYLE = AUTO_LIGHT
|
|||
# Minimum value: 0, maximum value: 359, default value: 220.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_COLORSTYLE_HUE = 220
|
||||
HTML_COLORSTYLE_HUE = 30
|
||||
|
||||
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
|
||||
# in the HTML output. For a value of 0 the output will use gray-scales only. A
|
||||
|
@ -1406,7 +1251,16 @@ HTML_COLORSTYLE_SAT = 100
|
|||
# Minimum value: 40, maximum value: 240, default value: 80.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_COLORSTYLE_GAMMA = 80
|
||||
HTML_COLORSTYLE_GAMMA = 130
|
||||
|
||||
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
||||
# page will contain the date and time when the page was generated. Setting this
|
||||
# to YES can help to show when doxygen was last run and thus if the
|
||||
# documentation is up to date.
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_TIMESTAMP = NO
|
||||
|
||||
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
||||
# documentation will contain a main index with vertical navigation menus that
|
||||
|
@ -1427,13 +1281,6 @@ HTML_DYNAMIC_MENUS = YES
|
|||
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
|
||||
# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be
|
||||
# dynamically folded and expanded in the generated HTML source code.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_CODE_FOLDING = YES
|
||||
|
||||
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
|
||||
# shown in the various tree structured indices initially; the user can expand
|
||||
# and collapse entries dynamically later on. Doxygen will expand the tree to
|
||||
|
@ -1564,16 +1411,6 @@ BINARY_TOC = NO
|
|||
|
||||
TOC_EXPAND = NO
|
||||
|
||||
# The SITEMAP_URL tag is used to specify the full URL of the place where the
|
||||
# generated documentation will be placed on the server by the user during the
|
||||
# deployment of the documentation. The generated sitemap is called sitemap.xml
|
||||
# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
|
||||
# is specified no sitemap is generated. For information about the sitemap
|
||||
# protocol see https://www.sitemaps.org
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
SITEMAP_URL =
|
||||
|
||||
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
|
||||
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
|
||||
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
|
||||
|
@ -1749,6 +1586,17 @@ HTML_FORMULA_FORMAT = svg
|
|||
|
||||
FORMULA_FONTSIZE = 10
|
||||
|
||||
# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
|
||||
# generated for formulas are transparent PNGs. Transparent PNGs are not
|
||||
# supported properly for IE 6.0, but are supported on all modern browsers.
|
||||
#
|
||||
# Note that when changing this option you need to delete any form_*.png files in
|
||||
# the HTML output directory before the changes have effect.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
FORMULA_TRANSPARENT = YES
|
||||
|
||||
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
|
||||
# to create new LaTeX commands to be used in formulas as building blocks. See
|
||||
# the section "Including formulas" for details.
|
||||
|
@ -2062,16 +1910,9 @@ PDF_HYPERLINKS = YES
|
|||
|
||||
USE_PDFLATEX = YES
|
||||
|
||||
# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.
|
||||
# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
|
||||
# mode nothing is printed on the terminal, errors are scrolled as if <return> is
|
||||
# hit at every error; missing files that TeX tries to input or request from
|
||||
# keyboard input (\read on a not open input stream) cause the job to abort,
|
||||
# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
|
||||
# but there is no possibility of user interaction just like in batch mode,
|
||||
# SCROLL In scroll mode, TeX will stop only for missing files to input or if
|
||||
# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
|
||||
# each error, asking for user intervention.
|
||||
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
|
||||
# command to the generated LaTeX files. This will instruct LaTeX to keep running
|
||||
# if errors occur, instead of asking the user for help.
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
|
@ -2092,6 +1933,14 @@ LATEX_HIDE_INDICES = NO
|
|||
|
||||
LATEX_BIB_STYLE = plain
|
||||
|
||||
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
|
||||
# page will contain the date and time when the page was generated. Setting this
|
||||
# to NO can help when comparing the output of multiple runs.
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
LATEX_TIMESTAMP = NO
|
||||
|
||||
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
|
||||
# path from which the emoji images will be read. If a relative path is entered,
|
||||
# it will be relative to the LATEX_OUTPUT directory. If left blank the
|
||||
|
@ -2257,39 +2106,13 @@ DOCBOOK_OUTPUT = docbook
|
|||
#---------------------------------------------------------------------------
|
||||
|
||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
|
||||
# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
|
||||
# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
|
||||
# the structure of the code including all documentation. Note that this feature
|
||||
# is still experimental and incomplete at the moment.
|
||||
# The default value is: NO.
|
||||
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to Sqlite3 output
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
|
||||
# database with symbols found by doxygen stored in tables.
|
||||
# The default value is: NO.
|
||||
|
||||
GENERATE_SQLITE3 = NO
|
||||
|
||||
# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
|
||||
# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
|
||||
# in front of it.
|
||||
# The default directory is: sqlite3.
|
||||
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
|
||||
|
||||
SQLITE3_OUTPUT = sqlite3
|
||||
|
||||
# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
|
||||
# database file will be recreated with each doxygen run. If set to NO, doxygen
|
||||
# will warn if an a database file is already found and not modify it.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
|
||||
|
||||
SQLITE3_RECREATE_DB = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -2364,8 +2187,7 @@ SEARCH_INCLUDES = YES
|
|||
|
||||
# The INCLUDE_PATH tag can be used to specify one or more directories that
|
||||
# contain include files that are not input files but should be processed by the
|
||||
# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
|
||||
# RECURSIVE has no effect here.
|
||||
# preprocessor.
|
||||
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
|
||||
|
||||
INCLUDE_PATH =
|
||||
|
@ -2433,15 +2255,15 @@ TAGFILES =
|
|||
|
||||
GENERATE_TAGFILE =
|
||||
|
||||
# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces
|
||||
# will be listed in the class and namespace index. If set to NO, only the
|
||||
# inherited external classes will be listed.
|
||||
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
|
||||
# the class index. If set to NO, only the inherited external classes will be
|
||||
# listed.
|
||||
# The default value is: NO.
|
||||
|
||||
ALLEXTERNALS = NO
|
||||
|
||||
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
|
||||
# in the topic index. If set to NO, only the current project's groups will be
|
||||
# in the modules index. If set to NO, only the current project's groups will be
|
||||
# listed.
|
||||
# The default value is: YES.
|
||||
|
||||
|
@ -2455,9 +2277,16 @@ EXTERNAL_GROUPS = YES
|
|||
EXTERNAL_PAGES = YES
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to diagram generator tools
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# You can include diagrams made with dia in doxygen documentation. Doxygen will
|
||||
# then run dia to produce the diagram and insert it in the documentation. The
|
||||
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
|
||||
# If left empty dia is assumed to be found in the default search path.
|
||||
|
||||
DIA_PATH =
|
||||
|
||||
# If set to YES the inheritance and collaboration graphs will hide inheritance
|
||||
# and usage relations if the target is undocumented or is not a class.
|
||||
# The default value is: YES.
|
||||
|
@ -2466,10 +2295,10 @@ HIDE_UNDOC_RELATIONS = YES
|
|||
|
||||
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
|
||||
# available from the path. This tool is part of Graphviz (see:
|
||||
# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
||||
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
||||
# Bell Labs. The other options in this section have no effect if this option is
|
||||
# set to NO
|
||||
# The default value is: YES.
|
||||
# The default value is: NO.
|
||||
|
||||
HAVE_DOT = YES
|
||||
|
||||
|
@ -2483,51 +2312,37 @@ HAVE_DOT = YES
|
|||
|
||||
DOT_NUM_THREADS = 0
|
||||
|
||||
# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
|
||||
# subgraphs. When you want a differently looking font in the dot files that
|
||||
# doxygen generates you can specify fontname, fontcolor and fontsize attributes.
|
||||
# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
|
||||
# Edge and Graph Attributes specification</a> You need to make sure dot is able
|
||||
# to find the font, which can be done by putting it in a standard location or by
|
||||
# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
|
||||
# directory containing the font. Default graphviz fontsize is 14.
|
||||
# The default value is: fontname=Helvetica,fontsize=10.
|
||||
# When you want a differently looking font in the dot files that doxygen
|
||||
# generates you can specify the font name using DOT_FONTNAME. You need to make
|
||||
# sure dot is able to find the font, which can be done by putting it in a
|
||||
# standard location or by setting the DOTFONTPATH environment variable or by
|
||||
# setting DOT_FONTPATH to the directory containing the font.
|
||||
# The default value is: Helvetica.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10"
|
||||
DOT_FONTNAME = Helvetica
|
||||
|
||||
# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
|
||||
# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
|
||||
# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
|
||||
# arrows shapes.</a>
|
||||
# The default value is: labelfontname=Helvetica,labelfontsize=10.
|
||||
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
|
||||
# dot graphs.
|
||||
# Minimum value: 4, maximum value: 24, default value: 10.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10"
|
||||
DOT_FONTSIZE = 10
|
||||
|
||||
# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
|
||||
# around nodes set 'shape=plain' or 'shape=plaintext' <a
|
||||
# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
|
||||
# The default value is: shape=box,height=0.2,width=0.4.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4"
|
||||
|
||||
# You can set the path where dot can find font specified with fontname in
|
||||
# DOT_COMMON_ATTR and others dot attributes.
|
||||
# By default doxygen will tell dot to use the default font as specified with
|
||||
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
|
||||
# the path where dot can find it using this tag.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_FONTPATH =
|
||||
|
||||
# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will
|
||||
# generate a graph for each documented class showing the direct and indirect
|
||||
# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
|
||||
# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
|
||||
# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
|
||||
# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
|
||||
# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
|
||||
# relations will be shown as texts / links.
|
||||
# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
|
||||
# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
|
||||
# graph for each documented class showing the direct and indirect inheritance
|
||||
# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
|
||||
# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
|
||||
# to TEXT the direct and indirect inheritance relations will be shown as texts /
|
||||
# links.
|
||||
# Possible values are: NO, YES, TEXT and GRAPH.
|
||||
# The default value is: YES.
|
||||
|
||||
CLASS_GRAPH = YES
|
||||
|
@ -2535,21 +2350,14 @@ CLASS_GRAPH = YES
|
|||
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
|
||||
# graph for each documented class showing the direct and indirect implementation
|
||||
# dependencies (inheritance, containment, and class references variables) of the
|
||||
# class with other documented classes. Explicit enabling a collaboration graph,
|
||||
# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the
|
||||
# command \collaborationgraph. Disabling a collaboration graph can be
|
||||
# accomplished by means of the command \hidecollaborationgraph.
|
||||
# class with other documented classes.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
COLLABORATION_GRAPH = NO
|
||||
|
||||
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
|
||||
# groups, showing the direct groups dependencies. Explicit enabling a group
|
||||
# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means
|
||||
# of the command \groupgraph. Disabling a directory graph can be accomplished by
|
||||
# means of the command \hidegroupgraph. See also the chapter Grouping in the
|
||||
# manual.
|
||||
# groups, showing the direct groups dependencies.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
|
@ -2609,9 +2417,7 @@ TEMPLATE_RELATIONS = NO
|
|||
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
|
||||
# YES then doxygen will generate a graph for each documented file showing the
|
||||
# direct and indirect include dependencies of the file with other documented
|
||||
# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,
|
||||
# can be accomplished by means of the command \includegraph. Disabling an
|
||||
# include graph can be accomplished by means of the command \hideincludegraph.
|
||||
# files.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
|
@ -2620,10 +2426,7 @@ INCLUDE_GRAPH = YES
|
|||
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
|
||||
# set to YES then doxygen will generate a graph for each documented file showing
|
||||
# the direct and indirect include dependencies of the file with other documented
|
||||
# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set
|
||||
# to NO, can be accomplished by means of the command \includedbygraph. Disabling
|
||||
# an included by graph can be accomplished by means of the command
|
||||
# \hideincludedbygraph.
|
||||
# files.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
|
@ -2663,10 +2466,7 @@ GRAPHICAL_HIERARCHY = YES
|
|||
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
|
||||
# dependencies a directory has on other directories in a graphical way. The
|
||||
# dependency relations are determined by the #include relations between the
|
||||
# files in the directories. Explicit enabling a directory graph, when
|
||||
# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command
|
||||
# \directorygraph. Disabling a directory graph can be accomplished by means of
|
||||
# the command \hidedirectorygraph.
|
||||
# files in the directories.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
|
@ -2682,13 +2482,12 @@ DIR_GRAPH_MAX_DEPTH = 1
|
|||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||
# generated by dot. For an explanation of the image formats see the section
|
||||
# output formats in the documentation of the dot tool (Graphviz (see:
|
||||
# https://www.graphviz.org/)).
|
||||
# http://www.graphviz.org/)).
|
||||
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
|
||||
# to make the SVG files visible in IE 9+ (other browsers do not have this
|
||||
# requirement).
|
||||
# Possible values are: png, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd,
|
||||
# gif, gif:cairo, gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd,
|
||||
# png:cairo, png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
|
||||
# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
|
||||
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
|
||||
# png:gdiplus:gdiplus.
|
||||
# The default value is: png.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
@ -2720,12 +2519,11 @@ DOT_PATH =
|
|||
|
||||
DOTFILE_DIRS =
|
||||
|
||||
# You can include diagrams made with dia in doxygen documentation. Doxygen will
|
||||
# then run dia to produce the diagram and insert it in the documentation. The
|
||||
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
|
||||
# If left empty dia is assumed to be found in the default search path.
|
||||
# The MSCFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain msc files that are included in the documentation (see the \mscfile
|
||||
# command).
|
||||
|
||||
DIA_PATH =
|
||||
MSCFILE_DIRS =
|
||||
|
||||
# The DIAFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain dia files that are included in the documentation (see the \diafile
|
||||
|
@ -2775,6 +2573,18 @@ DOT_GRAPH_MAX_NODES = 20
|
|||
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
|
||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
|
||||
# background. This is disabled by default, because dot on Windows does not seem
|
||||
# to support this out of the box.
|
||||
#
|
||||
# Warning: Depending on the platform used, enabling this option may lead to
|
||||
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
|
||||
# read).
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_TRANSPARENT = YES
|
||||
|
||||
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
|
||||
# files in one run (i.e. multiple -o and -T options on the command line). This
|
||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
|
||||
|
@ -2802,19 +2612,3 @@ GENERATE_LEGEND = NO
|
|||
# The default value is: YES.
|
||||
|
||||
DOT_CLEANUP = YES
|
||||
|
||||
# You can define message sequence charts within doxygen comments using the \msc
|
||||
# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will
|
||||
# use a built-in version of mscgen tool to produce the charts. Alternatively,
|
||||
# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,
|
||||
# specifying prog as the value, doxygen will call the tool as prog -T
|
||||
# <outfile_format> -o <outputfile> <inputfile>. The external tool should support
|
||||
# output file formats "png", "eps", "svg", and "ismap".
|
||||
|
||||
MSCGEN_TOOL =
|
||||
|
||||
# The MSCFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain msc files that are included in the documentation (see the \mscfile
|
||||
# command).
|
||||
|
||||
MSCFILE_DIRS =
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
what is needed to support a layout system, that is on par with what
|
||||
is known from Qt/Widgets.
|
||||
|
||||
\todo Explain: QskItem::geometry(), QskItem::rect(),
|
||||
\todo Explain: QskQuickItem::geometry(), QskQuickItem::rect(),
|
||||
QQuickItem::boundingRect(), layoutRect(), contentsRect(),
|
||||
subControlRect(), focusIndicatorRect(), QQuickItem::clipRect(),
|
||||
QQuickItem::contains()
|
||||
|
@ -22,7 +22,7 @@
|
|||
A state bit that is set, when QQuickItem::isEnabled() == false.
|
||||
|
||||
\extends QskAspect::State
|
||||
\sa QskItem::setDisabled()
|
||||
\sa QskQuickItem::setDisabled()
|
||||
\saqt QQuickItem::enabled
|
||||
|
||||
\var QskControl::Hovered
|
||||
|
@ -71,7 +71,7 @@
|
|||
\accessors autoLayoutChildren(), setAutoLayoutChildren()
|
||||
|
||||
\sa layoutRect(), layoutHints(), layoutAlignmentHint(),
|
||||
QskItem::transparentForPositioners
|
||||
QskQuickItem::transparentForPositioners
|
||||
\saqt QQuickItem::updatePolish()
|
||||
|
||||
\note Auto layouting is similar to what happens when putting several items
|
||||
|
@ -274,7 +274,7 @@
|
|||
\aspect QskControl::Background | QskAspect::Color
|
||||
|
||||
\sa setBackground()
|
||||
\sa QskItem::DebugForceBackground
|
||||
\sa QskQuickItem::DebugForceBackground
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -554,7 +554,7 @@
|
|||
A control has an impact on the layout calutaions, when:
|
||||
|
||||
- isTransparentForPositioner() is false
|
||||
- QskItem::isVisibleToParent() is true, or RetainSizeWhenHidden is set
|
||||
- QskQuickItem::isVisibleToParent() is true, or RetainSizeWhenHidden is set
|
||||
|
||||
\sa isVisibleToParent(), RetainSizeWhenHidden
|
||||
*/
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
The default value
|
||||
|
||||
\accessors visiblePolicy(), setVisiblePolicy()
|
||||
\sa hiddenPolicy, QskItem::isVisibleToParent(), qskIsVisibleToParent()
|
||||
\sa hiddenPolicy, QskQuickItem::isVisibleToParent(), qskIsVisibleToParent()
|
||||
|
||||
\note QskPlacementPolicy::Ignore is stored in the transparentForPositioner
|
||||
bit in QQuickItem and might have an impact on Qt/Quick layout code.
|
||||
|
@ -78,7 +78,7 @@
|
|||
Sometimes an item wants to have its proper size even when being hidden.
|
||||
|
||||
\accessors hiddenPolicy(), setHiddenPolicy()
|
||||
\sa visiblePolicy, QskItem::isVisibleToParent(), qskIsVisibleToParent()
|
||||
\sa visiblePolicy, QskQuickItem::isVisibleToParent(), qskIsVisibleToParent()
|
||||
|
||||
\note QskPlacementPolicy::Ignore is stored in the transparentForPositioner
|
||||
bit in QQuickItem and might have an impact on Qt/Quick layout code.
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
/*!
|
||||
\class QskItem QskItem.h
|
||||
\class QskQuickItem QskQuickItem.h
|
||||
|
||||
\ingroup Framework
|
||||
|
||||
QskItem completes the C++ API of QQuickItem and re-establishs basic
|
||||
QskQuickItem completes the C++ API of QQuickItem and re-establishs basic
|
||||
concepts like events. It also offers better control over the operations
|
||||
happening in the update cycle.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\enum QskItem::UpdateFlag
|
||||
\enum QskQuickItem::UpdateFlag
|
||||
|
||||
Qt/Quick classes have a tendency to update items too early
|
||||
and too often. To avoid processing of unwanted operations
|
||||
QskItem implements a couple of modifications, that
|
||||
QskQuickItem implements a couple of modifications, that
|
||||
can be en/disabled individually.
|
||||
|
||||
\sa updateFlags(), resetUpdateFlags()
|
||||
testUpdateFlag(), setUpdateFlag(), resetUpdateFlag()
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::DeferredUpdate
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::DeferredUpdate
|
||||
|
||||
Creating of scene graph nodes is blocked when being invisible.
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
|||
such as viewport frustrum culling (i.e. hiding items outside of the
|
||||
window geometry).
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::DeferredPolish
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::DeferredPolish
|
||||
|
||||
Polishing an item is blocked when being invisible.
|
||||
F.e for all items being derived from QskControl the layout calculations
|
||||
|
@ -45,7 +45,7 @@
|
|||
|
||||
\saqt QQuickItem::updatePolish(), QQuickItem::polish()
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::DeferredLayout
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::DeferredLayout
|
||||
|
||||
Recalculations of the implicitSize are blocked until being explicitly requested.
|
||||
|
||||
|
@ -54,15 +54,15 @@
|
|||
without recalculating the actual size hints ( f.e the implicitSize ).
|
||||
|
||||
When having layout code that relies on binding the implicit width/height
|
||||
the QskItem::DeferredLayout flag needs to be disabled.
|
||||
the QskQuickItem::DeferredLayout flag needs to be disabled.
|
||||
|
||||
\note All layout classes offered by the Qt/Quick modules of the Qt Company
|
||||
( f.e anchors ) do require immediate updates of the implicit size.
|
||||
|
||||
\sa QskItem::resetImplicitSize()
|
||||
\sa QskQuickItem::resetImplicitSize()
|
||||
\saqt QQuickItem::implicitSize()
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::CleanupOnVisibility
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::CleanupOnVisibility
|
||||
|
||||
Delete scene graph nodes, when the item becomes hidden.
|
||||
Enabling this mode will reduce the memory footprint, but comes at the cost
|
||||
|
@ -70,12 +70,12 @@
|
|||
|
||||
\saqt QQuickItem::isVisible()
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::PreferRasterForTextures
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::PreferRasterForTextures
|
||||
|
||||
When creating textures from QskGraphic, prefer the raster paint
|
||||
engine over the OpenGL paint engine.
|
||||
|
||||
\var QskItem::UpdateFlag QskItem::DebugForceBackground
|
||||
\var QskQuickItem::UpdateFlag QskQuickItem::DebugForceBackground
|
||||
|
||||
Always fill the background of the item with a random color.
|
||||
|
||||
|
@ -84,7 +84,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::geometry
|
||||
\property QskQuickItem::geometry
|
||||
|
||||
This property holds the geometry of the item relative to its parent item.
|
||||
When changing the geometry, the item receives a QskEvent::GeometryChange event.
|
||||
|
@ -93,7 +93,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::rect
|
||||
\property QskQuickItem::rect
|
||||
|
||||
This property returns the internal geometry of the item.
|
||||
It equals QRect(0, 0, width(), height() ).
|
||||
|
@ -102,7 +102,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\var QskItem::transparentForPositioners
|
||||
\var QskQuickItem::transparentForPositioners
|
||||
|
||||
When transparentForPositioners is set the item indicates, that it should be excluded
|
||||
from any layout calculations. This flag is actually a concept of QQuickItem, that
|
||||
|
@ -112,7 +112,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::tabFence
|
||||
\property QskQuickItem::tabFence
|
||||
|
||||
The tabFence flag can be used to create local tab focus chains. It is usually
|
||||
used in combination with QQuickItem::ItemIsFocusScope.
|
||||
|
@ -125,7 +125,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::visibleToParent
|
||||
\property QskQuickItem::visibleToParent
|
||||
|
||||
Flag indicating if an item would become visible if its parentItem() is shown.
|
||||
The implementation relies on the internal explicitVisible flag, that has not
|
||||
|
@ -142,7 +142,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::polishOnResize
|
||||
\property QskQuickItem::polishOnResize
|
||||
|
||||
When polishOnResize is set QQuickItem::polish() will be called automatically
|
||||
whenever the size of the item has been changed. This is usually necessary
|
||||
|
@ -153,7 +153,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::initiallyPainted
|
||||
\property QskQuickItem::initiallyPainted
|
||||
|
||||
Status flag indicating that there has already been a call
|
||||
of QQuickItem::updatePaintNode() since the item has become visible.
|
||||
|
@ -165,7 +165,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::hasChildItems
|
||||
\property QskQuickItem::hasChildItems
|
||||
|
||||
A property indicating if the item has child items.
|
||||
|
||||
|
@ -173,40 +173,40 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\property QskItem::updateFlags
|
||||
\property QskQuickItem::updateFlags
|
||||
|
||||
QskItem offers several tweaks to the Qt/Quick update cycle,
|
||||
QskQuickItem offers several tweaks to the Qt/Quick update cycle,
|
||||
that can be en/disabled individually.
|
||||
|
||||
The flags are a combination from bits that have been explicitly set
|
||||
by setUpdateFlag() and those being derived from the aapplication
|
||||
wide default settings, that can be set with QskSetup.
|
||||
|
||||
\sa QskItem::UpdateFlag, QskItem::updateFlags(), QskSetup::itemUpdateFlags()
|
||||
\sa QskQuickItem::UpdateFlag, QskQuickItem::updateFlags(), QskSetup::itemUpdateFlags()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::QskItem
|
||||
\fn QskQuickItem::QskQuickItem
|
||||
|
||||
Sets the QQuickItem::ItemHasContents flag to true.
|
||||
*/
|
||||
|
||||
*!
|
||||
\fn QskItem::~QskItem
|
||||
\fn QskQuickItem::~QskQuickItem
|
||||
|
||||
Sets the componentComplete to false, so that its about-to-delete state is known
|
||||
when detaching it from parent/window.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::className
|
||||
\fn QskQuickItem::className
|
||||
|
||||
A convenience wrapper for metaObject()->className()
|
||||
\return Class name
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isVisibleTo
|
||||
\fn QskQuickItem::isVisibleTo
|
||||
|
||||
The true case occurs if neither the item itself nor any parent up to but excluding
|
||||
ancestor has been explicitly hidden.
|
||||
|
@ -218,7 +218,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isVisibleToParent
|
||||
\fn QskQuickItem::isVisibleToParent
|
||||
|
||||
An item might be invisible because it has been explicitly hidden or
|
||||
one of its ancestors has been hidden. isVisibleToParent() indicates
|
||||
|
@ -231,14 +231,14 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::hasChildItems() const
|
||||
\fn QskQuickItem::hasChildItems() const
|
||||
|
||||
\return true, if the item has child items
|
||||
\sa hasChildItems
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setGeometry( qreal, qreal, qreal, qreal )
|
||||
\fn QskQuickItem::setGeometry( qreal, qreal, qreal, qreal )
|
||||
|
||||
Set the position and the size of an item
|
||||
|
||||
|
@ -252,7 +252,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setGeometry( const QPointF &, const QSizeF & )
|
||||
\fn QskQuickItem::setGeometry( const QPointF &, const QSizeF & )
|
||||
|
||||
Set the position and the size of an item
|
||||
|
||||
|
@ -261,7 +261,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setGeometry( const QRectF& )
|
||||
\fn QskQuickItem::setGeometry( const QRectF& )
|
||||
|
||||
Set the position and the size of an item
|
||||
|
||||
|
@ -272,14 +272,14 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::geometry() const
|
||||
\fn QskQuickItem::geometry() const
|
||||
|
||||
\return Position and size relative to the parent item
|
||||
\sa geometry, setGeometry()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::geometryChange
|
||||
\fn QskQuickItem::geometryChange
|
||||
|
||||
This overloaded notifier calls QQuickItem::polish() depending on the
|
||||
polishOnResize() flag and forwards the notification to the event queue.
|
||||
|
@ -288,14 +288,14 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::rect() const
|
||||
\fn QskQuickItem::rect() const
|
||||
|
||||
\return Internal geometry of the item, where the position is always at ( 0, 0 )
|
||||
\sa geometry
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::implicitSize
|
||||
\fn QskQuickItem::implicitSize
|
||||
|
||||
Qt/Quick offers an oversimplified layout system that is based on the
|
||||
property bindings of implicit width and height. QSkinny restablishs a layout
|
||||
|
@ -308,56 +308,56 @@
|
|||
\return Implicit size,
|
||||
|
||||
\note Layout code that relies on property bindings of the implicit width a height
|
||||
needs to disable the QskItem::DeferredLayout flag
|
||||
needs to disable the QskQuickItem::DeferredLayout flag
|
||||
|
||||
\sa QskControl::preferredSize(), QskControl::sizeHint()
|
||||
\saqt QQuickItem::implicitWidth(), QQuickItem::implicitHeight()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setPolishOnResize
|
||||
\fn QskQuickItem::setPolishOnResize
|
||||
|
||||
Set or clear the polishOnResize flag.
|
||||
\sa polishOnResize
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::polishOnResize() const
|
||||
\fn QskQuickItem::polishOnResize() const
|
||||
|
||||
\return Value of the polishOnResize flag
|
||||
\sa setPolishOnResize()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setTransparentForPositioner
|
||||
\fn QskQuickItem::setTransparentForPositioner
|
||||
|
||||
Set or clear the transparentForPositioner flag
|
||||
\sa isTransparentForPositioner()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isTransparentForPositioner
|
||||
\fn QskQuickItem::isTransparentForPositioner
|
||||
|
||||
\return Value of the transparentForPositioner flag
|
||||
\sa transparentForPositioner
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setTabFence
|
||||
\fn QskQuickItem::setTabFence
|
||||
|
||||
Set or clear the tabFence property
|
||||
\sa isTabFence()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isTabFence
|
||||
\fn QskQuickItem::isTabFence
|
||||
|
||||
\return Value of the tabFence property
|
||||
\sa setTransparentForPositioner()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setLayoutMirroring
|
||||
\fn QskQuickItem::setLayoutMirroring
|
||||
|
||||
Change the direction how the content is laid out horizontally.
|
||||
|
||||
|
@ -373,7 +373,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::resetLayoutMirroring
|
||||
\fn QskQuickItem::resetLayoutMirroring
|
||||
|
||||
Clear the layoutMirroring property
|
||||
|
||||
|
@ -381,7 +381,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::layoutMirroring() const
|
||||
\fn QskQuickItem::layoutMirroring() const
|
||||
|
||||
Direction how the content is layed out horizontally.
|
||||
|
||||
|
@ -402,7 +402,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::resetUpdateFlags
|
||||
\fn QskQuickItem::resetUpdateFlags
|
||||
|
||||
Reset all flags to the default settings
|
||||
|
||||
|
@ -410,16 +410,16 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::updateFlags() const
|
||||
\fn QskQuickItem::updateFlags() const
|
||||
|
||||
\return Flags affecting the item update process
|
||||
\sa testUpdateFlag(), setUpdateFlag(), updateFlags
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setUpdateFlag
|
||||
\fn QskQuickItem::setUpdateFlag
|
||||
|
||||
QskItem offers several tweaks to the Qt/Quick update cycle,
|
||||
QskQuickItem offers several tweaks to the Qt/Quick update cycle,
|
||||
that can be en/disables individually.
|
||||
|
||||
The default settings for these flags are taken from QskSetup::itemUpdateFlags()
|
||||
|
@ -434,7 +434,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::resetUpdateFlag
|
||||
\fn QskQuickItem::resetUpdateFlag
|
||||
|
||||
Reset the value for flag to the default settings from QskSetup. Future
|
||||
changes of the corresponding bit with QskSetup::setItemUpdateFlag() will affect
|
||||
|
@ -445,7 +445,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::testUpdateFlag
|
||||
\fn QskQuickItem::testUpdateFlag
|
||||
|
||||
\param Flag affecting the item update process
|
||||
\return true, when the corresponding bit is effective
|
||||
|
@ -454,7 +454,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::updateFlagsChanged
|
||||
\fn QskQuickItem::updateFlagsChanged
|
||||
|
||||
Signal indicating, that the effective update flags have changed
|
||||
|
||||
|
@ -463,7 +463,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::classBegin
|
||||
\fn QskQuickItem::classBegin
|
||||
|
||||
The QML engine initializes an item as being incomplete by
|
||||
explicitly calling classBegin(). Once the item
|
||||
|
@ -481,7 +481,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::componentComplete
|
||||
\fn QskQuickItem::componentComplete
|
||||
|
||||
The QML engine initilizes an item as being incomplete by
|
||||
explicitly calling QQuickItem::classBegin(). Once the item
|
||||
|
@ -499,7 +499,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::releaseResources
|
||||
\fn QskQuickItem::releaseResources
|
||||
|
||||
This specific hook is called, when the item is about to be removed
|
||||
from the window it was previously rendering to.
|
||||
|
@ -510,7 +510,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isPolishScheduled
|
||||
\fn QskQuickItem::isPolishScheduled
|
||||
|
||||
\return True, if the item will be polished in the next
|
||||
scene graph update cycle.
|
||||
|
@ -519,21 +519,21 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isUpdateNodeScheduled
|
||||
\fn QskQuickItem::isUpdateNodeScheduled
|
||||
|
||||
\return True, if the item will update the paint node in
|
||||
the next scene graph update cycle
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::isInitiallyPainted
|
||||
\fn QskQuickItem::isInitiallyPainted
|
||||
|
||||
\return Value of the initiallyPainted property
|
||||
\sa initiallyPainted
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::maybeUnresized
|
||||
\fn QskQuickItem::maybeUnresized
|
||||
|
||||
Flag indicating a potential state, where the item is waiting to be
|
||||
sized by the layout system.
|
||||
|
@ -547,7 +547,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::itemFlagsChanged
|
||||
\fn QskQuickItem::itemFlagsChanged
|
||||
|
||||
Signal indicating that at least one if the following attributes has changed:
|
||||
|
||||
|
@ -557,7 +557,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::show
|
||||
\fn QskQuickItem::show
|
||||
|
||||
An alternative way to call setVisible( true ).
|
||||
Useful for signal/slot connections
|
||||
|
@ -567,7 +567,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::hide
|
||||
\fn QskQuickItem::hide
|
||||
|
||||
An alternative way to call setVisible( false ).
|
||||
Useful for signal/slot connections
|
||||
|
@ -577,7 +577,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setHidden
|
||||
\fn QskQuickItem::setHidden
|
||||
|
||||
Convenience function, equivalent to setVisible( !on ).
|
||||
|
||||
|
@ -586,19 +586,19 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::setDisabled
|
||||
\fn QskQuickItem::setDisabled
|
||||
|
||||
Convenience function, equivalent to setEnabled( !on ).
|
||||
\saqt QQuickItem::setEnabled()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::resetImplicitSize
|
||||
\fn QskQuickItem::resetImplicitSize
|
||||
|
||||
Notifies the layout system that attributes affecting the layout
|
||||
system have changed.
|
||||
|
||||
If the QskItem::DeferredLayout flag is enabled ( = default )
|
||||
If the QskQuickItem::DeferredLayout flag is enabled ( = default )
|
||||
the cached implicitSize() gets invalidated and a QEvent::LayoutRequest is sent
|
||||
to the parent item ( like QWidget::updateGeometry ).
|
||||
|
||||
|
@ -607,13 +607,13 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::event
|
||||
\fn QskQuickItem::event
|
||||
|
||||
QskItem handles the additional type of events.
|
||||
QskQuickItem handles the additional type of events.
|
||||
|
||||
For some reason the QQuick classes introduced proprietory notfier hooks
|
||||
instead of using the well established and powerful concept of events.
|
||||
QskItem tries to revert this decision by mapping notifications
|
||||
QskQuickItem tries to revert this decision by mapping notifications
|
||||
to events, when possible.
|
||||
|
||||
The following notification events are added by QSkinny - usually with a
|
||||
|
@ -633,28 +633,37 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::changeEvent
|
||||
\fn QskQuickItem::changeEvent
|
||||
|
||||
This event handler can be reimplemented to handle certain state changes:
|
||||
|
||||
- QEvent::StyleChange
|
||||
- QEvent::ContentsRectChange
|
||||
- QEvent::FontChange
|
||||
- QEvent::PaletteChange
|
||||
- QEvent::ReadOnlyChange
|
||||
- QEvent::EnabledChange
|
||||
- QEvent::LocaleChange
|
||||
- QEvent::ParentChange
|
||||
- QEvent::LayoutDirectionChange
|
||||
|
||||
|
||||
|
||||
\param event Qt event
|
||||
|
||||
\note QEvent::PaletteChange, QEvent::FontChange are handled, but both event types
|
||||
do not fit to the themeing concept of QSkinny and are not posted. However
|
||||
it is possible to post them if an application has a concept, where they
|
||||
make sense.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::geometryChangeEvent
|
||||
\fn QskQuickItem::geometryChangeEvent
|
||||
|
||||
For no known reason QQuickItem propagates changes of position and size
|
||||
by calling QQuickItem::geometryChange(), instead of using events.
|
||||
|
||||
QskItem reestablished the more powerful concept of events by sending/posting
|
||||
QskQuickItem reestablished the more powerful concept of events by sending/posting
|
||||
events, that can be preprocessed by event filtering.
|
||||
|
||||
\param event Event indicating the geometry change
|
||||
|
@ -664,7 +673,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::windowChangeEvent
|
||||
\fn QskQuickItem::windowChangeEvent
|
||||
|
||||
This event handler can be reimplemented to handle situations, where
|
||||
an item is added, removed or transferred between windows. It corresponds
|
||||
|
@ -677,7 +686,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::itemChange
|
||||
\fn QskQuickItem::itemChange
|
||||
|
||||
For no obvious reason Qt/Quick has introduced an additional callback
|
||||
mechanism beside events and signals.
|
||||
|
@ -698,7 +707,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::aboutToShow
|
||||
\fn QskQuickItem::aboutToShow
|
||||
|
||||
A specific hook that is intended to be overloaded by controls that need
|
||||
to do some specific operations, when an item is painted the first time
|
||||
|
@ -711,7 +720,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::mouseUngrabEvent
|
||||
\fn QskQuickItem::mouseUngrabEvent
|
||||
|
||||
Notification, that is overloaded for debuging purposes, without
|
||||
doing anything beside calling the base class.
|
||||
|
@ -720,7 +729,7 @@
|
|||
*/
|
||||
|
||||
/*!
|
||||
\fn QskItem::touchUngrabEvent
|
||||
\fn QskQuickItem::touchUngrabEvent
|
||||
|
||||
Notification, that is overloaded for debuging purposes, without
|
||||
doing anything beside calling the base class.
|
|
@ -1,182 +0,0 @@
|
|||
/* Skia overrides for doxygen CSS. */
|
||||
|
||||
html {
|
||||
--blue: rgb(0,114,178);
|
||||
--green: rgb(0,158,115);
|
||||
--red: rgb(213,94,0);
|
||||
--orange: rgb(230,159,0);
|
||||
--purple: rgb(204,121,167);
|
||||
--brown: rgb(177,89,40);
|
||||
--gray: rgb(79,79,79);
|
||||
--light-blue: rgb(128,185,217);
|
||||
--light-green: rgb(128,207,185);
|
||||
--light-red: rgb(234,175,128);
|
||||
--light-orange: rgb(243,207,128);
|
||||
--light-purple: rgb(230,188,211);
|
||||
--light-brown: rgb(216,172,148);
|
||||
--light-gray: rgb(168,168,168);
|
||||
|
||||
--dark-blue: rgb(0,65,101);
|
||||
--dark-red: rgb(156,44,8);
|
||||
|
||||
--white: rgb(254,254,254);
|
||||
--dark-white: rgb(240,240,240);
|
||||
--black: rgb(10,10,10);
|
||||
}
|
||||
|
||||
#titlearea {
|
||||
/* background matches Skia logo. */
|
||||
background: rgb(248,248,248);
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
#main-nav .sm {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
h2.groupheader {
|
||||
border-bottom: var(--gray);
|
||||
color: var(--dark-blue);
|
||||
}
|
||||
|
||||
div.qindex, div.navtab{
|
||||
background-color: var(--light-gray);
|
||||
border: 1px solid var(--light-blue);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
.contents a:visited {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
a.qindexHL {
|
||||
background-color: var(--light-gray);
|
||||
color: var(--white);
|
||||
border: 1px double var(--gray);
|
||||
}
|
||||
|
||||
.contents a.qindexHL:visited {
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
a.code, a.code:visited, a.line, a.line:visited {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
pre.fragment {
|
||||
border: 1px solid var(--orange);
|
||||
background-color: var(--dark-white);
|
||||
}
|
||||
|
||||
div.fragment {
|
||||
background-color: var(--dark-white);
|
||||
border: 1px solid var(--orange);
|
||||
}
|
||||
|
||||
span.lineno {
|
||||
border-right: 2px solid var(--green);
|
||||
background-color: var(-light-gray);
|
||||
}
|
||||
span.lineno a {
|
||||
background-color: var(--light-gray);
|
||||
}
|
||||
|
||||
span.lineno a:hover {
|
||||
background-color: var(--light-gray);
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
div.ah, span.ah {
|
||||
background-color: var(--black);
|
||||
color: var(--white);
|
||||
border: solid thin var(--gray);
|
||||
box-shadow: 2px 2px 3px var(light-gray);
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
td.indexkey {
|
||||
background-color: var(--light-gray);
|
||||
border: 1px solid var(--orange);
|
||||
}
|
||||
|
||||
td.indexvalue {
|
||||
background-color: var(--light-gray);
|
||||
border: 1px solid var(--orange);
|
||||
}
|
||||
|
||||
tr.memlist {
|
||||
background-color: var(--light-gray);
|
||||
}
|
||||
|
||||
span.keyword {
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
span.keywordtype {
|
||||
color: var(--brown);
|
||||
}
|
||||
|
||||
span.keywordflow {
|
||||
color: var(--brown);
|
||||
}
|
||||
|
||||
span.comment {
|
||||
color: var(--brown);
|
||||
}
|
||||
|
||||
span.charliteral {
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
span.vhdldigit {
|
||||
color: var(--purple);
|
||||
}
|
||||
|
||||
span.vhdlchar {
|
||||
color: var(--black);
|
||||
}
|
||||
|
||||
blockquote {
|
||||
background-color: var(--light-gray);
|
||||
border-left: 2px solid var(--gray);
|
||||
}
|
||||
|
||||
.memtitle {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.memdoc, dl.reflist dd {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.paramname {
|
||||
color: var(--dark-red);
|
||||
}
|
||||
|
||||
.tabsearch {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.navpath ul {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.navpath li {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.navpath li.navelem a:hover {
|
||||
color: var(--blue)
|
||||
}
|
||||
|
||||
.navpath li.footer {
|
||||
background-image:none;
|
||||
}
|
||||
|
|
@ -4,65 +4,66 @@
|
|||
|
||||
You will need:
|
||||
|
||||
1. A recent version of doxygen; The currently used version is 1.9.8.
|
||||
The `doxygen` binary needs to be in the $PATH.
|
||||
1. The `m4` command, which can be installed with `sudo apt install m4`.
|
||||
1. The `documentation-xml-website` branch of the Edelhirsch QSkinny repository
|
||||
at https://github.com/edelhirsch/qskinny/tree/documentation-xml-website .
|
||||
1. A recent version of doxygen; The currently used version is 1.9.1 built from
|
||||
github sources. The `doxygen` binary needs to be in the $PATH.
|
||||
1. A recent version of doxybook2 with some custom patches. The script
|
||||
`generate-website.sh` should download and build the right version, however
|
||||
the script might need some adaptation of paths.
|
||||
For reference, the required version can be found at
|
||||
https://github.com/edelhirsch/doxybook2/tree/jekyll .
|
||||
1. A recent version of Jekyll (see https://jekyllrb.com/), which will generate
|
||||
the static html pages. The currently used jekyll version is 4.2.2.
|
||||
Also a recent version of bundler is required; this can be installed with:
|
||||
the static html pages. This and other required packages can be installed via
|
||||
```
|
||||
gem install jekyll:4.2.2
|
||||
gem install jekyll:3.9.0
|
||||
gem install bundler:2.1.4
|
||||
```
|
||||
1. Checkout the repo to generate the website via
|
||||
`git clone git@github.com:peter-ha/qskinny-website.git`
|
||||
1. Checkout the live website repository via
|
||||
There might be some packages missing from the list above; in this case the
|
||||
Gemfile in the qskinny-website repository might help.
|
||||
1. Checkout the current website repository via
|
||||
`git clone git@github.com:qskinny/qskinny.github.io.git`
|
||||
|
||||
|
||||
## Generating the website
|
||||
|
||||
### Generating the API documentation with doxygen
|
||||
```
|
||||
cd ~/dev/qskinny/doc
|
||||
export PATH=.:$PATH
|
||||
doxygen
|
||||
```
|
||||
This will generate the documentation into the `api` folder.
|
||||
Generating the static HTML sites is done with the `generate-website.sh` script
|
||||
in the `qskinny/doc` directory. The script has some hardcoded paths and probably
|
||||
needs some adaptation to run correctly.
|
||||
|
||||
### Testing and building the website locally
|
||||
It will do the following:
|
||||
|
||||
First copy the generated files from above to the website repo:
|
||||
1. Generate HTML from doxygen. This step is needed because for some reason when
|
||||
generating XML from doxygen there are no images with dependency graphs.
|
||||
*Note*: This step is only executed if the `html` folder doesn't exist,
|
||||
because otherwise it would take too long.
|
||||
1. Generate XML from doxygen. The generated XML is used with doxybook2 in the
|
||||
next step.
|
||||
*Note*: This step is only executed if the `xml` folder doesn't exist,
|
||||
because otherwise it would take too long.
|
||||
1. Generate markdown from XML with doxybook2. This markdown will be used by
|
||||
Jekyll to either server the website content locally or generate static
|
||||
HTML from it, see below.
|
||||
|
||||
```
|
||||
cp -r api ~/dev/qskinny-website/docs/
|
||||
```
|
||||
### Generating the website locally
|
||||
|
||||
Then test the website locally:
|
||||
When the command line switch `-local` is used with the `generate-website.sh`
|
||||
script, it will generate the content to a local folder `doxybook-out`. This is
|
||||
meant to be able to copy selected files to the website directory at
|
||||
`~/dev/qskinny-website`.
|
||||
Otherwise, the script will copy the content to the website repository for
|
||||
uploading (again, paths are hardcoded as of now). So when generating content
|
||||
for the first time, just run the script without any switches, which should
|
||||
generate the website to `~/dev/qskinny-website`.
|
||||
|
||||
```
|
||||
cd ~/dev/qskinny-website
|
||||
bundle exec jekyll serve --livereload
|
||||
```
|
||||
### Testing the website locally
|
||||
|
||||
Then direct your browser to `http://127.0.0.1:4000/`.
|
||||
After having generated the website as described above, go to
|
||||
`~/dev/qskinny-website` and run `jekyll serve --livereload`. This should start
|
||||
a browser at http://127.0.0.1:4000/, which will display the website.
|
||||
|
||||
If all looks good, generate the static HTML website:
|
||||
### Generating the website publicly
|
||||
|
||||
```
|
||||
bundle exec jekyll build
|
||||
```
|
||||
|
||||
### Publishing the website
|
||||
|
||||
Just copy over the generated HTML files to the public website repo and push a
|
||||
new version of the homepage:
|
||||
|
||||
```
|
||||
cp -r _site/* ~/dev/qskinny.github.io/
|
||||
cd ~/dev/qskinny.github.io/
|
||||
git commit -a -m "new version" # you might want to add new files
|
||||
gith push
|
||||
```
|
||||
|
||||
That's it, the new website is now published at https://qskinny.github.io/ .
|
||||
When the command line switch `-publish` is used, the script will automatically
|
||||
generate a new version of the homepage and publish it at
|
||||
https://qskinny.github.io . This wil only work with the proper user rights of
|
||||
course.
|
||||
|
|
|
@ -10,7 +10,7 @@ QSkinny is a UI framework based on the Qt graphic stack and written in
|
|||
{cpp}. It allows users to write their UIs in {cpp} and/or QML.
|
||||
|
||||
.The Fendt Tractor GUI
|
||||
image::https://www.fendt.com/de/images/5d19bb4e7b260601c8134e14_1673943667_web_de-DE.jpg[Fendt Tractor GUI]
|
||||
image::https://camo.githubusercontent.com/3eea80daf41ce6a86f08c73353d05000363c4df0/68747470733a2f2f7777772e66656e64742e636f6d2f696e742f67656e6576612d6173736574732f7769646765742f32383239312f6e6577732d332d6c6f772e6a7067[Fendt Tractor GUI]
|
||||
|
||||
It is currently being used in the Fendt Tractor GUI project, see the
|
||||
picture above. For the Fendt Tractor GUI there is no QML used at all;
|
||||
|
@ -18,4 +18,4 @@ the whole codebase is written in {cpp}. An overview of how QSkinny fits
|
|||
into the Qt architecture is depicted below:
|
||||
|
||||
.QSkinny sits on top of QtQuick, while QML is optional
|
||||
image::/doc/tutorials/images/architecture-simple.png[QSkinny architecture]
|
||||
image::../images/architecture-simple.png[QSkinny architecture]
|
||||
|
|
|
@ -157,7 +157,7 @@ int main( int argc, char* argv[] )
|
|||
|
||||
Now the app is displaying the two buttons:
|
||||
|
||||
image::/doc/tutorials/images/writing-first-application.png[An app showing two buttons]
|
||||
image::../images/writing-first-application.png[An app showing two buttons]
|
||||
|
||||
That's it; you just created a QSkinny application from scratch.
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ text width (which itself depends on the font) and possibly padding and
|
|||
margins:
|
||||
|
||||
.implicit horizontal size hint of a button
|
||||
image::/doc/tutorials/images/size-hints-calculation.png[implicit horizontal size hint of a button]
|
||||
image::../images/size-hints-calculation.png[implicit horizontal size hint of a button]
|
||||
|
||||
The implicit width of a composited UI element containing a
|
||||
graphic on the left and a text on the right would be the sum of the elements’
|
||||
|
@ -75,7 +75,7 @@ label1->setBackgroundColor( Qt::magenta );
|
|||
....
|
||||
|
||||
.control without explicit size hint
|
||||
image::/doc/tutorials/images/size-hints-1.png[Image without explicit size hint]
|
||||
image::../images/size-hints-1.png[Image without explicit size hint]
|
||||
|
||||
If we set an explicit size hint of 150x60 pixels ourselves for the
|
||||
preferred size, the control will be rendered differently:
|
||||
|
@ -85,7 +85,7 @@ label1->setExplicitSizeHint( Qt::PreferredSize, { 150, 60 } );
|
|||
....
|
||||
|
||||
.control with explicit size hint
|
||||
image::/doc/tutorials/images/size-hints-2.png[Image with explicit size hint]
|
||||
image::../images/size-hints-2.png[Image with explicit size hint]
|
||||
|
||||
When dealing with standard controls or layouts, the size hints don’t
|
||||
need to be specified explicitly, as it can be deduced from its standard
|
||||
|
@ -185,14 +185,14 @@ By default the width of the buttons is determined by its text plus its
|
|||
margins:
|
||||
|
||||
.Size policies with preferred size
|
||||
image::/doc/tutorials/images/size-policies-horizontal-minimum-1.png[Fixed vs. Minimum size policy]
|
||||
image::../images/size-policies-horizontal-minimum-1.png[Fixed vs. Minimum size policy]
|
||||
|
||||
After growing the window horizontally, the button with the Fixed
|
||||
horizontal size policy keeps its width, while the button with the
|
||||
Minimum policy will grow:
|
||||
|
||||
.Size policies when increasing window width
|
||||
image::/doc/tutorials/images/size-policies-horizontal-minimum-2.png[Fixed vs. Minimum size policy]
|
||||
image::../images/size-policies-horizontal-minimum-2.png[Fixed vs. Minimum size policy]
|
||||
|
||||
When shrinking the window below its original size, both buttons stay
|
||||
with their width: The one on the left because of its `Fixed` size policy,
|
||||
|
@ -200,7 +200,7 @@ and the one on the right because it won’t shrink below its original size
|
|||
due to the `Minimum` size policy.
|
||||
|
||||
.Size policies when shrinking window width
|
||||
image::/doc/tutorials/images/size-policies-horizontal-minimum-3.png[Fixed vs. Minimum size policy]
|
||||
image::../images/size-policies-horizontal-minimum-3.png[Fixed vs. Minimum size policy]
|
||||
|
||||
If we change the policy of the right button to `Preferred`, it will shrink
|
||||
below its original size (even though the text is too wide now):
|
||||
|
@ -211,7 +211,7 @@ label2->setText( "size policy: preferred" );
|
|||
....
|
||||
|
||||
.Size policies when changing to preferred size policy
|
||||
image::/doc/tutorials/images/size-policies-horizontal-minimum-4.png[Fixed vs. Minimum size policy]
|
||||
image::../images/size-policies-horizontal-minimum-4.png[Fixed vs. Minimum size policy]
|
||||
|
||||
=== Types of layouts
|
||||
|
||||
|
@ -240,7 +240,7 @@ horizontalBox->addItem( label3 );
|
|||
....
|
||||
|
||||
.Horizontal layout
|
||||
image::/doc/tutorials/images/layout-horizontal.png[Horizontal layout]
|
||||
image::../images/layout-horizontal.png[Horizontal layout]
|
||||
|
||||
[source]
|
||||
....
|
||||
|
@ -258,7 +258,7 @@ verticalBox->addItem( label3 );
|
|||
....
|
||||
|
||||
.Vertical layout
|
||||
image::/doc/tutorials/images/layout-vertical.png[Vertical layout]
|
||||
image::../images/layout-vertical.png[Vertical layout]
|
||||
|
||||
==== Grid layouts (QskGridBox)
|
||||
|
||||
|
@ -292,7 +292,7 @@ gridBox->addItem( label7, 2, 1, 1, 2 );
|
|||
....
|
||||
|
||||
.Grid layout
|
||||
image::/doc/tutorials/images/layout-grid.png[Grid layout]
|
||||
image::../images/layout-grid.png[Grid layout]
|
||||
|
||||
==== Stack layouts (QskStackBox)
|
||||
|
||||
|
@ -321,7 +321,7 @@ stackBox->setCurrentIndex( 2 );
|
|||
....
|
||||
|
||||
.Stack layout (symbolized)
|
||||
image::/doc/tutorials/images/layout-stack.png[Stack layout]
|
||||
image::../images/layout-stack.png[Stack layout]
|
||||
|
||||
In this example, "control 3" is stacked on top of the blue and the
|
||||
cyan control. Controls in a stacked layout can be of different sizes.
|
||||
|
@ -366,19 +366,19 @@ When the layout has all the space it needs (but not more), both elements
|
|||
are rendered with their preferred size:
|
||||
|
||||
.Stretch factors with preferred size
|
||||
image::/doc/tutorials/images/stretch-factors-1.png[Stretch factors preferred size]
|
||||
image::../images/stretch-factors-1.png[Stretch factors preferred size]
|
||||
|
||||
When the layout gets more width, the stretch factors come into play:
|
||||
|
||||
.A stretch factor of 1:2
|
||||
image::/doc/tutorials/images/stretch-factors-2.png[Stretch factors increasing width]
|
||||
image::../images/stretch-factors-2.png[Stretch factors increasing width]
|
||||
|
||||
No matter how wide the layout is, the aspect ratio of 1:2 will always be
|
||||
kept, meaning that the label on the left will get 33% of the space, and
|
||||
the label on the right 67%:
|
||||
|
||||
.A stretch factor of 1:2 with different widths
|
||||
image::/doc/tutorials/images/stretch-factors-3.png[Stretch factors even more width]
|
||||
image::../images/stretch-factors-3.png[Stretch factors even more width]
|
||||
|
||||
Stretch factors in QSkinny are the same as in the Qt Graphics View
|
||||
Framework, see
|
||||
|
@ -392,7 +392,7 @@ each other. The example below depicts a UI with a top bar and menu items
|
|||
on the left:
|
||||
|
||||
.A UI with nested layouts
|
||||
image::/doc/tutorials/images/nesting-layouts.png[Nested layouts]
|
||||
image::../images/nesting-layouts.png[Nested layouts]
|
||||
|
||||
The code to produce the above UI could look like this (setting colors
|
||||
etc. omitted for brevity):
|
||||
|
@ -428,7 +428,7 @@ with the menu buttons is again a vertical layout.
|
|||
The following diagram makes the layouts visible:
|
||||
|
||||
.The layout structure of the UI
|
||||
image::/doc/tutorials/images/nesting-layouts-architecture.png[Nested layouts architecture]
|
||||
image::../images/nesting-layouts-architecture.png[Nested layouts architecture]
|
||||
|
||||
=== Anchoring in QSkinny
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ skinlet, and therefore it will read information from both the control
|
|||
itself as well as read the skin hints from the skin:
|
||||
|
||||
.Skinlets query the control and the skin
|
||||
image::/doc/tutorials/images/skins-1.png[Styling controls]
|
||||
image::../images/skins-1.png[Styling controls]
|
||||
|
||||
For instance, a button skinlet will read the margins from the skin and
|
||||
the text to render from the button.
|
||||
|
@ -44,10 +44,10 @@ has a traditional desktop skin, the other is a flat button with a skin
|
|||
often found in mobile devices.
|
||||
|
||||
.desktop style button
|
||||
image::/doc/tutorials/images/skinlets-button-1.png[desktop style button]
|
||||
image::../images/skinlets-button-1.png[desktop style button]
|
||||
|
||||
.flat button
|
||||
image::/doc/tutorials/images/skinlets-button-2.png[flat button]
|
||||
image::../images/skinlets-button-2.png[flat button]
|
||||
|
||||
=== Skin hints
|
||||
|
||||
|
@ -85,7 +85,7 @@ public:
|
|||
....
|
||||
|
||||
.A button styled with skin hints
|
||||
image::/doc/tutorials/images/skin-hints.png[Button with skin hints]
|
||||
image::../images/skin-hints.png[Button with skin hints]
|
||||
|
||||
When writing a new skin, a developer needs to know which hints to set
|
||||
for which control. This usually depends on the control itself; however,
|
||||
|
@ -154,10 +154,10 @@ public:
|
|||
....
|
||||
|
||||
.button in normal state
|
||||
image::/doc/tutorials/images/skin-hints-states-1.png[button in normal state]
|
||||
image::../images/skin-hints-states-1.png[button in normal state]
|
||||
|
||||
.button in hovered state
|
||||
image::/doc/tutorials/images/skin-hints-states-2.png[button in hovered state]
|
||||
image::../images/skin-hints-states-2.png[button in hovered state]
|
||||
|
||||
==== Local skin hints
|
||||
|
||||
|
@ -181,7 +181,7 @@ Taking animations and local skin hints into account, the architecture
|
|||
diagram now looks like this:
|
||||
|
||||
.Skinlets can also read from local skinlets and animators
|
||||
image::/doc/tutorials/images/skins-2.png[Animators and local skin hints]
|
||||
image::../images/skins-2.png[Animators and local skin hints]
|
||||
|
||||
=== Skinlets
|
||||
|
||||
|
@ -214,7 +214,7 @@ different skinlets, so a more complete version of the architecture
|
|||
diagram looks like this:
|
||||
|
||||
.There is one skinlet for each atomic control
|
||||
image::/doc/tutorials/images/skins-3.png[Animators and local skin hints]
|
||||
image::../images/skins-3.png[Animators and local skin hints]
|
||||
|
||||
=== Skin factories and switching between skins
|
||||
|
||||
|
@ -298,8 +298,8 @@ Switching between skins will change the look of `QskPushButton`
|
|||
instances:
|
||||
|
||||
.button in `MySkin` (as above)
|
||||
image::/doc/tutorials/images/skin-hints-states-1.png[button in normal state]
|
||||
image::../images/skin-hints-states-1.png[button in normal state]
|
||||
|
||||
.button in `OtherSkin`
|
||||
image::/doc/tutorials/images/skin-factory.png[Styling controls]
|
||||
image::../images/skin-factory.png[Styling controls]
|
||||
|
||||
|
|