From a9b5e22b37b101cba25035d5a2d526ab8b415fb5 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 11 Oct 2025 13:45:51 +0300 Subject: [PATCH] Slightly improved behavior of visibility for chars limit in notes. --- .../boxes/peers/edit_contact_box.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp index 818624b594..d5a9f7b135 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp @@ -449,25 +449,25 @@ void Controller::setupNotesField() { }; const auto limitState = _notesField->lifetime().make_state(); - const auto checkCharsLimitation = [=] { + const auto checkCharsLimitation = [=, w = _notesField->window()] { const auto limit = Data::PremiumLimits( &_user->session()).contactNoteLengthCurrent(); const auto remove = Ui::ComputeFieldCharacterCount(_notesField) - limit; if (!limitState->charsLimitation) { + const auto border = _notesField->st().borderActive; limitState->charsLimitation = base::make_unique_q( _box->verticalLayout(), emojiButton, style::al_top, - QMargins{ 0, -st::lineWidth, 0, 0 }); - _notesField->heightValue( - ) | rpl::start_with_next([=](int height) { - const auto &st = _notesField->st(); - const auto hasMultipleLines = height > - (st.textMargins.top() - + st.style.font->height - + st.textMargins.bottom() * 2); - limitState->charsLimitation->setVisible(hasMultipleLines); + QMargins{ 0, -border - _notesField->st().border, 0, 0 }); + rpl::combine( + limitState->charsLimitation->geometryValue(), + _notesField->geometryValue() + ) | rpl::start_with_next([=](QRect limit, QRect field) { + limitState->charsLimitation->setVisible( + (w->mapToGlobal(limit.bottomLeft()).y() - border) + < w->mapToGlobal(field.bottomLeft()).y()); limitState->charsLimitation->raise(); }, limitState->charsLimitation->lifetime()); }