CMakeList and RibbonTitleBar: Optimization and bug fix.

This commit is contained in:
Mentalflow 2024-03-09 23:23:12 +08:00
parent bcf9a3e03a
commit 8275fe1093
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
10 changed files with 36 additions and 4863 deletions

View File

@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 3.16)
project(RibbonUI_Project VERSION 1.0.2 LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Core)
set(QT_SDK_DIR ${Qt6_DIR}/../../..)
cmake_path(SET QT_SDK_DIR NORMALIZE ${QT_SDK_DIR})
option(RIBBONUI_BUILD_EXAMPLES "Build RibbonUI APP." ON)
option(RIBBONUI_BUILD_FRAMELESSHEPLER "Build FramelessHelper." ON)
option(RIBBONUI_BUILD_STATIC_LIB "Build RibbonUI static library." OFF)
@ -18,10 +22,15 @@ if (RIBBONUI_BUILD_FRAMELESSHEPLER)
add_subdirectory(3rdparty/framelesshelper)
endif()
if(NOT RIBBONUI_QML_PLUGIN_DIRECTORY)
set(RIBBONUI_QML_PLUGIN_DIRECTORY ${QT_SDK_DIR}/qml/RibbonUI CACHE PATH "RibbonUI Plugin Path")
endif()
add_subdirectory(lib_source)
message("---------------------------- RibbonUI ----------------------------")
message("Build RibbonUI APP: ${RIBBONUI_BUILD_EXAMPLES}")
message("Build FramelessHelper: ${RIBBONUI_BUILD_FRAMELESSHEPLER}")
message("Build RibbonUI static library: ${RIBBONUI_BUILD_STATIC_LIB}")
message("RibbonUI QML Plugin Path: ${RIBBONUI_QML_PLUGIN_DIRECTORY}")
message("------------------------------------------------------------------")

View File

