From 7bba465a8e194ec671664dc844280ac54640cf10 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Wed, 29 Nov 2023 09:02:24 +0100 Subject: [PATCH 01/19] Make keep aspect ratio keep the current ratio In the resize dialog, rather than it keeping the original ratio and messing up what the user has dialed in. --- ChangeLog | 1 + src/desktop/dialogs/resizedialog.cpp | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc788145ae..4d839fcd1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -43,6 +43,7 @@ Unreleased Version 2.2.0-pre * Fix: Disable Hold Shift to Arrange by default, since it's not needed most of the time. * Fix: Don't claim every username is taken when connecting to a server with the old login flow doesn't allow guest logins, instead tell the user that they need an account. Thanks Meru for reporting. * Fix: Change italic to bold text, since the former is not readable in Chinese script. + * Fix: Make keep aspect ratio checkbox in resize dialog keep the current aspect ratio, not the original one. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/dialogs/resizedialog.cpp b/src/desktop/dialogs/resizedialog.cpp index 06375ee07c..4950eacf25 100644 --- a/src/desktop/dialogs/resizedialog.cpp +++ b/src/desktop/dialogs/resizedialog.cpp @@ -100,13 +100,7 @@ void ResizeDialog::heightChanged(int newHeight) void ResizeDialog::toggleAspectRatio(bool keep) { if(keep) { - m_aspectratio = m_oldsize.width() / float(m_oldsize.height()); - - if(m_lastchanged==0) - widthChanged(m_ui->width->value()); - else - heightChanged(m_ui->height->value()); - + m_aspectratio = float(m_ui->width->value()) / float(m_ui->height->value()); } else { m_aspectratio = 0; } From 75ce87e35a1bd65086bcc3a43454dd5d0e912dd9 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Wed, 29 Nov 2023 09:00:55 +0100 Subject: [PATCH 02/19] Don't keep aspect ratio resizing from selection The user can check that box themselves. --- ChangeLog | 1 + src/desktop/dialogs/resizedialog.cpp | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d839fcd1e..7743543432 100644 --- a/ChangeLog +++ b/ChangeLog @@ -44,6 +44,7 @@ Unreleased Version 2.2.0-pre * Fix: Don't claim every username is taken when connecting to a server with the old login flow doesn't allow guest logins, instead tell the user that they need an account. Thanks Meru for reporting. * Fix: Change italic to bold text, since the former is not readable in Chinese script. * Fix: Make keep aspect ratio checkbox in resize dialog keep the current aspect ratio, not the original one. + * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/dialogs/resizedialog.cpp b/src/desktop/dialogs/resizedialog.cpp index 4950eacf25..ffe1c641f7 100644 --- a/src/desktop/dialogs/resizedialog.cpp +++ b/src/desktop/dialogs/resizedialog.cpp @@ -54,8 +54,6 @@ void ResizeDialog::setBounds(const QRect &rect) { auto rectIn = rect.intersected({{0,0}, m_ui->resizer->originalSize()}); - m_aspectratio = rectIn.width() / float(rectIn.height()); - m_ui->width->setValue(rectIn.width()); m_ui->height->setValue(rectIn.height()); From 65bb414584d59f79aa9c09181eb9a89caa8b8129 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Thu, 30 Nov 2023 02:38:53 +0100 Subject: [PATCH 03/19] Default onion skins color to have 50% alpha So that colored surfaces don't turn into solid blobs. --- ChangeLog | 1 + src/desktop/settings_table.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7743543432..a7bc0f7e63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -45,6 +45,7 @@ Unreleased Version 2.2.0-pre * Fix: Change italic to bold text, since the former is not readable in Chinese script. * Fix: Make keep aspect ratio checkbox in resize dialog keep the current aspect ratio, not the original one. * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. + * Fix: Make onion skin color partially transparent by default so that they don't turn into solid blocks on colored stuff. Thanks BulletPepper for reporting. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/settings_table.h b/src/desktop/settings_table.h index aea87ed685..740f7c14de 100644 --- a/src/desktop/settings_table.h +++ b/src/desktop/settings_table.h @@ -134,8 +134,8 @@ SETTING(onionSkinsFrameCount , OnionSkinsFrameCount , "onionskins/fram SETTING_GETSET_V( V1, onionSkinsFrames , OnionSkinsFrames , "onionskins/frames" , (QMap()), &onionSkinsFrames::get, &onionSkinsFrames::set) -SETTING(onionSkinsTintAbove , OnionSkinsTintAbove , "onionskins/tintabove" , (QColor::fromRgb(0x33, 0x33, 0xff))) -SETTING(onionSkinsTintBelow , OnionSkinsTintBelow , "onionskins/tintbelow" , (QColor::fromRgb(0xff, 0x33, 0x33))) +SETTING(onionSkinsTintAbove , OnionSkinsTintAbove , "onionskins/tintabove" , (QColor::fromRgb(0x33, 0x33, 0xff, 0x80))) +SETTING(onionSkinsTintBelow , OnionSkinsTintBelow , "onionskins/tintbelow" , (QColor::fromRgb(0xff, 0x33, 0x33, 0x80))) SETTING(onionSkinsWrap , OnionSkinsWrap , "onionskins/wrap" , true) SETTING(recentFiles , RecentFiles , "history/recentfiles" , QStringList()) SETTING(recentHosts , RecentHosts , "history/recenthosts" , QStringList()) From 0debea8adc883992fe0071264d1671b0fe36f50a Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Thu, 30 Nov 2023 02:42:21 +0100 Subject: [PATCH 04/19] Add checkbox outline patch to changelog --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index a7bc0f7e63..dc60b0fe04 100644 --- a/ChangeLog +++ b/ChangeLog @@ -42,6 +42,7 @@ Unreleased Version 2.2.0-pre * Fix: Don't hide dock titlebars when pressing shift when a text field is in focus, since that might hide a field you're currently typing in. Thanks Trite for reporting. * Fix: Disable Hold Shift to Arrange by default, since it's not needed most of the time. * Fix: Don't claim every username is taken when connecting to a server with the old login flow doesn't allow guest logins, instead tell the user that they need an account. Thanks Meru for reporting. + * Fix: Give checkbox outlines more contrast, since they're virtually invisible in most themes. This is a patch to Qt. * Fix: Change italic to bold text, since the former is not readable in Chinese script. * Fix: Make keep aspect ratio checkbox in resize dialog keep the current aspect ratio, not the original one. * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. From 5ffd201c985aa8776354fcb970ebaea1c3ffaa98 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Tue, 28 Nov 2023 00:00:45 +0000 Subject: [PATCH 05/19] Translated using Weblate (German) [ci skip] Currently translated at 100.0% (1736 of 1736 strings) Translation: Drawpile/desktop Translate-URL: https://hosted.weblate.org/projects/drawpile/desktop/de/ --- src/desktop/i18n/drawpile_de_DE.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/desktop/i18n/drawpile_de_DE.ts b/src/desktop/i18n/drawpile_de_DE.ts index 3c16863d31..ba07773966 100644 --- a/src/desktop/i18n/drawpile_de_DE.ts +++ b/src/desktop/i18n/drawpile_de_DE.ts @@ -2270,7 +2270,7 @@ Möchten Sie wirklich die Aufnahme von Debug-Dumps starten? Tablet Driver - + Tablet-Treiber @@ -5880,12 +5880,12 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Enter account password. If you don't have an account, you must register one. This server provides no information on how to do that. - + Geben Sie das Account-Passwort ein. Wenn Sie keinen Account haben, mussen Sie einen registrieren. Dieser Server stellt keine Information darüber bereit, wie Sie dies tun können. Enter account password. If you don't have an account, you must register one on %1. - + Geben Sie das Account-Passwort ein. Wenn sie keinen Account haben, müssen Sie einen auf %1 registrieren. @@ -5949,12 +5949,12 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. This username doesn't belong to an account on this server. This is not your drawpile.net account! - + Dieser Nutzername gehört nicht zu einem Account of diesem Server. Dies ist nicht Ihr drawpile.net-Account! Enter the username and password for your account on this server. This is not your drawpile.net account! - + Geben Sie Nutzername und Password für Ihren Account auf diesem Server ein. Dies ist nicht Ihr drawpile.net-Account! @@ -8046,12 +8046,12 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Tablet Setup - + Tablet-Einrichtung Open Drawpile's tablet setup and troubleshooting help page - + Öffnet Drawpiles Hilfeseite zu Tablet-Einrichtung und -Fehlerbehebung @@ -8076,12 +8076,12 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. libera.chat - + libera.chat Join the #drawpile chatroom on libera.chat - + Tritt dem #drawpile-Chatroom auf libera.chat bei From 82c61ef6a2434b0e1bae76c3b031c94cca8e4f7f Mon Sep 17 00:00:00 2001 From: xxxx Date: Fri, 1 Dec 2023 11:07:54 +0000 Subject: [PATCH 06/19] Translated using Weblate (Chinese (Simplified)) [ci skip] Currently translated at 100.0% (1736 of 1736 strings) Translation: Drawpile/desktop Translate-URL: https://hosted.weblate.org/projects/drawpile/desktop/zh_Hans/ --- src/desktop/i18n/drawpile_zh_CN.ts | 42 +++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/desktop/i18n/drawpile_zh_CN.ts b/src/desktop/i18n/drawpile_zh_CN.ts index 39a64e1b49..0d419a7d35 100644 --- a/src/desktop/i18n/drawpile_zh_CN.ts +++ b/src/desktop/i18n/drawpile_zh_CN.ts @@ -2227,7 +2227,7 @@ Are you sure youwant to start recording debug dumps? Opening file… - + 打开文件… @@ -2297,7 +2297,7 @@ Are you sure youwant to start recording debug dumps? Tablet Driver - + 驱动选项 @@ -3680,7 +3680,7 @@ Are you sure youwant to start recording debug dumps? All Files (*) - 所有文件 (*) + 所有文件(*) @@ -5802,7 +5802,7 @@ Values above 0.5 may not be noticeable. Default - 默认 + Default @@ -5870,22 +5870,22 @@ Values above 0.5 may not be noticeable. Log in with server account - 使用服务器账号登录 + 请使用服务器账号登录 Enter account password. If you don't have an account, you must register one. This server provides no information on how to do that. - + 请输入账号密码. 如果你没有账号, 你可以注册一个. 此服务器也没有提供任何关于如何注册账号的信息. Enter account password. If you don't have an account, you must register one on %1. - + 请输入账号密码. 如果你没有账号, 你必须在 %1 上注册一个. This username belongs to a registered account. If this isn't your account, cancel and try again with a different name. - 该用户名属于一个注册账号. 如果这不是你账号, 请返回并使用其他用户名重新登录. + 该用户名属于一个注册账号. 如果这不是你的账号, 请取消并使用其他用户名重新登录. @@ -5934,7 +5934,7 @@ Values above 0.5 may not be noticeable. Log in with %1 account - 使用 %1 账号登录 + 请使用 %1 的账号登录 @@ -5944,12 +5944,12 @@ Values above 0.5 may not be noticeable. This username doesn't belong to an account on this server. This is not your drawpile.net account! - + 该用户名不属于此服务器上的账号. 并不是你在 drawpile.net 官网上的账号! Enter the username and password for your account on this server. This is not your drawpile.net account! - + 请输入在此服务器上你的账号用户名和密码. 并不是你在 drawpile.net 官网上的账号! @@ -5989,12 +5989,12 @@ Values above 0.5 may not be noticeable. The %1 authentication is not working. - %1 身份验证无效. + %1 的身份验证无效. This username doesn't belong an account on %1. - 此用户名不属于 %1 上的账号. + 该用户名不属于 %1 上的账号. @@ -6014,12 +6014,12 @@ Values above 0.5 may not be noticeable. Log in with '%1' credentials - 用 '%1' 证书登录 + 请使用'%1'官网上的账号登录 Log in with '%1' credentials (INSECURE CONNECTION!) - 用 '%1' 证书登录 (不安全的连接!) + 请使用'%1'官网上的账号登录 (不安全的连接!) @@ -7810,7 +7810,7 @@ Values above 0.5 may not be noticeable. NSFM - 18禁房 + 不适于未成年人的 @@ -8030,12 +8030,12 @@ Values above 0.5 may not be noticeable. Tablet Setup - + Tablet Setup Open Drawpile's tablet setup and troubleshooting help page - + 打开 Drawpile 的数位板故障排除帮助页面 @@ -8060,12 +8060,12 @@ Values above 0.5 may not be noticeable. libera.chat - + libera.chat Join the #drawpile chatroom on libera.chat - + 加入 libera.chat 的 #drawpile 聊天室 @@ -9377,7 +9377,7 @@ Values above 0.5 may not be noticeable. Add - 添加 + 线性减淡 From 4449e9ff4d930f6e3a21ee70f7c1ad31ea195ccf Mon Sep 17 00:00:00 2001 From: xxxx Date: Fri, 1 Dec 2023 11:09:19 +0000 Subject: [PATCH 07/19] Translated using Weblate (Chinese (Simplified)) [ci skip] Currently translated at 100.0% (280 of 280 strings) Translation: Drawpile/libclient Translate-URL: https://hosted.weblate.org/projects/drawpile/libclient/zh_Hans/ --- src/libclient/i18n/libclient_zh_CN.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libclient/i18n/libclient_zh_CN.ts b/src/libclient/i18n/libclient_zh_CN.ts index 550a34a02b..5eb92cd7c8 100644 --- a/src/libclient/i18n/libclient_zh_CN.ts +++ b/src/libclient/i18n/libclient_zh_CN.ts @@ -1217,12 +1217,12 @@ This server does not allow guest logins - 此服务器不支持非注册用户登入 + 此服务器不支持非注册用户登录 Password needed to log in as "%1" - "%1" 需要登录密码 + 请使用 "%1" 的账号密码来登录 @@ -1284,7 +1284,7 @@ You have been banned from this session! - 你已经被禁止访问该房间! + 你已被禁止访问该房间! From 42a5834051c094cf4ff3783fd23636c138c13517 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Thu, 30 Nov 2023 05:27:11 +0100 Subject: [PATCH 08/19] Don't hit DP_UNREACHABLE for unknown MyPaint mode While it can't happen currently, extending the flags could end up hitting this case. There's no good reason for it, an unknown blend mode can be handled gracefully. --- src/drawdance/libengine/dpengine/brush.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/drawdance/libengine/dpengine/brush.c b/src/drawdance/libengine/dpengine/brush.c index 7ad01369ba..22c471025e 100644 --- a/src/drawdance/libengine/dpengine/brush.c +++ b/src/drawdance/libengine/dpengine/brush.c @@ -182,10 +182,6 @@ void DP_mypaint_brush_mode_extract(uint8_t mode, int *out_blend_mode, if (mode & DP_MYPAINT_BRUSH_MODE_FLAG) { posterize_num = 0; switch (mode & DP_MYPAINT_BRUSH_MODE_MASK) { - case DP_MYPAINT_BRUSH_MODE_INCREMENTAL: - blend_mode = DP_BLEND_MODE_NORMAL_AND_ERASER; - indirect = false; - break; case DP_MYPAINT_BRUSH_MODE_NORMAL: blend_mode = DP_BLEND_MODE_NORMAL; indirect = true; @@ -199,7 +195,9 @@ void DP_mypaint_brush_mode_extract(uint8_t mode, int *out_blend_mode, indirect = true; break; default: - DP_UNREACHABLE(); + blend_mode = DP_BLEND_MODE_NORMAL_AND_ERASER; + indirect = false; + break; } } else { From 48ab77edfce88fc72b140631da377f7a56d7f729 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 03:02:05 +0100 Subject: [PATCH 09/19] Allow scrolling of session host dialog In case it gets too long for some device with a small screen. --- src/desktop/dialogs/startdialog/host.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/desktop/dialogs/startdialog/host.cpp b/src/desktop/dialogs/startdialog/host.cpp index c1e22ea2ec..5ea5bea5f5 100644 --- a/src/desktop/dialogs/startdialog/host.cpp +++ b/src/desktop/dialogs/startdialog/host.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include namespace dialogs { @@ -24,9 +25,24 @@ namespace startdialog { Host::Host(QWidget *parent) : Page{parent} { - QVBoxLayout *layout = new QVBoxLayout{this}; + QVBoxLayout *widgetLayout = new QVBoxLayout; + widgetLayout->setContentsMargins(0, 0, 0, 0); + setLayout(widgetLayout); + + QScrollArea *scrollArea = new QScrollArea; + scrollArea->setFrameStyle(QFrame::NoFrame); + utils::initKineticScrolling(scrollArea); + widgetLayout->addWidget(scrollArea); + + QWidget *scroll = new QWidget; + scroll->setContentsMargins(0, 0, 0, 0); + scrollArea->setWidget(scroll); + scrollArea->setWidgetResizable(true); + + QVBoxLayout *layout = new QVBoxLayout; layout->setAlignment(Qt::AlignTop); layout->setContentsMargins(0, 0, 0, 0); + scroll->setLayout(layout); QFormLayout *generalSection = utils::addFormSection(layout); m_titleEdit = new QLineEdit; From 982f4dadbd2da58c4f546ffbfda5490b45868b3b Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 03:02:29 +0100 Subject: [PATCH 10/19] Don't hide password in host dialog There's nothing spectacularly secret about it when you're the person hosting a session. --- src/desktop/dialogs/startdialog/host.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/desktop/dialogs/startdialog/host.cpp b/src/desktop/dialogs/startdialog/host.cpp index 5ea5bea5f5..74bfd79d41 100644 --- a/src/desktop/dialogs/startdialog/host.cpp +++ b/src/desktop/dialogs/startdialog/host.cpp @@ -54,7 +54,6 @@ Host::Host(QWidget *parent) m_titleEdit, &QLineEdit::textChanged, this, &Host::updateHostEnabled); m_passwordEdit = new QLineEdit; - m_passwordEdit->setEchoMode(QLineEdit::Password); m_passwordEdit->setToolTip( tr("Optional. If left blank, no password will be needed " "to join this session.")); From 29cccf218f3fe922e065f1a2fb5b74be641da0ca Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 03:03:43 +0100 Subject: [PATCH 11/19] Remember last session password Much like the last session title and ID alias, since otherwise you might forget to set the password again and get caught out by strangers joining what was supposed to be a private session. --- src/desktop/dialogs/startdialog/host.cpp | 1 + src/desktop/settings_table.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/desktop/dialogs/startdialog/host.cpp b/src/desktop/dialogs/startdialog/host.cpp index 74bfd79d41..61e6accf59 100644 --- a/src/desktop/dialogs/startdialog/host.cpp +++ b/src/desktop/dialogs/startdialog/host.cpp @@ -139,6 +139,7 @@ Host::Host(QWidget *parent) desktop::settings::Settings &settings = dpApp().settings(); settings.bindLastSessionTitle(m_titleEdit); + settings.bindLastSessionPassword(m_passwordEdit); settings.bindLastIdAlias(m_idAliasEdit); settings.bindLastAnnounce(m_announceBox); diff --git a/src/desktop/settings_table.h b/src/desktop/settings_table.h index 740f7c14de..4244d58fcd 100644 --- a/src/desktop/settings_table.h +++ b/src/desktop/settings_table.h @@ -84,6 +84,7 @@ SETTING(lastListingServer , LastListingServer , "history/listing SETTING(lastNsfm , LastNsfm , "history/nsfm" , false) SETTING(lastPalette , LastPalette , "history/lastpalette" , 0) SETTING(lastSessionTitle , LastSessionTitle , "history/sessiontitle" , QString()) +SETTING(lastSessionPassword , LastSessionPassword , "history/sessionpassword" , QString()) SETTING(lastStartDialogPage , LastStartDialogPage , "history/laststartdialogpage" , -1) SETTING(lastStartDialogSize , LastStartDialogSize , "history/laststartdialogsize" , QSize()) SETTING(lastStartDialogDateTime , LastStartDialogDateTime , "history/laststartdialogdatetime" , QString()) From fd9c2c47d45cbe34111a5071c1a721f939bed74c Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 03:04:54 +0100 Subject: [PATCH 12/19] Include session password in invite link by default Because it just makes sense, if you want to invite someone, they need the password. --- src/desktop/settings_table.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/desktop/settings_table.h b/src/desktop/settings_table.h index 4244d58fcd..9e5a00fe75 100644 --- a/src/desktop/settings_table.h +++ b/src/desktop/settings_table.h @@ -69,7 +69,7 @@ SETTING(inputPresets , InputPresets , "inputpresets" SETTING(insecurePasswordStorage , InsecurePasswordStorage , "settings/insecurepasswordstorage" , false) SETTING(interfaceMode , InterfaceMode , "settings/interfacemode" , int(desktop::settings::InterfaceMode::Unknown)) SETTING(inviteLinkType , InviteLinkType , "invites/linktype" , dialogs::InviteDialog::LinkType::Web) -SETTING(inviteIncludePassword , InviteIncludePassword , "invites/includepassword" , false) +SETTING(inviteIncludePassword , InviteIncludePassword , "invites/includepassword" , true) SETTING(kineticScrollGesture , KineticScrollGesture , "settings/kineticscroll/gesture" , int(KINETIC_SCROLL_GESTURE_DEFAULT)) SETTING(kineticScrollThreshold , KineticScrollThreshold , "settings/kineticscroll/threshold" , 10) SETTING(kineticScrollHideBars , KineticScrollHideBars , "settings/kineticscroll/hidebars" , false) From 2fff16a54ede7a8155f626eacd179c83ce12956a Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 03:59:57 +0100 Subject: [PATCH 13/19] Add a generate password button to host dialog To just generate a random password for a session. --- src/desktop/dialogs/startdialog/host.cpp | 31 +++++++++++++++++++++++- src/desktop/dialogs/startdialog/host.h | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/desktop/dialogs/startdialog/host.cpp b/src/desktop/dialogs/startdialog/host.cpp index 61e6accf59..6db2bd9ac2 100644 --- a/src/desktop/dialogs/startdialog/host.cpp +++ b/src/desktop/dialogs/startdialog/host.cpp @@ -15,7 +15,9 @@ #include #include #include +#include #include +#include #include #include @@ -53,11 +55,23 @@ Host::Host(QWidget *parent) connect( m_titleEdit, &QLineEdit::textChanged, this, &Host::updateHostEnabled); + QHBoxLayout *passwordLayout = new QHBoxLayout; + passwordLayout->setContentsMargins(0, 0, 0, 0); + m_passwordEdit = new QLineEdit; m_passwordEdit->setToolTip( tr("Optional. If left blank, no password will be needed " "to join this session.")); - generalSection->addRow(tr("Password:"), m_passwordEdit); + passwordLayout->addWidget(m_passwordEdit, 1); + + QPushButton *generatePasswordButton = new QPushButton(tr("Generate")); + generatePasswordButton->setToolTip(tr("Generates a random password.")); + connect( + generatePasswordButton, &QAbstractButton::clicked, this, + &Host::generatePassword); + passwordLayout->addWidget(generatePasswordButton); + + generalSection->addRow(tr("Password:"), passwordLayout); m_nsfmBox = new QCheckBox{tr("Not suitable for minors (NSFM)")}; m_nsfmBox->setToolTip( @@ -207,6 +221,21 @@ void Host::updateHostEnabled() emit enableHost(canHost()); } +void Host::generatePassword() +{ + // Passwords are just a mechanism to facilitate invite-only sessions. + // They're not secret and are meant to be shared with anyone who wants to + // join the session, so we don't need cryptographic security for them. + QString characters = QStringLiteral("abcdefghijklmnopqrstuvwxyz0123456789"); + QString password; + int length = QRandomGenerator::global()->bounded(8, 12); + for(int i = 0; i < length; ++i) { + password.append(characters[QRandomGenerator::global()->bounded( + 0, characters.length())]); + } + dpApp().settings().setLastSessionPassword(password); +} + void Host::updateNsfmBasedOnTitle() { bool nsfmTitle = parentalcontrols::isNsfmTitle(m_titleEdit->text()); diff --git a/src/desktop/dialogs/startdialog/host.h b/src/desktop/dialogs/startdialog/host.h index ef120d3036..4c2a2a0285 100644 --- a/src/desktop/dialogs/startdialog/host.h +++ b/src/desktop/dialogs/startdialog/host.h @@ -40,6 +40,7 @@ public slots: const QString &remoteAddress); private slots: + void generatePassword(); void updateNsfmBasedOnTitle(); void updateListServers(); void updateRemoteHosts(); From 5a91382b4251efaf4eb4db8f2280e7b775c855b4 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 05:26:43 +0100 Subject: [PATCH 14/19] Add notes messages to host dialog When a title is missing, it shows a message to that effect. When no password is set, it warns the user that their session will be public, because some users don't understand that this is what's required to prevent strangers from joining their session. So they just kick anyone who joins, causing grief. When the user chooses to host on their computer, they will get a warning about it requiring further setup and a link to a help page that tells them how to deal with port forwarding. --- ChangeLog | 1 + src/desktop/dialogs/startdialog/host.cpp | 80 +++++++++++++++++++++--- src/desktop/dialogs/startdialog/host.h | 4 ++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index dc60b0fe04..e4a3f7f753 100644 --- a/ChangeLog +++ b/ChangeLog @@ -47,6 +47,7 @@ Unreleased Version 2.2.0-pre * Fix: Make keep aspect ratio checkbox in resize dialog keep the current aspect ratio, not the original one. * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. * Fix: Make onion skin color partially transparent by default so that they don't turn into solid blocks on colored stuff. Thanks BulletPepper for reporting. + * Fix: Clarify the host dialog by adding additional messages that explain common sources of confusion, such as the title being required, the password being necessary to host a private session and "host on this computer" requiring port forwarding. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/dialogs/startdialog/host.cpp b/src/desktop/dialogs/startdialog/host.cpp index 6db2bd9ac2..e3e6cd1d35 100644 --- a/src/desktop/dialogs/startdialog/host.cpp +++ b/src/desktop/dialogs/startdialog/host.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,57 @@ Host::Host(QWidget *parent) widgetLayout->setContentsMargins(0, 0, 0, 0); setLayout(widgetLayout); + m_notes = new QWidget; + m_notes->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + widgetLayout->addWidget(m_notes); + + QVBoxLayout *notesLayout = new QVBoxLayout; + notesLayout->setContentsMargins(0, 0, 0, 0); + m_notes->setLayout(notesLayout); + + QHBoxLayout *iconLayout = new QHBoxLayout; + iconLayout->setContentsMargins(0, 0, 0, 0); + notesLayout->addLayout(iconLayout); + + iconLayout->addWidget( + utils::makeIconLabel(QIcon::fromTheme("dialog-warning"), m_notes)); + + QVBoxLayout *labelsLayout = new QVBoxLayout; + labelsLayout->setContentsMargins(0, 0, 0, 0); + iconLayout->addLayout(labelsLayout); + + m_titleNote = new QLabel; + m_titleNote->setWordWrap(true); + m_titleNote->setTextFormat(Qt::PlainText); + m_titleNote->setText(tr("A session title is required.")); + labelsLayout->addWidget(m_titleNote); + + m_passwordNote = new QLabel; + m_passwordNote->setWordWrap(true); + m_passwordNote->setTextFormat(Qt::RichText); + m_passwordNote->setText( + tr("Without a password set, anyone can join your session! If you want " + "to host a private session, choose a password or " + "generate one.")); + connect( + m_passwordNote, &QLabel::linkActivated, this, &Host::generatePassword); + labelsLayout->addWidget(m_passwordNote); + + m_localHostNote = new QLabel; + m_localHostNote->setWordWrap(true); + m_localHostNote->setTextFormat(Qt::RichText); + m_localHostNote->setText( + tr("Hosting on your computer requires additional setup! " + "Click here for instructions.")); + connect(m_localHostNote, &QLabel::linkActivated, this, [] { + QDesktopServices::openUrl( + QStringLiteral("https://drawpile.net/localhosthelp")); + }); + labelsLayout->addWidget(m_localHostNote); + + utils::addFormSpacer(notesLayout); + notesLayout->addWidget(utils::makeSeparator()); + QScrollArea *scrollArea = new QScrollArea; scrollArea->setFrameStyle(QFrame::NoFrame); utils::initKineticScrolling(scrollArea); @@ -45,6 +97,7 @@ Host::Host(QWidget *parent) layout->setAlignment(Qt::AlignTop); layout->setContentsMargins(0, 0, 0, 0); scroll->setLayout(layout); + utils::addFormSpacer(layout); QFormLayout *generalSection = utils::addFormSection(layout); m_titleEdit = new QLineEdit; @@ -62,6 +115,9 @@ Host::Host(QWidget *parent) m_passwordEdit->setToolTip( tr("Optional. If left blank, no password will be needed " "to join this session.")); + connect( + m_passwordEdit, &QLineEdit::textChanged, this, + &Host::updateHostEnabled); passwordLayout->addWidget(m_passwordEdit, 1); QPushButton *generatePasswordButton = new QPushButton(tr("Generate")); @@ -76,10 +132,17 @@ Host::Host(QWidget *parent) m_nsfmBox = new QCheckBox{tr("Not suitable for minors (NSFM)")}; m_nsfmBox->setToolTip( tr("Marks the session as having age-restricted content.")); - layout->addWidget(m_nsfmBox); + generalSection->addRow(nullptr, m_nsfmBox); utils::addFormSeparator(layout); + QHBoxLayout *remoteLayout = new QHBoxLayout; + layout->addLayout(remoteLayout); + + QRadioButton *useRemoteRadio = new QRadioButton{tr("Host at:")}; + useRemoteRadio->setToolTip(tr("Use an external dedicated server")); + remoteLayout->addWidget(useRemoteRadio); + QRadioButton *useLocalRadio = new QRadioButton{tr("Host on this computer")}; useLocalRadio->setToolTip(tr("Use Drawpile's built-in server")); layout->addWidget(useLocalRadio); @@ -97,13 +160,6 @@ Host::Host(QWidget *parent) utils::addFormSpacer(layout); #endif - QHBoxLayout *remoteLayout = new QHBoxLayout; - layout->addLayout(remoteLayout); - - QRadioButton *useRemoteRadio = new QRadioButton{tr("Host at:")}; - useRemoteRadio->setToolTip(tr("Use an external dedicated server")); - remoteLayout->addWidget(useRemoteRadio); - m_useGroup = new QButtonGroup{this}; m_useGroup->addButton(useLocalRadio, USE_LOCAL); m_useGroup->addButton(useRemoteRadio, USE_REMOTE); @@ -218,6 +274,14 @@ void Host::setHostEnabled(bool enabled) void Host::updateHostEnabled() { + utils::ScopedUpdateDisabler disabler(this); + bool missingTitle = m_titleEdit->text().trimmed().isEmpty(); + bool isPublic = m_passwordEdit->text().isEmpty(); + bool isLocal = m_useGroup->checkedId() == USE_LOCAL; + m_titleNote->setVisible(missingTitle); + m_passwordNote->setVisible(isPublic); + m_localHostNote->setVisible(isLocal); + m_notes->setVisible(missingTitle || isPublic || isLocal); emit enableHost(canHost()); } diff --git a/src/desktop/dialogs/startdialog/host.h b/src/desktop/dialogs/startdialog/host.h index 4c2a2a0285..d7b0205c32 100644 --- a/src/desktop/dialogs/startdialog/host.h +++ b/src/desktop/dialogs/startdialog/host.h @@ -54,6 +54,10 @@ private slots: QString getRemoteAddress() const; + QWidget *m_notes; + QLabel *m_titleNote; + QLabel *m_passwordNote; + QLabel *m_localHostNote; QLineEdit *m_titleEdit; QLineEdit *m_passwordEdit; QCheckBox *m_nsfmBox; From cada96fcbf13c914292865100f2ca1d9224d1985 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 13:14:53 +0100 Subject: [PATCH 15/19] Update translations for host dialog additions Whoops, another thing before beta.11. Also changes the hosting help URL to a more appropriate target. --- src/desktop/i18n/drawpile_ar_EG.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_cs_CZ.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_de_DE.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_en_US.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_es_CO.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_fi_FI.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_fr_FR.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_it_IT.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_ja_JP.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_nb_NO.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_pt_BR.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_pt_PT.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_ru_RU.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_tr_TR.ts | 59 +++++++++++++++++++-------- src/desktop/i18n/drawpile_uk_UA.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_vi_VN.ts | 51 +++++++++++++++++------ src/desktop/i18n/drawpile_zh_CN.ts | 59 +++++++++++++++++++-------- src/desktop/ui/invitedialog.ui | 4 +- src/libclient/i18n/libclient_en_US.ts | 2 +- 19 files changed, 677 insertions(+), 252 deletions(-) diff --git a/src/desktop/i18n/drawpile_ar_EG.ts b/src/desktop/i18n/drawpile_ar_EG.ts index 3072a73dd4..64b3bcd71d 100644 --- a/src/desktop/i18n/drawpile_ar_EG.ts +++ b/src/desktop/i18n/drawpile_ar_EG.ts @@ -857,12 +857,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6017,7 +6017,7 @@ Values above 0.5 may not be noticeable. - + Error @@ -7880,7 +7880,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog @@ -7890,17 +7890,27 @@ Values above 0.5 may not be noticeable. - + Optional. If left blank, no password will be needed to join this session. - + + Generate + + + + + Generates a random password. + + + + Password: - + The built-in server is not available on Android. @@ -7910,7 +7920,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7925,7 +7935,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7945,7 +7970,7 @@ Values above 0.5 may not be noticeable. - + Host on this computer @@ -7955,7 +7980,7 @@ Values above 0.5 may not be noticeable. - + Host at: @@ -8080,12 +8105,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_cs_CZ.ts b/src/desktop/i18n/drawpile_cs_CZ.ts index 20acb43c6a..8aabee9133 100644 --- a/src/desktop/i18n/drawpile_cs_CZ.ts +++ b/src/desktop/i18n/drawpile_cs_CZ.ts @@ -856,12 +856,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6005,7 +6005,7 @@ Values above 0.5 may not be noticeable. Na střed - + Error Chyba @@ -7835,7 +7835,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Název je ukázán v pruhu s názvem programu a v dialogu pro výběr sezení @@ -7845,17 +7845,27 @@ Values above 0.5 may not be noticeable. Název: - + Optional. If left blank, no password will be needed to join this session. Volitelné. Je-li ponecháno prázdné, nebude pro připojení k tomuto sezení potřeba žádné heslo. - + + Generate + + + + + Generates a random password. + + + + Password: Heslo: - + The built-in server is not available on Android. @@ -7865,7 +7875,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7880,7 +7890,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7900,7 +7925,7 @@ Values above 0.5 may not be noticeable. Oznámit sezení ve veřejném seznamu - + Host on this computer @@ -7910,7 +7935,7 @@ Values above 0.5 may not be noticeable. - + Host at: @@ -8035,12 +8060,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_de_DE.ts b/src/desktop/i18n/drawpile_de_DE.ts index ba07773966..824adf4f8a 100644 --- a/src/desktop/i18n/drawpile_de_DE.ts +++ b/src/desktop/i18n/drawpile_de_DE.ts @@ -858,13 +858,13 @@ angepasst. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Sie hosten eine lokale Sitzung. Falls andere Ihrer Sitzung nicht beitreten können, lesen Sie <a href="https://drawpile.net/help/hosting/">die Hilfeseite über das Hosten</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Sie hosten eine lokale Sitzung. Falls andere Ihrer Sitzung nicht beitreten können, lesen Sie <a href="https://drawpile.net/localhosthelp">die Hilfeseite über das Hosten</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Sie hosten eine lokale Sitzung, also muss Drawpile Ihre externe IP-Adresse herausfinden, um Ihnen einen Einladungslink zu geben. Für mehr Informationen, lesen Sie <a href="https://drawpile.net/help/hosting/">die Hilfeseite über das Hosten</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Sie hosten eine lokale Sitzung, also muss Drawpile Ihre externe IP-Adresse herausfinden, um Ihnen einen Einladungslink zu geben. Für mehr Informationen, lesen Sie <a href="https://drawpile.net/localhosthelp">die Hilfeseite über das Hosten</a>. @@ -6104,7 +6104,7 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Zentrieren - + Error Fehler @@ -7923,7 +7923,7 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Der Titel der Sitzung wird in der Titelzeile des Programms und im Sitzungsauswahldialog angezeigt @@ -7933,17 +7933,27 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Titel: - + Optional. If left blank, no password will be needed to join this session. Optional. Wenn nichts angegeben wird, wird kein Passwort zum Betreten der Sitzung benötigt. - + + Generate + + + + + Generates a random password. + + + + Password: Passwort: - + The built-in server is not available on Android. Der eingebaute Server ist auf Android nicht verfügbar. @@ -7953,7 +7963,7 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Der eingebaute Server ist auf dieser Installation von Drawpile nicht verfügbar. - + Enable advanced options Erweiterte Optionen aktivieren @@ -7968,7 +7978,22 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. ID-Alias: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) Nicht jugendfrei (NSFM) @@ -7988,7 +8013,7 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Sitzung in einer öffentliche Liste anzeigen - + Host on this computer Auf diesem Computer hosten @@ -7998,7 +8023,7 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. Drawpiles eingebauten Server verwenden - + Host at: Hosten unter: @@ -8123,13 +8148,13 @@ Werte über 0.5 sind eventuell nicht visuell erkennbar. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - Die Downloadseite für Drawpile %1 sollte sich in Ihrem Browser geöffnet haben. Falls nicht, bitte besuchen Sie <em>drawpile.net</em> manuell. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - Die Downloadseite für Drawpile %1 konnte nicht geöffnet werden, bitte besuchen Sie <em>drawpile.net</em> manuell. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_en_US.ts b/src/desktop/i18n/drawpile_en_US.ts index 4053b69d03..ba0a781ce9 100644 --- a/src/desktop/i18n/drawpile_en_US.ts +++ b/src/desktop/i18n/drawpile_en_US.ts @@ -856,12 +856,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6000,7 +6000,7 @@ Values above 0.5 may not be noticeable. - + Error @@ -7819,7 +7819,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog @@ -7829,17 +7829,27 @@ Values above 0.5 may not be noticeable. - + Optional. If left blank, no password will be needed to join this session. - + + Generate + + + + + Generates a random password. + + + + Password: - + The built-in server is not available on Android. @@ -7849,7 +7859,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7864,7 +7874,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7884,7 +7909,7 @@ Values above 0.5 may not be noticeable. - + Host on this computer @@ -7894,7 +7919,7 @@ Values above 0.5 may not be noticeable. - + Host at: @@ -8019,12 +8044,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_es_CO.ts b/src/desktop/i18n/drawpile_es_CO.ts index a905f00f08..8709a03521 100644 --- a/src/desktop/i18n/drawpile_es_CO.ts +++ b/src/desktop/i18n/drawpile_es_CO.ts @@ -857,12 +857,12 @@ a 64x64 pixeles. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6003,7 +6003,7 @@ Values above 0.5 may not be noticeable. Centrar - + Error @@ -7822,7 +7822,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog El titulo se muestra en la barra de titulo de la aplicacion y en el dialogo de selección de sesion @@ -7832,17 +7832,27 @@ Values above 0.5 may not be noticeable. Titulo: - + Optional. If left blank, no password will be needed to join this session. Opcional. Si se deja en blanco, no contraseña sera necesaria para unirse a esta sesion. - + + Generate + + + + + Generates a random password. + + + + Password: Contraseña: - + The built-in server is not available on Android. @@ -7852,7 +7862,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7867,7 +7877,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7887,7 +7912,7 @@ Values above 0.5 may not be noticeable. Anunciar la sesion en una lista publica - + Host on this computer @@ -7897,7 +7922,7 @@ Values above 0.5 may not be noticeable. Usar servidor incorporado de Drawpile - + Host at: @@ -8022,12 +8047,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_fi_FI.ts b/src/desktop/i18n/drawpile_fi_FI.ts index 4be93bed91..31369101b8 100644 --- a/src/desktop/i18n/drawpile_fi_FI.ts +++ b/src/desktop/i18n/drawpile_fi_FI.ts @@ -857,12 +857,12 @@ Valitse väri - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6002,7 +6002,7 @@ Values above 0.5 may not be noticeable. - + Error Virhe @@ -7821,7 +7821,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Otsikko näytetään sovelluksen otsikkopalkissa sekä istunnonvalintaikkunassa @@ -7831,17 +7831,27 @@ Values above 0.5 may not be noticeable. Otsikko: - + Optional. If left blank, no password will be needed to join this session. Valinnainen. Jos tämä jätetään tyhjäksi, istuntoon voi liittyä ilman salasanaa. - + + Generate + + + + + Generates a random password. + + + + Password: Salasana: - + The built-in server is not available on Android. @@ -7851,7 +7861,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7866,7 +7876,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7886,7 +7911,7 @@ Values above 0.5 may not be noticeable. Ilmoita istunto julkisessa listassa - + Host on this computer @@ -7896,7 +7921,7 @@ Values above 0.5 may not be noticeable. Tämä tietokone - + Host at: @@ -8021,12 +8046,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_fr_FR.ts b/src/desktop/i18n/drawpile_fr_FR.ts index 5fb9eb749d..99ddf73df6 100644 --- a/src/desktop/i18n/drawpile_fr_FR.ts +++ b/src/desktop/i18n/drawpile_fr_FR.ts @@ -856,12 +856,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6001,7 +6001,7 @@ Values above 0.5 may not be noticeable. - + Error Erreur @@ -7820,7 +7820,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Le titre est affiché dans le bandeau de l'application et dans la sélection de session @@ -7830,17 +7830,27 @@ Values above 0.5 may not be noticeable. Titre : - + Optional. If left blank, no password will be needed to join this session. Optionnel. Si laissé vide, aucun mot de passe ne sera demandé pour joindre cette session. - + + Generate + + + + + Generates a random password. + + + + Password: Mot de passe : - + The built-in server is not available on Android. @@ -7850,7 +7860,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7865,7 +7875,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7885,7 +7910,7 @@ Values above 0.5 may not be noticeable. Annoncer la session sur un serveur publique - + Host on this computer @@ -7895,7 +7920,7 @@ Values above 0.5 may not be noticeable. Utiliser le serveur interne de Drawpile - + Host at: @@ -8020,12 +8045,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_it_IT.ts b/src/desktop/i18n/drawpile_it_IT.ts index cb2d0dfb81..51389a7cdf 100644 --- a/src/desktop/i18n/drawpile_it_IT.ts +++ b/src/desktop/i18n/drawpile_it_IT.ts @@ -857,13 +857,13 @@ in 64x64 pixel. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Stai hostando una sessione localmente. Se altri non possono partecipare alla sessione, dai un'occhiata a <a href="https://drawpile.net/help/hosting/"> la pagina di aiuto su hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Stai hostando una sessione localmente. Se altri non possono partecipare alla sessione, dai un'occhiata a <a href="https://drawpile.net/localhosthelp"> la pagina di aiuto su hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Stai hostando una sessione localmente, quindi Drawpile deve trovare il tuo indirizzo IP visibile esternamente per darti un link di invito. Per ulteriori informazioni, consultare <a href="https://drawpile.net/help/hosting/">la pagina della guida su hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Stai hostando una sessione localmente, quindi Drawpile deve trovare il tuo indirizzo IP visibile esternamente per darti un link di invito. Per ulteriori informazioni, consultare <a href="https://drawpile.net/localhosthelp">la pagina della guida su hosting</a>. @@ -6102,7 +6102,7 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Centra - + Error Errore @@ -7921,7 +7921,7 @@ I valori superiori a 0.5 potrebbero non essere evidenti. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Il titolo viene visualizzato nella barra del titolo dell'applicazione e nella finestra di dialogo di selezione della sessione @@ -7931,17 +7931,27 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Titolo: - + Optional. If left blank, no password will be needed to join this session. Opzionale. Se lasciato vuoto, non sarà necessaria alcuna password per partecipare a questa sessione. - + + Generate + + + + + Generates a random password. + + + + Password: Password: - + The built-in server is not available on Android. Il server integrato non è disponibile su Android. @@ -7951,7 +7961,7 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Il server integrato non è disponibile su questa installazione di Drawpile. - + Enable advanced options Abilitare opzioni avanzate @@ -7966,7 +7976,22 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Alias ID: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) Non adatto ai minori (NSFM) @@ -7986,7 +8011,7 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Annuncia la sessione in un elenco pubblico - + Host on this computer Host su questo computer @@ -7996,7 +8021,7 @@ I valori superiori a 0.5 potrebbero non essere evidenti. Utilizza il server integrato di Drawpile - + Host at: Hosta su: @@ -8121,13 +8146,13 @@ I valori superiori a 0.5 potrebbero non essere evidenti. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - La pagina di download di Drawpile %1 dovrebbe essersi aperta nel vostro browser. In caso contrario, visitare manualmente <em>drawpile.net</em>. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - Non è stato possibile aprire la pagina di download di Drawpile %1, visitare <em>drawpile.net</em> manualmente. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_ja_JP.ts b/src/desktop/i18n/drawpile_ja_JP.ts index 23cab44e95..1e5df71a79 100644 --- a/src/desktop/i18n/drawpile_ja_JP.ts +++ b/src/desktop/i18n/drawpile_ja_JP.ts @@ -857,13 +857,13 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - ローカルでセッションをホストしています。 他の人がセッションに参加できない場合は、<a href="https://drawpile.net/help/hosting/">ホスティングに関するヘルプ ページ</a>をご覧ください。 + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + ローカルでセッションをホストしています。 他の人がセッションに参加できない場合は、<a href="https://drawpile.net/localhosthelp">ホスティングに関するヘルプ ページ</a>をご覧ください。 - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - ローカルでセッションをホストしているため、Drawpile は外部から見える IP アドレスを見つけて招待リンクを提供する必要があります。 詳細については、<a href="https://drawpile.net/help/hosting/">ホスティングに関するヘルプ ページ</a>をご覧ください。 + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + ローカルでセッションをホストしているため、Drawpile は外部から見える IP アドレスを見つけて招待リンクを提供する必要があります。 詳細については、<a href="https://drawpile.net/localhosthelp">ホスティングに関するヘルプ ページ</a>をご覧ください。 @@ -6098,7 +6098,7 @@ Values above 0.5 may not be noticeable. 中心 - + Error エラー @@ -7906,7 +7906,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog タイトルはアプリケーションのタイトルバーとセッション選択ダイアログで表示されます @@ -7916,17 +7916,27 @@ Values above 0.5 may not be noticeable. タイトル: - + Optional. If left blank, no password will be needed to join this session. 空白にすると、このセッションへの参加にパスワードが不要になります。 - + + Generate + + + + + Generates a random password. + + + + Password: パスワード: - + The built-in server is not available on Android. 内蔵サーバーはAndroidでは利用できません。 @@ -7936,7 +7946,7 @@ Values above 0.5 may not be noticeable. 内蔵サーバーはこのインストールされたDrawpileでは利用できません。 - + Enable advanced options 詳細オプションを有効 @@ -7951,7 +7961,22 @@ Values above 0.5 may not be noticeable. IDエイリアス: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) 未成年者には適していません (NSFM) @@ -7971,7 +7996,7 @@ Values above 0.5 may not be noticeable. セッションを公開リストで告知 - + Host on this computer このコンピュータでホスト @@ -7981,7 +8006,7 @@ Values above 0.5 may not be noticeable. Drawpile 内蔵のサーバー機能を使います - + Host at: ホスト: @@ -8106,13 +8131,13 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - Drawpile %1 のダウンロード ページがブラウザで開いているはずです。 そうでない場合は、<em>drawpile.net</em> に手動でアクセスしてください。 + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - Drawpile %1 のダウンロード ページを開けませんでした。<em>drawpile.net</em> に手動でアクセスしてください。 + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_nb_NO.ts b/src/desktop/i18n/drawpile_nb_NO.ts index ee2b86f6fe..39d82a9de6 100644 --- a/src/desktop/i18n/drawpile_nb_NO.ts +++ b/src/desktop/i18n/drawpile_nb_NO.ts @@ -856,12 +856,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6000,7 +6000,7 @@ Values above 0.5 may not be noticeable. Na střed - + Error Chyba @@ -7819,7 +7819,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog @@ -7829,17 +7829,27 @@ Values above 0.5 may not be noticeable. - + Optional. If left blank, no password will be needed to join this session. - + + Generate + + + + + Generates a random password. + + + + Password: - + The built-in server is not available on Android. @@ -7849,7 +7859,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7864,7 +7874,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7884,7 +7909,7 @@ Values above 0.5 may not be noticeable. - + Host on this computer @@ -7894,7 +7919,7 @@ Values above 0.5 may not be noticeable. - + Host at: @@ -8019,12 +8044,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_pt_BR.ts b/src/desktop/i18n/drawpile_pt_BR.ts index 8c6cadcd8b..8713aa3b7c 100644 --- a/src/desktop/i18n/drawpile_pt_BR.ts +++ b/src/desktop/i18n/drawpile_pt_BR.ts @@ -860,13 +860,13 @@ para 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Você está hospedando uma sessão localmente. Se alguém não conseguir conectar na sua sessão, dê uma olhada na <a href="https://drawpile.net/help/hosting/">página de ajuda em hospedagem</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Você está hospedando uma sessão localmente. Se alguém não conseguir conectar na sua sessão, dê uma olhada na <a href="https://drawpile.net/localhosthelp">página de ajuda em hospedagem</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Você está hospedando uma sessão localmente, então o Drawpile precisa encontrar seu IP externo para te dar um link de convite. Para mais informações, veja também a <a href="https://drawpile.net/help/hosting/">página de ajuda em hospedagem</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Você está hospedando uma sessão localmente, então o Drawpile precisa encontrar seu IP externo para te dar um link de convite. Para mais informações, veja também a <a href="https://drawpile.net/localhosthelp">página de ajuda em hospedagem</a>. @@ -6106,7 +6106,7 @@ Valores acima de 0.5 podem não ser visíveis. Centralizar - + Error Erro @@ -7925,7 +7925,7 @@ Valores acima de 0.5 podem não ser visíveis. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog O título é mostrado na barra de título da janela e no diálogo de seleção de sessão @@ -7935,17 +7935,27 @@ Valores acima de 0.5 podem não ser visíveis. Título: - + Optional. If left blank, no password will be needed to join this session. A senha é opcional, e se deixada em branco, ninguém vai precisar de senha para entrar nessa sessão. - + + Generate + + + + + Generates a random password. + + + + Password: Senha: - + The built-in server is not available on Android. O servidor embutido não está disponível no Android. @@ -7955,7 +7965,7 @@ Valores acima de 0.5 podem não ser visíveis. O servidor embutido não está disponível nessa instalação do Drawpile. - + Enable advanced options Ativar opções avançadas @@ -7970,7 +7980,22 @@ Valores acima de 0.5 podem não ser visíveis. ID Fácil: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) Inapropriado para menores de idade (+18) @@ -7990,7 +8015,7 @@ Valores acima de 0.5 podem não ser visíveis. Anuncia a sessão numa lista pública - + Host on this computer Hospedar neste computador @@ -8000,7 +8025,7 @@ Valores acima de 0.5 podem não ser visíveis. Usar servidor interno do Drawpile - + Host at: Hospedar em: @@ -8125,13 +8150,13 @@ Valores acima de 0.5 podem não ser visíveis. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - A página de download para o Drawpile %1 deve ter aberto em seu navegador. Se não, por favor visite <em>drawpile.net</em> manualmente. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - A página de download para o Drawpile %1 não pode ser aberta. Por favor visite <em>drawpile.net</em> manualmente. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_pt_PT.ts b/src/desktop/i18n/drawpile_pt_PT.ts index 5a757cdca2..7ba73c7ff6 100644 --- a/src/desktop/i18n/drawpile_pt_PT.ts +++ b/src/desktop/i18n/drawpile_pt_PT.ts @@ -857,13 +857,13 @@ para 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Está a hospedar uma sessão localmente. Se alguém não conseguir conectar à sua sessão, dê uma olhada na <a href="https://drawpile.net/help/hosting/">página de ajuda em hospedagem</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Está a hospedar uma sessão localmente. Se alguém não conseguir conectar à sua sessão, dê uma olhada na <a href="https://drawpile.net/localhosthelp">página de ajuda em hospedagem</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Está a hospedar uma sessão localmente, então o Drawpile precisa encontrar o seu IP externo para lhe dar uma ligação de convite. Para mais informações, veja também a <a href="https://drawpile.net/help/hosting/">página de ajuda em hospedagem</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Está a hospedar uma sessão localmente, então o Drawpile precisa encontrar o seu IP externo para lhe dar uma ligação de convite. Para mais informações, veja também a <a href="https://drawpile.net/localhosthelp">página de ajuda em hospedagem</a>. @@ -6102,7 +6102,7 @@ Valores acima de 0.5 podem não ser visíveis. Centralizar - + Error Erro @@ -7921,7 +7921,7 @@ Valores acima de 0.5 podem não ser visíveis. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog O título é mostrado na barra de título da janela e no diálogo de seleção de sessão @@ -7931,17 +7931,27 @@ Valores acima de 0.5 podem não ser visíveis. Título: - + Optional. If left blank, no password will be needed to join this session. A palavra-passe é opcional, e se for deixada em branco, ninguém vai precisar de palavra-passe para entrar nessa sessão. - + + Generate + + + + + Generates a random password. + + + + Password: Palavra-passe: - + The built-in server is not available on Android. @@ -7951,7 +7961,7 @@ Valores acima de 0.5 podem não ser visíveis. - + Enable advanced options @@ -7966,7 +7976,22 @@ Valores acima de 0.5 podem não ser visíveis. ID Aliás: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) Inapropriado para menores de idade (+18) @@ -7986,7 +8011,7 @@ Valores acima de 0.5 podem não ser visíveis. Anuncia a sessão numa lista pública - + Host on this computer Hospedar neste computador @@ -7996,7 +8021,7 @@ Valores acima de 0.5 podem não ser visíveis. Usar servidor interno do Drawpile - + Host at: Hospedar em: @@ -8121,13 +8146,13 @@ Valores acima de 0.5 podem não ser visíveis. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - A página de descargas para o Drawpile %1 deve estar aberto no seu navegador. Se não, por favor visite <em>drawpile.net</em> manualmente. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - A página de descargas para o Drawpile %1 não pode ser aberta. Por favor visite <em>drawpile.net</em> manualmente. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_ru_RU.ts b/src/desktop/i18n/drawpile_ru_RU.ts index 10e12ca283..06b120fe19 100644 --- a/src/desktop/i18n/drawpile_ru_RU.ts +++ b/src/desktop/i18n/drawpile_ru_RU.ts @@ -857,12 +857,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6010,7 +6010,7 @@ Values above 0.5 may not be noticeable. По центру - + Error Ошибка @@ -7840,7 +7840,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Это название указано в заголовке приложения и в диалоге выбора сессии @@ -7850,17 +7850,27 @@ Values above 0.5 may not be noticeable. Название: - + Optional. If left blank, no password will be needed to join this session. Опционально. Если оставить пустым, для присоединения к этой сессии не понадобится пароль. - + + Generate + + + + + Generates a random password. + + + + Password: Пароль: - + The built-in server is not available on Android. @@ -7870,7 +7880,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7885,7 +7895,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) Не подходит для несовершеннолетних (NSFM) @@ -7905,7 +7930,7 @@ Values above 0.5 may not be noticeable. Опубликовать сессию в общедоступном списке - + Host on this computer @@ -7915,7 +7940,7 @@ Values above 0.5 may not be noticeable. Использовать встроенный сервер Drawpile - + Host at: @@ -8040,12 +8065,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_tr_TR.ts b/src/desktop/i18n/drawpile_tr_TR.ts index 7a6ffb1830..b9a1a6c3fc 100644 --- a/src/desktop/i18n/drawpile_tr_TR.ts +++ b/src/desktop/i18n/drawpile_tr_TR.ts @@ -857,13 +857,13 @@ yeniden boyutlandırılacak. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Yerel oturum sunmaktasınız. Eğer başkalarıoturumunuza katılamıyorsa, şu adrese bakın: <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Yerel oturum sunmaktasınız. Eğer başkalarıoturumunuza katılamıyorsa, şu adrese bakın: <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - Yerel oturum sunmaktasınız bu yüzden bir davet linki verebilmek için Drawpile dışarıdan görünür olan IP adresinizi bulmak zorunda. Daha fazla bilgi için şu adresi kontrol edin: <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + Yerel oturum sunmaktasınız bu yüzden bir davet linki verebilmek için Drawpile dışarıdan görünür olan IP adresinizi bulmak zorunda. Daha fazla bilgi için şu adresi kontrol edin: <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6099,7 +6099,7 @@ Values above 0.5 may not be noticeable. Orta - + Error Hata @@ -7907,7 +7907,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Başlık, uygulama başlık çubuğunda ve oturum seçim diyaloğunda gözükür @@ -7917,17 +7917,27 @@ Values above 0.5 may not be noticeable. Başlık: - + Optional. If left blank, no password will be needed to join this session. Opsiyonel. Boş bırakılırsa bu oturuma katılmak için şifre gerekmeyecek. - + + Generate + + + + + Generates a random password. + + + + Password: Şifre: - + The built-in server is not available on Android. Yerleşik sunucular Android'de mevcut değil. @@ -7937,7 +7947,7 @@ Values above 0.5 may not be noticeable. Yerleşik sunucular Drawpile'ın bu sürümünde mevcut değil. - + Enable advanced options Gelişmiş seçenekleri aktifleştir @@ -7952,7 +7962,22 @@ Values above 0.5 may not be noticeable. ID Takma Adı: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) 18 yaş altı için uygunsuz (UYGUNSUZ) @@ -7972,7 +7997,7 @@ Values above 0.5 may not be noticeable. Bu oturumu herkese açık listede anons et - + Host on this computer Bu bilgisayarda host @@ -7982,7 +8007,7 @@ Values above 0.5 may not be noticeable. DrawPile'ın kendi sunucusunu kullan - + Host at: Şurada Host: @@ -8107,13 +8132,13 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - Drawpile %1 indirme sayfası web tarayıcınızda açılmış olmalı. Eğer açılmadıysa, <em>drawpile.net</em> adresini manuel olarak ziyaret ediniz. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - Drawpile %1 indirme sayfası açılamadı, lütfen <em>drawpile.net</em> adresini manuel olarak ziyaret ediniz. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/i18n/drawpile_uk_UA.ts b/src/desktop/i18n/drawpile_uk_UA.ts index 35b6d83564..1c0900cae7 100644 --- a/src/desktop/i18n/drawpile_uk_UA.ts +++ b/src/desktop/i18n/drawpile_uk_UA.ts @@ -857,12 +857,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6007,7 +6007,7 @@ Values above 0.5 may not be noticeable. - + Error Помилка @@ -7837,7 +7837,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Заголовок буде показано на смужці заголовка та у вікні вибору сеансу @@ -7847,17 +7847,27 @@ Values above 0.5 may not be noticeable. Заголовок: - + Optional. If left blank, no password will be needed to join this session. Необов'язковий. Якщо не вказувати, для долучення до сеансу не доведеться вказувати пароль. - + + Generate + + + + + Generates a random password. + + + + Password: Пароль: - + The built-in server is not available on Android. @@ -7867,7 +7877,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7882,7 +7892,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7902,7 +7927,7 @@ Values above 0.5 may not be noticeable. Оголошувати сеанс у відкритому списку - + Host on this computer @@ -7912,7 +7937,7 @@ Values above 0.5 may not be noticeable. Вбудований сервер Drawpile - + Host at: @@ -8037,12 +8062,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_vi_VN.ts b/src/desktop/i18n/drawpile_vi_VN.ts index a6af749b93..e52642f66e 100644 --- a/src/desktop/i18n/drawpile_vi_VN.ts +++ b/src/desktop/i18n/drawpile_vi_VN.ts @@ -856,12 +856,12 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -5997,7 +5997,7 @@ Values above 0.5 may not be noticeable. Giữa - + Error Lỗi @@ -7805,7 +7805,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog Tiêu đề được hiển thị trong thanh tiêu đề ứng dụng và trong hôp thoại chọn phiên @@ -7815,17 +7815,27 @@ Values above 0.5 may not be noticeable. Tựa đề: - + Optional. If left blank, no password will be needed to join this session. Không bắt buộc. Nếu để trống, sẽ không cần mật khẩu để tham gia phiên này. - + + Generate + + + + + Generates a random password. + + + + Password: Mật khẩu: - + The built-in server is not available on Android. @@ -7835,7 +7845,7 @@ Values above 0.5 may not be noticeable. - + Enable advanced options @@ -7850,7 +7860,22 @@ Values above 0.5 may not be noticeable. - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) @@ -7870,7 +7895,7 @@ Values above 0.5 may not be noticeable. Thông báo phiên tại một danh sách công khai - + Host on this computer @@ -7880,7 +7905,7 @@ Values above 0.5 may not be noticeable. Sử dụng máy chủ tích hợp của Drawpile - + Host at: @@ -8005,12 +8030,12 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. diff --git a/src/desktop/i18n/drawpile_zh_CN.ts b/src/desktop/i18n/drawpile_zh_CN.ts index 0d419a7d35..0e7f120dea 100644 --- a/src/desktop/i18n/drawpile_zh_CN.ts +++ b/src/desktop/i18n/drawpile_zh_CN.ts @@ -857,13 +857,13 @@ to 64x64 pixels. - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - 你使用本机创建了房间. 如果其他人无法加入你的房间, 请查看 <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + 你使用本机创建了房间. 如果其他人无法加入你的房间, 请查看 <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. - 你使用本机创建了房间, 因此Drawpile必须找到你的外部可见 IP 地址才能为你提供邀请链接. 更多信息, 请查看 <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. + 你使用本机创建了房间, 因此Drawpile必须找到你的外部可见 IP 地址才能为你提供邀请链接. 更多信息, 请查看 <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. @@ -6099,7 +6099,7 @@ Values above 0.5 may not be noticeable. 居中 - + Error 错误 @@ -7907,7 +7907,7 @@ Values above 0.5 may not be noticeable. dialogs::startdialog::Host - + The title is shown in the application title bar and in the session selection dialog 房名会显示在程序的标题栏上和房间列表界面中 @@ -7917,17 +7917,27 @@ Values above 0.5 may not be noticeable. 房名: - + Optional. If left blank, no password will be needed to join this session. 可选的.如果留空,则无需密码即可加入此房间. - + + Generate + + + + + Generates a random password. + + + + Password: 密码: - + The built-in server is not available on Android. 内置服务器在安卓中无法使用. @@ -7937,7 +7947,7 @@ Values above 0.5 may not be noticeable. 内置服务器在此安装版本的Drawpile无法使用. - + Enable advanced options 启用高级选项 @@ -7952,7 +7962,22 @@ Values above 0.5 may not be noticeable. 后缀: - + + A session title is required. + + + + + Without a password set, anyone can join your session! If you want to host a private session, choose a password or <a href="#">generate one</a>. + + + + + Hosting on your computer requires additional setup! <a href="#">Click here for instructions.</a> + + + + Not suitable for minors (NSFM) 未成年人勿入 @@ -7972,7 +7997,7 @@ Values above 0.5 may not be noticeable. 公开在列表上 - + Host on this computer 本机 @@ -7982,7 +8007,7 @@ Values above 0.5 may not be noticeable. 使用 Drawpile 的内置服务器 - + Host at: 远程服务器: @@ -8107,13 +8132,13 @@ Values above 0.5 may not be noticeable. - The download page for Drawpile %1 should have opened in your browser. If not, please visit <em>drawpile.net</em> manually. - Drawpile %1 的下载页面应该已经在你的浏览器中打开了.如果没有,请手动访问 <em>drawpile.net</em> . + The download page for Drawpile %1 should have opened in your browser. If not, please visit <strong>drawpile.net</strong> manually. + - The download page for Drawpile %1 could not be opened, please visit <em>drawpile.net</em> manually. - Drawpile %1 的下载页面无法打开,请手动访问 <em>drawpile.net</em> . + The download page for Drawpile %1 could not be opened, please visit <strong>drawpile.net</strong> manually. + diff --git a/src/desktop/ui/invitedialog.ui b/src/desktop/ui/invitedialog.ui index c75d348907..8e449ab00d 100644 --- a/src/desktop/ui/invitedialog.ui +++ b/src/desktop/ui/invitedialog.ui @@ -132,7 +132,7 @@ - You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally. If others can't join your session, take a look at <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. Qt::RichText @@ -177,7 +177,7 @@ - You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/help/hosting/">the help page on hosting</a>. + You're hosting a session locally, so Drawpile has to find your externally visible IP address to give you an invite link. For more information, check out <a href="https://drawpile.net/localhosthelp">the help page on hosting</a>. Qt::RichText diff --git a/src/libclient/i18n/libclient_en_US.ts b/src/libclient/i18n/libclient_en_US.ts index a25d60232f..b805706ff0 100644 --- a/src/libclient/i18n/libclient_en_US.ts +++ b/src/libclient/i18n/libclient_en_US.ts @@ -1154,7 +1154,7 @@ Session terminated by administrator: %1 %1 is the reason given. - + From e82a08672e1d3fa73aa53bce51c2853343c821a2 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 14:12:25 +0100 Subject: [PATCH 16/19] Fudge canvas transforms to avoid jittering pixels At certain zooms and rotations, Qt's rendering ends up with pixel positions that jitter around when the view is updated. Now those values get fudged to more sightly numbers, which seems to mostly prevent the issue. It still happens at some rotations, but we can't really clamp things hard than singular degrees. --- ChangeLog | 1 + src/desktop/scene/canvasview.cpp | 87 ++++++++++++++++++++++---------- src/desktop/scene/canvasview.h | 1 + 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4a3f7f753..2e0a2afa92 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,6 +48,7 @@ Unreleased Version 2.2.0-pre * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. * Fix: Make onion skin color partially transparent by default so that they don't turn into solid blocks on colored stuff. Thanks BulletPepper for reporting. * Fix: Clarify the host dialog by adding additional messages that explain common sources of confusion, such as the title being required, the password being necessary to host a private session and "host on this computer" requiring port forwarding. + * Fix: Prevent jittering pixels on the canvas at certain zooms and rotations. Thanks Bluestrings, Meru and taiyu for reporting and helping with this. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/scene/canvasview.cpp b/src/desktop/scene/canvasview.cpp index 89bcbaf71e..4878689cd3 100644 --- a/src/desktop/scene/canvasview.cpp +++ b/src/desktop/scene/canvasview.cpp @@ -454,17 +454,23 @@ void CanvasView::setZoomAt(qreal zoom, const QPointF &point) { qreal newZoom = qBound(zoomMin, zoom, zoomMax); if(newZoom != m_zoom) { - QTransform matrix; - mirrorFlip(matrix, m_mirror, m_flip); - matrix.rotate(m_rotate); - - updateCanvasTransform([&] { - m_pos += matrix.map(point * (newZoom - m_zoom)); + qreal inew = roundZoom(newZoom); + qreal iold = roundZoom(m_zoom); + if(inew == iold) { m_zoom = newZoom; - }); + } else { + QTransform matrix; + mirrorFlip(matrix, m_mirror, m_flip); + matrix.rotate(m_rotate); - emitViewTransformed(); - showTransformNotice(getZoomNotice()); + updateCanvasTransform([&] { + m_pos += matrix.map(point * (inew - iold)); + m_zoom = newZoom; + }); + + emitViewTransformed(); + showTransformNotice(getZoomNotice()); + } } } @@ -481,21 +487,27 @@ void CanvasView::setRotation(qreal angle) } if(angle != m_rotate) { - QTransform prev, cur; - prev.rotate(m_rotate); - cur.rotate(angle); - - updateCanvasTransform([&] { - if(inverted) { - m_pos = cur.inverted().map(prev.map(m_pos)); - } else { - m_pos = prev.inverted().map(cur.map(m_pos)); - } + qreal inew = std::rint(angle); + qreal iold = std::rint(m_rotate); + if(inew == iold) { m_rotate = angle; - }); + } else { + QTransform prev, cur; + prev.rotate(iold); + cur.rotate(inew); - emitViewTransformed(); - showTransformNotice(getRotationNotice()); + updateCanvasTransform([&] { + if(inverted) { + m_pos = cur.inverted().map(prev.map(m_pos)); + } else { + m_pos = prev.inverted().map(cur.map(m_pos)); + } + m_rotate = angle; + }); + + emitViewTransformed(); + showTransformNotice(getRotationNotice()); + } } } @@ -2176,16 +2188,37 @@ QTransform CanvasView::calculateCanvasTransformFrom( const QPointF &pos, qreal zoom, qreal rotate, bool mirror, bool flip) { QTransform matrix; - matrix.translate(-pos.x(), -pos.y()); - matrix.scale(zoom, zoom); + matrix.translate(std::rint(-pos.x()), std::rint(-pos.y())); + qreal roundedZoom = roundZoom(zoom); + matrix.scale(roundedZoom, roundedZoom); mirrorFlip(matrix, mirror, flip); - matrix.rotate(rotate); + matrix.rotate(std::rint(rotate)); return matrix; } +qreal CanvasView::roundZoom(qreal zoom) +{ + // Qt's rendering ends up with jittering pixels at inopportune scales. These + // fudged precisions at different sizes seem to prevent the issue. + qreal precision = zoom < 1.0 ? 1000.0 + : zoom < 2.0 ? 100.0 + : zoom < 4.0 ? 50.0 + : zoom < 10.0 ? 10.0 + : 2.0; + return std::rint(zoom * precision) / precision; +} + void CanvasView::mirrorFlip(QTransform &matrix, bool mirror, bool flip) { - matrix.scale(mirror ? -1.0 : 1.0, flip ? -1.0 : 1.0); + if(mirror) { + if(flip) { + matrix.scale(-1.0, -1.0); + } else { + matrix.scale(-1.0, 1.0); + } + } else if(flip) { + matrix.scale(1.0, -1.0); + } } void CanvasView::emitViewTransformed() @@ -2281,7 +2314,7 @@ QString CanvasView::getZoomNotice() const QString CanvasView::getRotationNotice() const { - return tr("Rotation: %1°").arg(rotation(), 0, 'f', 2); + return tr("Rotation: %1°").arg(int(rotation())); } void CanvasView::showTouchTransformNotice() diff --git a/src/desktop/scene/canvasview.h b/src/desktop/scene/canvasview.h index d4dfbd44e1..5420f1cafb 100644 --- a/src/desktop/scene/canvasview.h +++ b/src/desktop/scene/canvasview.h @@ -290,6 +290,7 @@ private slots: static QTransform calculateCanvasTransformFrom( const QPointF &pos, qreal zoom, qreal rotate, bool mirror, bool flip); + static qreal roundZoom(qreal zoom); static void mirrorFlip(QTransform &matrix, bool mirror, bool flip); void emitViewTransformed(); From 9cbc7c515cc25ba0c3e8876e624c2f5fd6aa2c4b Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 16:23:21 +0100 Subject: [PATCH 17/19] Revert incorrect Chinese translations Not sure how they got changed, but it was not intentional. --- src/desktop/i18n/drawpile_zh_CN.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/desktop/i18n/drawpile_zh_CN.ts b/src/desktop/i18n/drawpile_zh_CN.ts index 0e7f120dea..1f4fd6d5b4 100644 --- a/src/desktop/i18n/drawpile_zh_CN.ts +++ b/src/desktop/i18n/drawpile_zh_CN.ts @@ -7810,7 +7810,7 @@ Values above 0.5 may not be noticeable. NSFM - 不适于未成年人的 + 18禁房 @@ -9402,7 +9402,7 @@ Values above 0.5 may not be noticeable. Add - 线性减淡 + 添加 From 46d6c7b8b88ff7d2def3f9e84daf50bc53bba608 Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 20:00:38 +0100 Subject: [PATCH 18/19] Revert transform fudging, found a better solution This reverts commit e82a08672e1d3fa73aa53bce51c2853343c821a2. --- ChangeLog | 1 - src/desktop/scene/canvasview.cpp | 87 ++++++++++---------------------- src/desktop/scene/canvasview.h | 1 - 3 files changed, 27 insertions(+), 62 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2e0a2afa92..e4a3f7f753 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,7 +48,6 @@ Unreleased Version 2.2.0-pre * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. * Fix: Make onion skin color partially transparent by default so that they don't turn into solid blocks on colored stuff. Thanks BulletPepper for reporting. * Fix: Clarify the host dialog by adding additional messages that explain common sources of confusion, such as the title being required, the password being necessary to host a private session and "host on this computer" requiring port forwarding. - * Fix: Prevent jittering pixels on the canvas at certain zooms and rotations. Thanks Bluestrings, Meru and taiyu for reporting and helping with this. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/scene/canvasview.cpp b/src/desktop/scene/canvasview.cpp index 4878689cd3..89bcbaf71e 100644 --- a/src/desktop/scene/canvasview.cpp +++ b/src/desktop/scene/canvasview.cpp @@ -454,23 +454,17 @@ void CanvasView::setZoomAt(qreal zoom, const QPointF &point) { qreal newZoom = qBound(zoomMin, zoom, zoomMax); if(newZoom != m_zoom) { - qreal inew = roundZoom(newZoom); - qreal iold = roundZoom(m_zoom); - if(inew == iold) { - m_zoom = newZoom; - } else { - QTransform matrix; - mirrorFlip(matrix, m_mirror, m_flip); - matrix.rotate(m_rotate); + QTransform matrix; + mirrorFlip(matrix, m_mirror, m_flip); + matrix.rotate(m_rotate); - updateCanvasTransform([&] { - m_pos += matrix.map(point * (inew - iold)); - m_zoom = newZoom; - }); + updateCanvasTransform([&] { + m_pos += matrix.map(point * (newZoom - m_zoom)); + m_zoom = newZoom; + }); - emitViewTransformed(); - showTransformNotice(getZoomNotice()); - } + emitViewTransformed(); + showTransformNotice(getZoomNotice()); } } @@ -487,27 +481,21 @@ void CanvasView::setRotation(qreal angle) } if(angle != m_rotate) { - qreal inew = std::rint(angle); - qreal iold = std::rint(m_rotate); - if(inew == iold) { - m_rotate = angle; - } else { - QTransform prev, cur; - prev.rotate(iold); - cur.rotate(inew); + QTransform prev, cur; + prev.rotate(m_rotate); + cur.rotate(angle); - updateCanvasTransform([&] { - if(inverted) { - m_pos = cur.inverted().map(prev.map(m_pos)); - } else { - m_pos = prev.inverted().map(cur.map(m_pos)); - } - m_rotate = angle; - }); + updateCanvasTransform([&] { + if(inverted) { + m_pos = cur.inverted().map(prev.map(m_pos)); + } else { + m_pos = prev.inverted().map(cur.map(m_pos)); + } + m_rotate = angle; + }); - emitViewTransformed(); - showTransformNotice(getRotationNotice()); - } + emitViewTransformed(); + showTransformNotice(getRotationNotice()); } } @@ -2188,37 +2176,16 @@ QTransform CanvasView::calculateCanvasTransformFrom( const QPointF &pos, qreal zoom, qreal rotate, bool mirror, bool flip) { QTransform matrix; - matrix.translate(std::rint(-pos.x()), std::rint(-pos.y())); - qreal roundedZoom = roundZoom(zoom); - matrix.scale(roundedZoom, roundedZoom); + matrix.translate(-pos.x(), -pos.y()); + matrix.scale(zoom, zoom); mirrorFlip(matrix, mirror, flip); - matrix.rotate(std::rint(rotate)); + matrix.rotate(rotate); return matrix; } -qreal CanvasView::roundZoom(qreal zoom) -{ - // Qt's rendering ends up with jittering pixels at inopportune scales. These - // fudged precisions at different sizes seem to prevent the issue. - qreal precision = zoom < 1.0 ? 1000.0 - : zoom < 2.0 ? 100.0 - : zoom < 4.0 ? 50.0 - : zoom < 10.0 ? 10.0 - : 2.0; - return std::rint(zoom * precision) / precision; -} - void CanvasView::mirrorFlip(QTransform &matrix, bool mirror, bool flip) { - if(mirror) { - if(flip) { - matrix.scale(-1.0, -1.0); - } else { - matrix.scale(-1.0, 1.0); - } - } else if(flip) { - matrix.scale(1.0, -1.0); - } + matrix.scale(mirror ? -1.0 : 1.0, flip ? -1.0 : 1.0); } void CanvasView::emitViewTransformed() @@ -2314,7 +2281,7 @@ QString CanvasView::getZoomNotice() const QString CanvasView::getRotationNotice() const { - return tr("Rotation: %1°").arg(int(rotation())); + return tr("Rotation: %1°").arg(rotation(), 0, 'f', 2); } void CanvasView::showTouchTransformNotice() diff --git a/src/desktop/scene/canvasview.h b/src/desktop/scene/canvasview.h index 5420f1cafb..d4dfbd44e1 100644 --- a/src/desktop/scene/canvasview.h +++ b/src/desktop/scene/canvasview.h @@ -290,7 +290,6 @@ private slots: static QTransform calculateCanvasTransformFrom( const QPointF &pos, qreal zoom, qreal rotate, bool mirror, bool flip); - static qreal roundZoom(qreal zoom); static void mirrorFlip(QTransform &matrix, bool mirror, bool flip); void emitViewTransformed(); From 275ee011d27388d89aa1d9ed97de8e598d8dd68a Mon Sep 17 00:00:00 2001 From: askmeaboutloom Date: Fri, 1 Dec 2023 20:00:14 +0100 Subject: [PATCH 19/19] Prevent jittering pixels using FullViewportUpdate In the canvas view. The default MinimalViewportUpdate has some inaccuracies that cause pixels to jitter in changed areas at certain zooms and/or rotations. Updating the whole view instead is stable. This was contributed by Meru. --- ChangeLog | 1 + src/desktop/scene/canvasview.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index e4a3f7f753..0e9e0d5a25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,6 +48,7 @@ Unreleased Version 2.2.0-pre * Fix: Don't act like keep aspect ratio is checked when resizing from a selection. Thanks Meru for reporting. * Fix: Make onion skin color partially transparent by default so that they don't turn into solid blocks on colored stuff. Thanks BulletPepper for reporting. * Fix: Clarify the host dialog by adding additional messages that explain common sources of confusion, such as the title being required, the password being necessary to host a private session and "host on this computer" requiring port forwarding. + * Fix: Prevent jittering pixels on the canvas at certain zooms and rotations. Thanks Bluestrings, Meru and taiyu for reporting this. Also thanks Meru for actually finding the solution and contributing this fix. 2023-11-12 Version 2.2.0-beta.10 * Fix: Don't deadlock on first startup. Thanks to Hail, lowontrash, FARBOL234, Dorokinyo and hamlin for reporting. diff --git a/src/desktop/scene/canvasview.cpp b/src/desktop/scene/canvasview.cpp index 89bcbaf71e..8460e4c999 100644 --- a/src/desktop/scene/canvasview.cpp +++ b/src/desktop/scene/canvasview.cpp @@ -72,6 +72,7 @@ CanvasView::CanvasView(QWidget *parent) , m_blockNotices{false} , m_hoveringOverHud{false} { + setViewportUpdateMode(FullViewportUpdate); viewport()->setAcceptDrops(true); viewport()->setAttribute(Qt::WA_AcceptTouchEvents); viewport()->setMouseTracking(true);