diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 7d0217442..7e3e68064 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -380,7 +380,7 @@ jobs: QT_DEBUG_PLUGINS: "1" run: | echo "starting iotdashboard" - DYLD_LIBRARY_PATH=./qskinny_install/lib:./qskinny_install/plugins/skins ./qskinny_build/examples/bin/iotdashboard.app/Contents/MacOS/iotdashboard -qwindowgeometry 1024x600+75+100 --screenshot ${{ matrix.config.screenshot_filename }} & + DYLD_LIBRARY_PATH=./qskinny_install/lib:./qskinny_install/plugins/skins:./qskinny_build/support ./qskinny_build/examples/bin/iotdashboard.app/Contents/MacOS/iotdashboard -qwindowgeometry 1024x600+75+100 --screenshot ${{ matrix.config.screenshot_filename }} & sleep 10 # TODO remove 'qskinny_build\skins\material3\Release' when skin install is fixed @@ -389,7 +389,7 @@ jobs: env: QT_DEBUG_PLUGINS: "1" run: | - $env:Path += ";./qskinny_install/bin;./qskinny_install/lib;./qskinny_install/plugins/skins;./qskinny_build/skins/material3/Release;./qskinny_build/skins/windows/Release;./qskinny_build/skins/squiek/Release" + $env:Path += ";./qskinny_install/bin;./qskinny_install/lib;./qskinny_install/plugins/skins;./qskinny_build/skins/material3/Release;./qskinny_build/skins/windows/Release;./qskinny_build/skins/squiek/Release;./qskinny_build/support" echo "starting iotdashboard" Start-Process qskinny_build\examples\bin\Release\iotdashboard.exe -ArgumentList "-qwindowgeometry 1024x600+0+0 --screenshot ${{ matrix.config.screenshot_filename }}" Start-Sleep -Seconds 10 diff --git a/src/controls/QskSkin.cpp b/src/controls/QskSkin.cpp index 416f7a0a2..aab355dbc 100644 --- a/src/controls/QskSkin.cpp +++ b/src/controls/QskSkin.cpp @@ -344,8 +344,16 @@ void QskSkin::completeFontTable() continue; } + #define QFONT_WEIGHT_MIN 1 + #if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) + #define QFONT_WEIGHT_MAX 99 + #else + // https://codebrowser.dev/qt6/qtbase/src/gui/text/qfont_p.h.html#34 + #define QFONT_WEIGHT_MAX 1000 + #endif + int weight = normalFont.weight() + ( j - 2 ) * 100; - weight = qBound( 0, weight, 900 ); + weight = qBound( QFONT_WEIGHT_MIN, weight, QFONT_WEIGHT_MAX ); auto font = normalFont; font.setWeight( static_cast< QFont::Weight >( weight ) ); diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt index 7d0054446..3b3a5a14e 100644 --- a/support/CMakeLists.txt +++ b/support/CMakeLists.txt @@ -55,7 +55,10 @@ if(HIDE_SYSTEM_FONTS) @ONLY NEWLINE_STYLE LF) target_compile_definitions(${target} - PRIVATE FONTCONFIG_FILE=${QSK_FONTCONF_FILE}) + PRIVATE + FONTCONFIG_FILE=${QSK_FONTCONF_FILE} + FONTCONFIG_PATH=${QSK_FONTCACHEDIR} + QSK_FONTCONFIG_ASSERT) endif() set_target_properties(${target} PROPERTIES FOLDER libs) diff --git a/support/SkinnyNamespace.cpp b/support/SkinnyNamespace.cpp index ec0d95bc4..77976289c 100644 --- a/support/SkinnyNamespace.cpp +++ b/support/SkinnyNamespace.cpp @@ -84,6 +84,9 @@ static bool pluginPath = initPluginPath(); #if defined( ENSURE_FONTS ) + #include + #include + #if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) #include #include @@ -112,22 +115,46 @@ static bool pluginPath = initPluginPath(); if ( !qobject_cast< QGuiApplication* >( qApp ) ) return; // no fonts needed - #ifdef FONTCONFIG_FILE +#ifdef FONTCONFIG_FILE + { const char env[] = "FONTCONFIG_FILE"; if ( !qEnvironmentVariableIsSet( env ) ) qputenv( env, STRING( FONTCONFIG_FILE ) ); - #endif - preloadFonts(); + std::cout << "FONTCONFIG_FILE: " << qgetenv(env).toStdString() <<'\n'; + } +#endif + +#ifdef FONTCONFIG_PATH + { + const char env[] = "FONTCONFIG_PATH"; + if ( !qEnvironmentVariableIsSet( env ) ) + qputenv( env, STRING( FONTCONFIG_PATH ) ); - /* - The default initialization in QskSkin sets up its font table - with using the application font for the default font role. - */ - QGuiApplication::setFont( QFont( "DejaVuSans", 12 ) ); + std::cout << "FONTCONFIG_PATH: " << qgetenv(env).toStdString() <<'\n'; } #endif + preloadFonts(); + + /* + The default initialization in QskSkin sets up its font table + with using the application font for the default font role. + */ + QGuiApplication::setFont( QFont( "DejaVuSans", 12 ) ); + +// #if ( defined( FONTCONFIG_FILE ) || defined( FONTCONFIG_PATH ) ) && defined( QSK_FONTCONFIG_ASSERT ) + const QString expected = "Roboto"; + const QString actual = QFontInfo( QFont( expected ) ).family(); + const QString message = QString( "Expected '%1' font to be available but instead got '%2'" ) + .arg( expected ) + .arg( actual ); + + Q_ASSERT_X( actual == expected, __func__, message.toStdString().c_str() ); +// #endif +} +#endif + Q_COREAPP_STARTUP_FUNCTION( initFonts ) void Skinny::changeSkin()