main
朱子楚\zhuzi 2023-03-25 13:35:21 +08:00
parent 36d7c714a5
commit a59010ec72
95 changed files with 520 additions and 383 deletions

View File

@ -16,8 +16,8 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [macos-11.0] os: [macos-10.15,macos-11.0]
qt_ver: [6.4.3] qt_ver: [5.15.2]
qt_arch: [clang_64] qt_arch: [clang_64]
env: env:
targetName: example targetName: example
@ -34,8 +34,6 @@ jobs:
with: with:
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
cached: 'false' cached: 'false'
aqtversion: '==2.0.5'
modules: 'qtmultimedia qt5compat qtshadertools'
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
fetch-depth: 1 fetch-depth: 1
@ -51,7 +49,7 @@ jobs:
# 上传artifacts # 上传artifacts
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}} name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}.zip
path: bin/release/${{ env.targetName }}.app path: bin/release/${{ env.targetName }}.app
# tag 上传Release # tag 上传Release
- name: uploadRelease - name: uploadRelease

View File

@ -18,8 +18,8 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ubuntu-20.04] os: [ubuntu-18.04,ubuntu-20.04]
qt_ver: [6.4.3] qt_ver: [5.15.2]
qt_arch: [gcc_64] qt_arch: [gcc_64]
env: env:
targetName: example targetName: example
@ -29,8 +29,6 @@ jobs:
with: with:
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
cached: 'false' cached: 'false'
aqtversion: '==2.0.5'
modules: 'qtmultimedia qt5compat qtshadertools'
- name: ubuntu install GL library - name: ubuntu install GL library
run: sudo apt-get install -y libglew-dev libglfw3-dev qml-module-qtquick-controls qml-module-qtquick-controls2 run: sudo apt-get install -y libglew-dev libglfw3-dev qml-module-qtquick-controls qml-module-qtquick-controls2
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -48,7 +46,7 @@ jobs:
- name: package - name: package
run: | run: |
# make sure Qt plugin finds QML sources so it can deploy the imported files # make sure Qt plugin finds QML sources so it can deploy the imported files
export QML_SOURCES_PATHS=src/.. export QML_SOURCES_PATHS=src
# 拷贝依赖 # 拷贝依赖
linuxdeploy-x86_64.AppImage --plugin=qt --output=appimage --create-desktop-file --icon-file=${targetName}.svg --executable=bin/release/${targetName} --appdir bin/release/ linuxdeploy-x86_64.AppImage --plugin=qt --output=appimage --create-desktop-file --icon-file=${targetName}.svg --executable=bin/release/${targetName} --appdir bin/release/
mv ${{ env.targetName }}-*.AppImage ${{ env.targetName }}.AppImage mv ${{ env.targetName }}-*.AppImage ${{ env.targetName }}.AppImage

87
.github/workflows/windows-mingw.yml vendored Normal file
View File