@ -2,9 +2,17 @@ cmake_minimum_required(VERSION 3.21)
project(RibbonUIAPP VERSION ${CMAKE_PROJECT_VERSION} LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
qt_standard_project_setup()
qt_policy(SET QTP0001 NEW)
else()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
endif()
if(APPLE)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()

View File

@ -19,17 +19,10 @@ int main(int argc, char *argv[])
#endif
FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial);
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
#ifdef Q_OS_MACOS
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur,false);
#endif
QQmlApplicationEngine engine;
FramelessHelper::Quick::registerTypes(&engine);
#ifdef RIBBONUI_BUILD_STATIC_LIB
engine.addImportPath("qrc:/");
#endif
const QUrl url(u"qrc:/qt/qml/RibbonUIAPP/example.qml"_qs);
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {

View File

@ -573,7 +573,7 @@ RibbonWindow {
}
}
Image {
source: "qrc:/RibbonUI/resources/imgs/icon.png"
source: "qrc:/qt/qml/RibbonUI/resources/imgs/icon.png"
fillMode:Image.PreserveAspectFit
Layout.preferredHeight: 300
Layout.preferredWidth: height

View File

@ -2,14 +2,22 @@ cmake_minimum_required(VERSION 3.21)
project(RibbonUI VERSION ${CMAKE_PROJECT_VERSION} LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
qt_standard_project_setup()
qt_policy(SET QTP0001 NEW)
else()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
endif()
if(APPLE)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()
find_package(Qt6 COMPONENTS Core Quick Qml ShaderTools REQUIRED)
find_package(Qt6 COMPONENTS Core Quick Qml REQUIRED)
set(version_str "${CMAKE_PROJECT_VERSION_MAJOR},${CMAKE_PROJECT_VERSION_MINOR},${CMAKE_PROJECT_VERSION_PATCH}")
add_definitions(-DRIBBONUI_VERSION=${version_str})
@ -17,7 +25,7 @@ add_definitions(-DRIBBONUI_VERSION=${version_str})
if (RIBBONUI_BUILD_STATIC_LIB)
set(LIB_TYPE "STATIC")
set(PLUGIN_TARGET_NAME "")
qt_add_resources(${PROJECT_NAME} RibbonUI.qmltypes qmldir)
set(RIBBONUI_QML_PLUGIN_DIRECTORY ${CMAKE_BINARY_DIR}/RibbonUI)
else()
set(LIB_TYPE "SHARED")
set(PLUGIN_TARGET_NAME ${PROJECT_NAME})
@ -40,26 +48,17 @@ foreach(qmlfile ${qml_files})
string(REPLACE "qml/" "" fixedfile ${qmlfile})
set_source_files_properties(${qmlfile} PROPERTIES QT_RESOURCE_ALIAS ${fixedfile})
endforeach(qmlfile)
message(${RIBBONUI_QML_PLUGIN_DIRECTORY})
qt_add_library(${PROJECT_NAME} ${LIB_TYPE})
qt_add_qml_module(${PROJECT_NAME}
PLUGIN_TARGET ${PLUGIN_TARGET_NAME}
OUTPUT_DIRECTORY ${CMAKE_PREFIX_PATH}/qml/RibbonUI
OUTPUT_DIRECTORY ${RIBBONUI_QML_PLUGIN_DIRECTORY}
URI ${PROJECT_NAME}
VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}
QML_FILES ${qml_files}
SOURCES ribbonui.cpp ribbonui.h definitions.h ribbontheme.h ribbontheme.cpp
RESOURCES resources/FluentSystemIcons-Resizable.ttf resources/imgs/icon.png
)
qt_add_shaders(${PROJECT_NAME} "shaders"
BATCHABLE
PRECOMPILE
OPTIMIZED
PREFIX
"RibbonUI"
FILES
"effects/gaussianblur.frag"
RESOURCE_PREFIX "/qt/qml/"
)
target_compile_definitions(${PROJECT_NAME}

File diff suppressed because it is too large Load Diff

View File

@ -1,42 +0,0 @@
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
float qt_Opacity;
vec2 pixelStep;
int radius;
float deviation;
};
layout(binding = 1) uniform sampler2D src;
#define PI 3.1415926538
float gaussianWeight(vec2 coords)
{
float x2 = pow(coords.x, 2.0);
float y2 = pow(coords.y, 2.0);
float deviation2 = pow(deviation, 2.0);
return (1.0 / (2.0 * PI * deviation2)) * exp(-(x2 + y2) / (2.0 * deviation2));
}
void main(void)
{
vec4 sum = vec4(0.0);
float gaussianSum = 0.0;
for (int x = -radius; x <= radius; ++x) {
for (int y = -radius; y <= radius; ++y) {
vec2 c = qt_TexCoord0 + vec2(x, y) * pixelStep;
float w = gaussianWeight(vec2(x, y));
vec4 color = texture(src, c);
sum += color * w;
gaussianSum += w;
}
}
fragColor = sum / gaussianSum * qt_Opacity;
}

View File

@ -23,7 +23,7 @@ Text {
FontLoader{
id: loader
source: "qrc:/RibbonUI/resources/FluentSystemIcons-Resizable.ttf"
source: "qrc:/qt/qml/RibbonUI/resources/FluentSystemIcons-Resizable.ttf"
}
}

View File

@ -11,7 +11,7 @@ Item {
property bool show_darkmode_btn: true
property bool dark_mode: RibbonTheme.dark_mode
property bool modern_style: RibbonTheme.modern_style
property string title_color: modern_style ? "transparent" : dark_mode ? "#282828" : "#2C59B7"
property string title_color: modern_style ? Qt.platform.os === "windows" ? dark_mode ? "#141414" : "#F5F5F5" :"transparent" : dark_mode ? "#282828" : "#2C59B7"
property string title_text_color: modern_style ? dark_mode ? "white" : "black" : "white"
default property alias content: left_container.data
property alias left_content: left_container.data
@ -112,6 +112,7 @@ Item {
RibbonButton{
id: maximizeBtn
show_bg:false
show_tooltip: Qt.platform.os !== "windows"
icon_source: Window.window.visibility === Window.Maximized ? RibbonIcons.ArrowMinimize : RibbonIcons.ArrowMaximize
text_color: titleBar.title_text_color
hover_color: "#61C554"

View File

@ -1,36 +0,0 @@
module RibbonUI
linktarget RibbonUI
optional plugin RibbonUI
classname RibbonUIPlugin
typeinfo RibbonUI.qmltypes
prefer :/RibbonUI/
RibbonTabBar 1.0 qml/RibbonTabBar.qml
RibbonTabButton 1.0 qml/RibbonTabButton.qml
RibbonView 1.0 qml/RibbonView.qml
RibbonTabPage 1.0 qml/RibbonTabPage.qml
RibbonTabGroup 1.0 qml/RibbonTabGroup.qml
RibbonButton 1.0 qml/RibbonButton.qml
RibbonBottomBar 1.0 qml/RibbonBottomBar.qml
RibbonIcon 1.0 qml/RibbonIcon.qml
RibbonToolTip 1.0 qml/RibbonToolTip.qml
RibbonTitleBar 1.0 qml/RibbonTitleBar.qml
RibbonSlider 1.0 qml/RibbonSlider.qml
RibbonSwitchButton 1.0 qml/RibbonSwitchButton.qml
RibbonCheckBox 1.0 qml/RibbonCheckBox.qml
RibbonMenu 1.0 qml/RibbonMenu.qml
RibbonMenuItem 1.0 qml/RibbonMenuItem.qml
RibbonShadow 1.0 qml/RibbonShadow.qml
RibbonBlur 1.0 qml/RibbonBlur.qml
RibbonMenuSeparator 1.0 qml/RibbonMenuSeparator.qml
RibbonPaperView 1.0 qml/RibbonPaperView.qml
RibbonPushButton 1.0 qml/RibbonPushButton.qml
RibbonRectangle 1.0 qml/RibbonRectangle.qml
RibbonText 1.0 qml/RibbonText.qml
RibbonTextBoxMenu 1.0 qml/RibbonTextBoxMenu.qml
RibbonPopup 1.0 qml/RibbonPopup.qml
RibbonPopupDialog 1.0 qml/RibbonPopupDialog.qml
RibbonLineEdit 1.0 qml/RibbonLineEdit.qml
RibbonTextEdit 1.0 qml/RibbonTextEdit.qml
RibbonComboBox 1.0 qml/RibbonComboBox.qml
RibbonSpinBox 1.0 qml/RibbonSpinBox.qml