11#include <QGuiApplication>
13#include <qpa/qplatformscreen.h>
15#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
18#include <QAndroidJniObject>
19using QJniObject = QAndroidJniObject;
28 QScreen *screen = QGuiApplication::primaryScreen();
40 cfg.setAndroidScalingLastInitialScale(cfg.androidScalingLastInitialScale(
true));
41 cfg.setAndroidScalingTargetScale(cfg.androidScalingTargetScale(
true));
42 cfg.setAndroidScalingAskOnStartup(cfg.androidScalingAskOnStartup(
true));
51 Qt::QueuedConnection);
56 Qt::QueuedConnection);
61 Qt::QueuedConnection);
65 if (androidDonations) {
66 connect(androidDonations,
70 Qt::QueuedConnection);
76 KisApplication *app = qobject_cast<KisApplication *>(KisApplication::instance());
78 return app->androidScaling();
103 cfg.setAndroidScalingTargetScale(screen->devicePixelRatio());
104 cfg.setAndroidScalingAskOnStartup(askOnStartup);
119#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
120 return !qEnvironmentVariableIsSet(
"QT_ENABLE_HIGHDPI_SCALING")
121 && qgetenv(
"QT_ENABLE_HIGHDPI_SCALING") != QByteArrayLiteral(
"0");
123 return QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling)
124 && !QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling);
136 qreal lastInitialScale = cfg.androidScalingLastInitialScale();
141 return cfg.androidScalingTargetScale();
149 QPlatformScreen *platformScreen = screen->handle();
150 if (platformScreen) {
151 qreal actualScale = qMax(1.0, scale);
153 if (!
qFuzzyCompare(densityAdjustment, platformScreen->densityAdjustment())) {
154 platformScreen->setDensityAdjustment(densityAdjustment);
182 bool haveTargetScale = cfg.androidScalingTargetScale() >= 1.0;
183 bool askOnStartup = cfg.androidScalingAskOnStartup();
184 if (!startup || askOnStartup) {
185 QJniObject activity = QJniObject::callStaticObjectMethod(
"org/qtproject/qt5/android/QtNative",
187 "()Landroid/app/Activity;");
190 if (activity.isValid()) {
191 activity.callMethod<
void>(
"showScalingDialog",
195 jboolean(askOnStartup),
196 jboolean(!startup || haveTargetScale));
209 if (androidScaling) {
216 jboolean askOnStartup)
221 if (androidScaling) {
231 if (androidScaling) {
241 if (androidScaling) {
JNIEXPORT void JNICALL Java_org_krita_android_JNIWrappers_savePrimaryScreenScale(JNIEnv *env, jobject obj, jboolean askOnStartup)
JNIEXPORT void JNICALL Java_org_krita_android_JNIWrappers_onScalingDialogDismissed(JNIEnv *env, jobject obj)
JNIEXPORT void JNICALL Java_org_krita_android_JNIWrappers_onScalingDialogShown(JNIEnv *env, jobject obj)
JNIEXPORT void JNICALL Java_org_krita_android_JNIWrappers_setPrimaryScreenScale(JNIEnv *env, jobject obj, jdouble scale)
void sigSplashDialogDismissed()
void slotSplashDialogDismissed()
void sigInterfaceScaleChanged()
static KisAndroidScaling * instance()
qreal getValidInitialScale(KisConfig &cfg) const
QPointer< QScreen > m_initialPrimaryScreen
bool m_scalingDialogActive
qreal m_initialPrimaryScreenDevicePixelRatio
void sigJniScalingDialogActive(bool active)
KisAndroidScaling(KisConfig &cfg, KisApplication *app)
void sigJniSaveInterfaceScale(bool askOnStartup)
void sigJniSetPrimaryScreenScale(qreal scale)
void setPrimaryScreenScale(qreal scale)
void slotJniSaveInterfaceScale(bool askOnStartup)
void slotJniScalingDialogActive(bool active)
void slotJniSetPrimaryScreenScale(qreal scale)
static bool isHighDpiScalingEnabled()
void maybeShowDialog(bool startup)
Base class for the Krita app.
static bool qFuzzyCompare(half p1, half p2)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
void clearJniException(const QString &location)