@ -0,0 +1,87 @@
name: Windows MinGW
on:
push:
paths:
- '*.pro'
- 'src/**'
- '.github/workflows/windows-mingw.yml'
pull_request:
paths:
- '*.pro'
- 'src/**'
- '.github/workflows/windows-mingw.yml'
jobs:
build:
name: Build
runs-on: windows-2019
strategy:
matrix:
include:
- qt_arch: win32_mingw81
qt_ver: 5.15.2
qt_tools: "tools_mingw,8.1.0-1-202004170606,qt.tools.win32_mingw810"
qt_tools_mingw_install: mingw810_32
- qt_arch: win64_mingw81
qt_ver: 5.15.2
qt_tools: "tools_mingw,8.1.0-1-202004170606,qt.tools.win64_mingw810"
qt_tools_mingw_install: mingw810_64
env:
targetName: example.exe
fileName: example
steps:
- name: Install Qt
uses: jurplel/install-qt-action@v2
with:
version: ${{ matrix.qt_ver }}
aqtversion: '==2.0.5'
arch: ${{ matrix.qt_arch }}
tools: ${{ matrix.qt_tools }}
cached: 'false'
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Qt 5 environment configuration
if: ${{ startsWith( matrix.qt_ver, 5 ) }}
shell: pwsh
run: |
Write-Output "${{ env.Qt5_DIR }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
Write-Output "${{ env.Qt5_DIR }}/../../Tools/${{ matrix.qt_tools_mingw_install }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Qt 6 environment configuration
if: ${{ startsWith( matrix.qt_ver, 6 ) }}
shell: pwsh
run: |
Write-Output "${{ env.Qt6_DIR }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
Write-Output "${{ env.Qt6_DIR }}/../../Tools/${{ matrix.qt_tools_mingw_install }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: where is qmake & where is mingw32-make
shell: pwsh
run: |
Get-Command -Name 'qmake' | Format-List
Get-Command -Name 'mingw32-make' | Format-List
- name: mingw-build
id: build
shell: cmd
run: |
qmake
mingw32-make
- name: package
id: package
env:
archiveName: ${{ env.fileName }}-${{ matrix.qt_ver }}-${{ matrix.qt_arch }}
shell: pwsh
run: |
& scripts\windows-mingw-publish.ps1 ${env:archiveName} ${env:targetName}
$name = ${env:archiveName}
echo "::set-output name=packageName::$name"
- uses: actions/upload-artifact@v2
with:
name: ${{ steps.package.outputs.packageName }}
path: ${{ steps.package.outputs.packageName }}
- name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}.zip
asset_name: ${{ steps.package.outputs.packageName }}.zip
tag: ${{ github.ref }}
overwrite: true

View File

@ -22,7 +22,11 @@ jobs:
matrix: matrix:
include: include:
# 5.15.2 参考 https://mirrors.cloud.tencent.com/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5152/ # 5.15.2 参考 https://mirrors.cloud.tencent.com/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5152/
- qt_ver: 6.4.3 - qt_ver: 5.15.2
qt_arch: win32_msvc2019
msvc_arch: x86
qt_arch_install: msvc2019
- qt_ver: 5.15.2
qt_arch: win64_msvc2019_64 qt_arch: win64_msvc2019_64
msvc_arch: x64 msvc_arch: x64
qt_arch_install: msvc2019_64 qt_arch_install: msvc2019_64
@ -38,10 +42,11 @@ jobs:
with: with:
# Version of Qt to install # Version of Qt to install
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
# Target platform for build
# target: ${{ matrix.qt_target }}
arch: ${{ matrix.qt_arch }} arch: ${{ matrix.qt_arch }}
cached: 'false' cached: 'false'
aqtversion: '==2.0.5' aqtversion: '==2.0.5'
modules: 'qtmultimedia qt5compat qtshadertools'
# 拉取代码 # 拉取代码
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:

View File

@ -1,18 +0,0 @@
2023-03-25 01:04:59,289 - aqt.metadata - DEBUG - metadata 11080 Connection to 'https://download.qt.io' failed. Retrying with fallback 'https://mirrors.ukfast.co.uk/sites/qt.io/'.
2023-03-25 01:05:02,429 - aqt.main - ERROR - installer 11080 Failure to connect to https://mirrors.ukfast.co.uk/sites/qt.io/online/qtsdkrepository/windows_x86/desktop/: SSLError
2023-03-25 01:05:33,705 - aqt.metadata - DEBUG - metadata 13956 Connection to 'https://download.qt.io' failed. Retrying with fallback 'https://ftp.jaist.ac.jp/pub/qtproject/'.
2023-03-25 01:05:36,873 - aqt.main - ERROR - installer 13956 Failure to connect to https://ftp.jaist.ac.jp/pub/qtproject/online/qtsdkrepository/windows_x86/desktop/: SSLError
2023-03-25 01:05:48,135 - aqt.metadata - DEBUG - metadata 9728 Connection to 'https://download.qt.io' failed. Retrying with fallback 'https://qtproject.mirror.liquidtelecom.com/'.
2023-03-25 01:05:51,310 - aqt.main - ERROR - installer 9728 Failure to connect to https://qtproject.mirror.liquidtelecom.com/online/qtsdkrepository/windows_x86/desktop/: SSLError
2023-03-25 01:06:43,418 - aqt.helper - DEBUG - helper 9868 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt6_643/Updates.xml.sha256
2023-03-25 01:06:46,616 - aqt.helper - DEBUG - helper 9868 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt6_643/Updates.xml.sha256
2023-03-25 01:06:49,736 - aqt.helper - DEBUG - helper 9868 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt6_643/Updates.xml.sha256
2023-03-25 01:06:52,865 - aqt.helper - DEBUG - helper 9868 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt6_643/Updates.xml.sha256
2023-03-25 01:06:55,983 - aqt.helper - DEBUG - helper 9868 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:00,130 - aqt.helper - DEBUG - helper 10992 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:03,218 - aqt.helper - DEBUG - helper 10992 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:06,359 - aqt.helper - DEBUG - helper 10992 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:09,498 - aqt.helper - DEBUG - helper 10992 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:13,403 - aqt.helper - DEBUG - helper 15548 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:16,530 - aqt.helper - DEBUG - helper 15548 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256
2023-03-25 11:21:19,669 - aqt.helper - DEBUG - helper 15548 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_643/Updates.xml.sha256

