From 3d55d3e81a2de1b91994473695b2bffa27c47b1b Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Tue, 6 Feb 2024 13:45:31 +0800
Subject: [PATCH 15/16] fix(cursor): incorrect scaling cursor size
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 错误的缩放光标大小
---
 lib/utils/scaling-helper.cpp | 10 +++++-----
 lib/utils/scaling-helper.h   |  6 +++---
 src/lightdm-greeter/main.cpp | 22 +++++++++++++---------
 3 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/lib/utils/scaling-helper.cpp b/lib/utils/scaling-helper.cpp
index 697744e..fcfd608 100644
--- a/lib/utils/scaling-helper.cpp
+++ b/lib/utils/scaling-helper.cpp
@@ -23,12 +23,12 @@ namespace Kiran
 {
 namespace SessionGuard
 {
-void ScalingHelper::set_scale_factor(double factor)
+void ScalingHelper::set_scale_factor(qreal factor)
 {
     qputenv("QT_SCALE_FACTOR", QString::number(factor).toUtf8());
 }
 
-void ScalingHelper::auto_calculate_screen_scaling()
+qreal ScalingHelper::auto_calculate_screen_scaling()
 {
     Display *display = nullptr;
     XRRScreenResources *resources = nullptr;
@@ -40,7 +40,7 @@ void ScalingHelper::auto_calculate_screen_scaling()
     {
         KLOG_WARNING("auto_calculate_screen_scaling failed,set QT_AUTO_SCREEN_SCALE_FACTOR=1");
         qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
-        return;
+        return scale_factor;
     }
 
     resources = XRRGetScreenResourcesCurrent(display, DefaultRootWindow(display));
@@ -59,7 +59,7 @@ void ScalingHelper::auto_calculate_screen_scaling()
         }
         KLOG_WARNING("auto_calculate_screen_scaling failed,set QT_AUTO_SCREEN_SCALE_FACTOR=1");
         qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
-        return;
+        return scale_factor;
     }
 
     for (int i = 0; i < resources->noutput; i++)
@@ -132,7 +132,7 @@ void ScalingHelper::auto_calculate_screen_scaling()
         KLOG_WARNING() << "set scale factor failed.";
     }
 
-    return;
+    return scale_factor;
 }
 
 }  // namespace SessionGuard
diff --git a/lib/utils/scaling-helper.h b/lib/utils/scaling-helper.h
index 669fef1..1a3eb9b 100644
--- a/lib/utils/scaling-helper.h
+++ b/lib/utils/scaling-helper.h
@@ -13,15 +13,15 @@
  */
 
 #pragma once
-
+#include <QtMath>
 namespace Kiran
 {
 namespace SessionGuard
 {
 namespace ScalingHelper
 {
-void auto_calculate_screen_scaling();
-void set_scale_factor(double factor);
+qreal auto_calculate_screen_scaling();
+void set_scale_factor(qreal factor);
 }  // namespace ScalingHelper
 
 }  // namespace SessionGuard
diff --git a/src/lightdm-greeter/main.cpp b/src/lightdm-greeter/main.cpp
index 61255ec..254911a 100644
--- a/src/lightdm-greeter/main.cpp
+++ b/src/lightdm-greeter/main.cpp
@@ -31,20 +31,22 @@ using namespace ::Kiran::SessionGuard;
 using namespace ::Kiran::SessionGuard::Greeter;
 
 // 根据配置项,调整缩放率
-void adjustScaleFactor(Prefs* prefs)
+qreal adjustScaleFactor(Prefs* prefs)
 {
+    qreal factor = 1.0;
+
     /// 设置缩放比
     switch (prefs->scale_mode())
     {
     case GREETER_SCALING_MODE_AUTO:
     {
-        ScalingHelper::auto_calculate_screen_scaling();
+        factor = ScalingHelper::auto_calculate_screen_scaling();
         break;
     }
     case GREETER_SCALING_MODE_MANUAL:
     {
-        double scaleFcator = prefs->scale_factor();
-        ScalingHelper::set_scale_factor(scaleFcator);
+        factor = prefs->scale_factor();
+        ScalingHelper::set_scale_factor(factor);
         break;
     }
     case GREETER_SCALING_MODE_DISABLE:
@@ -53,6 +55,8 @@ void adjustScaleFactor(Prefs* prefs)
         KLOG_ERROR("enable-scaling: unsupported options %d", prefs->scale_mode());
         break;
     }
+
+    return factor;
 }
 
 // 加载样式表
@@ -91,12 +95,12 @@ bool loadTranslator()
 }
 
 // 设置当前光标缩放,以及Root窗口光标避免开始会话到进入会话之中的空窗期光标错误显示
-void setCursor(Prefs* prefs)
+void setCursor(qreal factor)
 {
     // 光标放大
-    if (!CursorHelper::setDefaultCursorSize(prefs->scale_factor()))
+    if (!CursorHelper::setDefaultCursorSize(factor))
     {
-        KLOG_ERROR("set default cursor size for factor %d failed!", prefs->scale_factor());
+        KLOG_ERROR("set default cursor size for factor %f failed!", factor);
     }
 
     // 登录成功和进入桌面的间隔会显示根窗口，为了避免显示根窗口时光标显示为"X",需设置ROOT窗口光标
@@ -121,12 +125,12 @@ int main(int argc, char* argv[])
 
     Prefs::globalInit();
     auto prefs = Prefs::getInstance();
-    adjustScaleFactor(prefs);
+    qreal factor = adjustScaleFactor(prefs);
 
     QApplication app(argc, argv);
     QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
 
-    setCursor(prefs);
+    setCursor(factor);
     loadTranslator();
     loadStyleSheet();
 
-- 
2.27.0

