From a32ff465797d8b3e39e9011eb135a4240d2ca979 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 18 Oct 2024 07:27:49 +0300 Subject: [PATCH] Added special hotkeys to change IV zoom more gradually. --- Telegram/Resources/langs/lang.strings | 2 + Telegram/SourceFiles/iv/iv_controller.cpp | 53 ++++++++++++++++++++--- Telegram/lib_ui | 2 +- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 60c7a6413..600f37e1d 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -5562,6 +5562,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_iv_window_title" = "Instant View"; "lng_iv_wrong_layout" = "Wrong layout?"; "lng_iv_not_supported" = "This link appears to be invalid."; +"lng_iv_zoom_tooltip_ctrl" = "Hold Ctrl to zoom by 5%.\nHold Alt to zoom by 1%."; +"lng_iv_zoom_tooltip_cmd" = "Hold Cmd to zoom by 5%.\nHold Alt to zoom by 1%."; "lng_limit_download_title" = "Download speed limited"; "lng_limit_download_subscribe" = "Subscribe to {link} to increase download speed {increase}."; diff --git a/Telegram/SourceFiles/iv/iv_controller.cpp b/Telegram/SourceFiles/iv/iv_controller.cpp index 486778ef7..c17fd8368 100644 --- a/Telegram/SourceFiles/iv/iv_controller.cpp +++ b/Telegram/SourceFiles/iv/iv_controller.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "iv/iv_controller.h" #include "base/platform/base_platform_info.h" +#include "base/qt/qt_key_modifiers.h" #include "base/invoke_queued.h" #include "base/qt_signal_producer.h" #include "base/qthelp_url.h" @@ -21,9 +22,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/menu/menu_action.h" #include "ui/widgets/rp_window.h" #include "ui/widgets/popup_menu.h" +#include "ui/widgets/tooltip.h" #include "ui/wrap/fade_wrap.h" #include "ui/basic_click_handlers.h" #include "ui/painter.h" +#include "ui/rect.h" #include "ui/webview_helpers.h" #include "ui/ui_utility.h" #include "webview/webview_data_stream_memory.h" @@ -52,9 +55,13 @@ namespace Iv { namespace { constexpr auto kZoomStep = int(10); +constexpr auto kZoomSmallStep = int(5); +constexpr auto kZoomTinyStep = int(1); constexpr auto kDefaultZoom = int(100); -class ItemZoom final : public Ui::Menu::Action { +class ItemZoom final + : public Ui::Menu::Action + , public Ui::AbstractTooltipShower { public: ItemZoom( not_null parent, @@ -109,10 +116,21 @@ public: }; + const auto processTooltip = [=, this](not_null w) { + w->events() | rpl::start_with_next([=](not_null e) { + if (e->type() == QEvent::Enter) { + Ui::Tooltip::Show(1000, this); + } else if (e->type() == QEvent::Leave) { + Ui::Tooltip::Hide(); + } + }, w->lifetime()); + }; + const auto reset = Ui::CreateChild( this, rpl::single(QString()), st::ivResetZoom); + processTooltip(reset); const auto resetLabel = Ui::CreateChild( reset, tr::lng_background_reset_default(), @@ -128,8 +146,16 @@ public: '+', 0, _st.itemFg); - plus->setClickedCallback([this] { - _delegate->ivSetZoom(_delegate->ivZoom() + kZoomStep); + processTooltip(plus); + const auto step = [] { + return base::IsAltPressed() + ? kZoomTinyStep + : base::IsCtrlPressed() + ? kZoomSmallStep + : kZoomStep; + }; + plus->setClickedCallback([this, step] { + _delegate->ivSetZoom(_delegate->ivZoom() + step()); }); plus->show(); const auto minus = Ui::CreateChild( @@ -137,8 +163,9 @@ public: QChar(0x2013), -1, _st.itemFg); - minus->setClickedCallback([this] { - _delegate->ivSetZoom(_delegate->ivZoom() - kZoomStep); + processTooltip(minus); + minus->setClickedCallback([this, step] { + _delegate->ivSetZoom(_delegate->ivZoom() - step()); }); minus->show(); @@ -182,6 +209,22 @@ public: }); } + QString tooltipText() const override { +#ifdef Q_OS_MAC + return tr::lng_iv_zoom_tooltip_cmd(tr::now); +#else + return tr::lng_iv_zoom_tooltip_ctrl(tr::now); +#endif + } + + QPoint tooltipPos() const override { + return QCursor::pos(); + } + + bool tooltipWindowActive() const override { + return true; + } + private: const not_null _delegate; const style::Menu &_st; diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 887f54143..9ac125c50 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 887f5414302a1e8fd84cd880ef8454aa21b681da +Subproject commit 9ac125c505ef105c62c50dd102d19f20f09210c1