View File

@ -1,10 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
import QtMultimedia import FluentUI 1.0
import FluentUI
Window { Window {
id:app id:app

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
FluContentPage { FluContentPage {

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"Buttons" title:"Buttons"

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"Dialog" title:"Dialog"

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"Expander" title:"Expander"

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"InfoBar" title:"InfoBar"

View File

@ -1,9 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
@ -21,7 +21,10 @@ FluScrollablePage{
} }
FluMediaPlayer{ FluMediaPlayer{
source:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" source:{
console.debug("-------------->")
return "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
}
} }
} }

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"Progress" title:"Progress"

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{
title:"Rectangle" title:"Rectangle"

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{ FluScrollablePage{

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
FluContentPage { FluContentPage {

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
FluContentPage { FluContentPage {
title: "Typography" title: "Typography"
property int textSize: 13 property int textSize: 13
Component.onCompleted: {
slider.seek(31)
}
ScrollView{ ScrollView{
clip: true clip: true
width: parent.width width: parent.width
@ -72,7 +68,6 @@ FluContentPage {
FluSlider{ FluSlider{
id:slider
orientation:FluSlider.Vertical orientation:FluSlider.Vertical
anchors{ anchors{
right: parent.right right: parent.right
@ -83,6 +78,7 @@ FluContentPage {
onValueChanged:{ onValueChanged:{
textSize = value/100*16+8 textSize = value/100*16+8
} }
value: 31
} }
} }

View File

@ -1,5 +1,5 @@
QT += quick quickcontrols2 concurrent network multimedia core5compat QT += quick concurrent network multimedia
CONFIG += c++17 CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS QT_NO_WARNING_OUTPUT DEFINES += QT_DEPRECATED_WARNINGS QT_NO_WARNING_OUTPUT
@ -30,10 +30,18 @@ win32 {
contains(QT_ARCH, i386) { contains(QT_ARCH, i386) {
COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/Win_x86/*.dll) $$DESTDIR COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/Win_x86/*.dll) $$DESTDIR
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, \\) contains(QMAKE_CC, cl) {
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, \\)
} else {
QMAKE_PRE_LINK += $$QMAKE_COPY $$COPYDLL
}
} else { } else {
COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/Win_x64/*.dll) $$DESTDIR COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/Win_x64/*.dll) $$DESTDIR
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, \\) contains(QMAKE_CC, cl) {
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, \\)
} else {
QMAKE_PRE_LINK += $$QMAKE_COPY $$COPYDLL
}
} }
} }

View File

@ -3,7 +3,6 @@
#include <QQmlContext> #include <QQmlContext>
#include <QDir> #include <QDir>
#include <QQuickWindow> #include <QQuickWindow>
#include <QQuickStyle>
#include <QProcess> #include <QProcess>
#include "ChatController.h" #include "ChatController.h"
@ -18,7 +17,8 @@ int main(int argc, char *argv[])
QCoreApplication::setOrganizationName("ZhuZiChu"); QCoreApplication::setOrganizationName("ZhuZiChu");
QCoreApplication::setOrganizationDomain("https://zhuzichu520.github.io"); QCoreApplication::setOrganizationDomain("https://zhuzichu520.github.io");
QCoreApplication::setApplicationName("FluentUI"); QCoreApplication::setApplicationName("FluentUI");
QQuickStyle::setStyle("Basic"); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
// QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);
QGuiApplication app(argc, argv); QGuiApplication app(argc, argv);
QQmlApplicationEngine engine; QQmlApplicationEngine engine;

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI import FluentUI 1.0
FluWindow { FluWindow {

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
import Controller import Controller 1.0
import QtQuick.Dialogs 1.3
FluWindow { FluWindow {

View File

@ -1,7 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Layouts 1.15
import QtQuick.Layouts import FluentUI 1.0
import FluentUI
FluWindow { FluWindow {

View File

@ -1,9 +1,10 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtGraphicalEffects 1.15
import FluentUI import FluentUI 1.0
FluWindow { FluWindow {
id:rootwindow id:rootwindow

View File

@ -0,0 +1,35 @@
[CmdletBinding()]
param (
[string] $archiveName, [string] $targetName
)
# 外部环境变量包括:
# archiveName: ${{ matrix.qt_ver }}-${{ matrix.qt_arch }}
# archiveName: 5.15.2-win64_mingw81
$scriptDir = $PSScriptRoot
$currentDir = Get-Location
Write-Host "currentDir" $currentDir
Write-Host "scriptDir" $scriptDir
function Main() {
New-Item -ItemType Directory $archiveName
# 拷贝exe
Copy-Item bin\release\* $archiveName\
# 拷贝依赖
windeployqt --qmldir . --plugindir $archiveName\plugins --no-translations --compiler-runtime $archiveName\$targetName
# 删除不必要的文件
$excludeList = @("*.qmlc", "*.ilk", "*.exp", "*.lib", "*.pdb")
Remove-Item -Path $archiveName -Include $excludeList -Recurse -Force
# 打包zip
Compress-Archive -Path $archiveName $archiveName'.zip'
}
if ($null -eq $archiveName || $null -eq $targetName) {
Write-Host "args missing, archiveName is" $archiveName ", targetName is" $targetName
return
}
Main

View File

@ -1,5 +1,5 @@
QT += qml quick svg QT += qml quick svg multimedia network
CONFIG += plugin c++17 CONFIG += plugin c++11
TEMPLATE = lib TEMPLATE = lib
TARGET = FluentUI TARGET = FluentUI
TARGET = $$qtLibraryTarget($$TARGET) TARGET = $$qtLibraryTarget($$TARGET)

View File

@ -4,8 +4,6 @@
#include <QScreen> #include <QScreen>
#include <QWindow> #include <QWindow>
#include <FluTheme.h> #include <FluTheme.h>
#pragma comment(lib, "User32.lib")
#include <windows.h>
class FramelessViewPrivate class FramelessViewPrivate
{ {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import "content" import "content"
Rectangle { Rectangle {

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Grid { Grid {
id: root id: root
property int cellSide: 5 property int cellSide: 5

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Item { Item {
property int cursorHeight: 7 property int cursorHeight: 7

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Row { Row {
property alias caption: captionBox.text property alias caption: captionBox.text

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Rectangle { Rectangle {
width : 40; height : 15; radius: 2 width : 40; height : 15; radius: 2

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Item { Item {
id: root id: root
@ -50,12 +50,20 @@ Item {
y: r y: r
function handleMouse(mouse) { function handleMouse(mouse) {
if (mouse.buttons & Qt.LeftButton) { if (mouse.buttons & Qt.LeftButton) {
pickerCursor.x = Math.max(0,Math.min(mouse.x - r,width-2*r)); pickerCursor.x = Math.max(0,Math.min(mouse.x - r,width-2*r));
pickerCursor.y = Math.max(0,Math.min(mouse.y - r,height-2*r)); pickerCursor.y = Math.max(0,Math.min(mouse.y - r,height-2*r));
// pickerCursor.x = Math.max(-r,Math.min(mouse.x - r,width+r));
// pickerCursor.y = Math.max(-r,Math.min(mouse.y - r,height+r));
// pickerCursor.x = Math.max(0, Math.min(width, mouse.x) - 2 * r);
// pickerCursor.y = Math.max(0, Math.min(height, mouse.y) - 2 * r);
} }
} }
onPositionChanged:(mouse)=> handleMouse(mouse) onPositionChanged: handleMouse(mouse)
onPressed:(mouse)=> handleMouse(mouse) onPressed: handleMouse(mouse)
} }
} }

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI import FluentUI 1.0
Rectangle{ Rectangle{
@ -15,10 +15,11 @@ Rectangle{
} }
visible: FluTheme.isFrameless visible: FluTheme.isFrameless
height: visible ? 34 : 0 height: visible ? 34 : 0
width: { width: {
if(root.parent) if(parent==null)
return root.parent.width return 200
return 200 return parent.width
} }
z: 65535 z: 65535
clip: true clip: true

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Rectangle { Rectangle {
radius: 4 radius: 4

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
TextField{ TextField{

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Rectangle{ Rectangle{

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
Rectangle { Rectangle {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
Button{ Button{

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
import "../colorpicker" import "../colorpicker"
Item { Item {

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Window import QtQuick.Window 2.15
Popup { Popup {
id: popup id: popup
@ -22,8 +22,7 @@ Popup {
modal:true modal:true
anchors.centerIn: Overlay.overlay anchors.centerIn: Overlay.overlay
closePolicy: Popup.CloseOnEscape closePolicy: Popup.CloseOnEscape
background:Item{} background: Rectangle {
contentItem: Rectangle {
id:layout_content id:layout_content
implicitWidth:minWidth implicitWidth:minWidth
implicitHeight: text_title.height + text_message.height + layout_actions.height implicitHeight: text_title.height + text_message.height + layout_actions.height

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
Rectangle { Rectangle {

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Rectangle { Rectangle {

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Button { Button {
id: control id: control

View File

@ -1,12 +1,12 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Item { Item {
id:root id:root
anchors.fill: parent anchors.fill: parent
anchors.margins: -3 anchors.margins: -3
property int radius: 4 property var radius: 4
Rectangle{ Rectangle{
width: root.width width: root.width

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Text { Text {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,6 +1,5 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import FluentUI 1.0
import FluentUI
FluObject { FluObject {
id:infoBar id:infoBar

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtMultimedia import QtMultimedia 5.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
import FluentUI import FluentUI 1.0
Item { Item {
id:control id:control
@ -20,30 +20,30 @@ Item {
MediaPlayer { MediaPlayer {
id: mediaplayer id: mediaplayer
property bool autoSeek:true property bool autoSeek:true
autoPlay: true
source: control.source source: control.source
videoOutput: video_output onError: {
onErrorOccurred: { console.debug(error)
} }
onPositionChanged: { onPositionChanged: {
if(autoSeek){ if(autoSeek){
slider.seek(mediaplayer.position*slider.maxValue/mediaplayer.duration) slider.seek(mediaplayer.position*slider.maxValue/mediaplayer.duration)
} }
} }
onMediaStatusChanged: { onStatusChanged: {
if(mediaStatus===6){ if(status===6){
slider.maxValue = mediaplayer.duration slider.maxValue = mediaplayer.duration
} }
} }
} }
onSourceChanged: { onSourceChanged: {
slider.seek(0) slider.seek(0)
mediaplayer.play()
} }
VideoOutput { VideoOutput {
id:video_output
anchors.fill: parent anchors.fill: parent
source: mediaplayer
} }
Item{ Item{
@ -78,7 +78,7 @@ Item {
mediaplayer.autoSeek = false mediaplayer.autoSeek = false
} }
onReleased: { onReleased: {
mediaplayer.position = value*mediaplayer.duration/slider.maxValue mediaplayer.seek(value*mediaplayer.duration/slider.maxValue)
mediaplayer.autoSeek = true mediaplayer.autoSeek = true
} }
} }
@ -106,14 +106,14 @@ Item {
FluIconButton{ FluIconButton{
iconSize: 15 iconSize: 15
iconSource: mediaplayer.playbackState === MediaPlayer.PlayingState ? FluentIcons.Pause : FluentIcons.Play iconSource: mediaplayer.playbackState === Audio.PlayingState ? FluentIcons.Pause : FluentIcons.Play
anchors{ anchors{
horizontalCenter: parent.horizontalCenter horizontalCenter: parent.horizontalCenter
bottom: parent.bottom bottom: parent.bottom
bottomMargin: 10 bottomMargin: 10
} }
onClicked: { onClicked: {
if(mediaplayer.playbackState === MediaPlayer.PlayingState){ if(mediaplayer.playbackState === Audio.PlayingState){
mediaplayer.pause() mediaplayer.pause()
}else{ }else{
mediaplayer.play() mediaplayer.play()

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
Menu { Menu {
id: popup id: popup

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
Item { Item {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
TextArea{ TextArea{

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI
import FluentUI 1.0
Item { Item {

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls
QtObject { QtObject {
id:flu_object; id:flu_object;
default property list<QtObject> children; default property list<QtObject> children;
} }

View File

@ -1,5 +1,4 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls
QtObject { QtObject {
property string title property string title

View File

@ -1,5 +1,4 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls
QtObject { QtObject {
property string title property string title

View File

@ -1,5 +1,4 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls
QtObject { QtObject {

View File

@ -1,12 +1,12 @@
import QtQuick import QtQuick 2.12
import QtQuick.Controls import QtQuick.Controls 2.12
FluRectangle { FluRectangle {
id: control id: control
width: 150 width: 150
height: 5 height: 5
radius: [2.5,2.5,2.5,2.5] radius: [3,3,3,3]
clip: true clip: true
color: FluTheme.isDark ? Qt.rgba(41/255,41/255,41/255,1) : Qt.rgba(214/255,214/255,214/255,1) color: FluTheme.isDark ? Qt.rgba(41/255,41/255,41/255,1) : Qt.rgba(214/255,214/255,214/255,1)
property real progress: 0.5 property real progress: 0.5
@ -24,7 +24,7 @@ FluRectangle {
Rectangle{ Rectangle{
id:bar id:bar
radius: 2.5 radius: 3
width: control.width*progress width: control.width*progress
height: control.height height: control.height
color:FluTheme.isDark ? FluTheme.primaryColor.lighter : FluTheme.primaryColor.dark color:FluTheme.isDark ? FluTheme.primaryColor.lighter : FluTheme.primaryColor.dark

View File

@ -1,5 +1,6 @@
import QtQuick import QtQuick 2.12
import QtQuick.Controls import QtQuick.Controls 2.12
Rectangle { Rectangle {
id: control id: control

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
Item{ Item{
id:root id:root

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
ScrollBar { ScrollBar {

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Item { Item {

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick 2.15
Item { Item {
id:root id:root

View File

@ -1,10 +1,12 @@
import QtQuick import QtQuick 2.12
import QtQuick.Controls import QtQuick.Controls 2.12
import QtGraphicalEffects 1.15
Item{ Item{
id:root id:root
property int lineSize: 4
property int size: 180 property int size: 180
property int dotSize: 24 property int dotSize: 24
@ -36,18 +38,19 @@ Item{
seek(0) seek(0)
} }
Rectangle { FluRectangle {
id: control id: control
width: isHorizontal ? size : 4 width: isHorizontal ? size : root.lineSize
height: isHorizontal ? 4 : size height: isHorizontal ? root.lineSize : size
radius: 2 radius: [3,3,3,3]
clip: true
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color:FluTheme.isDark ? Qt.rgba(162/255,162/255,162/255,1) : Qt.rgba(138/255,138/255,138/255,1) color:FluTheme.isDark ? Qt.rgba(162/255,162/255,162/255,1) : Qt.rgba(138/255,138/255,138/255,1)
Rectangle{ Rectangle{
id:rect id:rect
radius: 2.5 radius: 3
width: isHorizontal ? control.width*(value/maxValue) : 5 width: isHorizontal ? control.width*(value/maxValue) : control.width
height: isHorizontal ? 5 : control.height*(value/maxValue) height: isHorizontal ? control.height : control.height*(value/maxValue)
color:FluTheme.isDark ? FluTheme.primaryColor.lighter :FluTheme.primaryColor.dark color:FluTheme.isDark ? FluTheme.primaryColor.lighter :FluTheme.primaryColor.dark
} }
} }
@ -109,6 +112,7 @@ Item{
} }
function seek(position){ function seek(position){
console.debug(position)
if(isHorizontal){ if(isHorizontal){
dot.x =position/maxValue*control.width - dotSize/2 dot.x =position/maxValue*control.width - dotSize/2
root.value = Qt.binding(function(){ root.value = Qt.binding(function(){

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import FluentUI import FluentUI 1.0
Text { Text {

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
TextField{ TextField{

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import Qt5Compat.GraphicalEffects import QtGraphicalEffects 1.15
Rectangle{ Rectangle{
id:content id:content

View File

@ -1,6 +1,6 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
Button { Button {

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Window import QtQuick.Window 2.15
import FluentUI import FluentUI 1.0
Rectangle { Rectangle {

View File

@ -1,7 +1,7 @@
import QtQuick import QtQuick 2.0
import QtQuick.Controls import QtQuick.Controls 2.0
import FluentUI import FluentUI 1.0
import QtQuick.Layouts import QtQuick.Layouts 1.15
Button { Button {

View File

@ -1,6 +1,7 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import QtGraphicalEffects 1.15
import FluentUI 1.0
ToolTip { ToolTip {
id:tool_tip id:tool_tip

View File

@ -1,8 +1,9 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
import QtQuick.Layouts import QtQuick.Layouts 1.15
import QtQuick.Controls import QtQuick.Controls 2.15
import FluentUI import FluentUI 1.0
import QtGraphicalEffects 1.15
Item { Item {
id:root id:root

View File

@ -1,8 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import QtQuick.Window 2.15
import QtQuick.Window import QtQuick.Layouts 1.15
import QtQuick.Layouts import FluentUI 1.0
import FluentUI import QtGraphicalEffects 1.15
Item { Item {
@ -127,19 +127,19 @@ Item {
root: root root: root
} }
function showSuccess(text,duration=1000,moremsg){ function showSuccess(text,duration,moremsg){
infoBar.showSuccess(text,duration,moremsg); infoBar.showSuccess(text,duration,moremsg);
} }
function showInfo(text,duration=1000,moremsg){ function showInfo(text,duration,moremsg){
infoBar.showInfo(text,duration,moremsg); infoBar.showInfo(text,duration,moremsg);
} }
function showWarning(text,duration=1000,moremsg){ function showWarning(text,duration,moremsg){
infoBar.showWarning(text,duration,moremsg); infoBar.showWarning(text,duration,moremsg);
} }
function showError(text,duration=1000,moremsg){ function showError(text,duration,moremsg){
infoBar.showError(text,duration,moremsg); infoBar.showError(text,duration,moremsg);
} }

View File

@ -1,5 +1,5 @@
import QtQuick import QtQuick 2.15
import QtQuick.Window import QtQuick.Window 2.15
MouseArea { MouseArea {

View File

@ -1,7 +1,8 @@
import QtQuick import QtQuick 2.15
import QtQuick.Controls import FluentUI 1.0
import FluentUI
/*! TODO */
Item { Item {
id: toou2d_fps id: toou2d_fps
width: contentItemLoader.width + 5; width: contentItemLoader.width + 5;