diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 6a30d790c..9c8b6c3f9 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2445,21 +2445,6 @@ int BotKeyboard::Style::minButtonWidth(HistoryMessageReplyMarkup::Button::Type t return result; } -void BotKeyboard::resizeEvent(QResizeEvent *e) { - if (!_impl) return; - - updateStyle(); - - _height = _impl->naturalHeight() + st::botKbScroll.deltat + st::botKbScroll.deltab; - if (_maximizeSize) _height = qMax(_height, _maxOuterHeight); - if (height() != _height) { - resize(width(), _height); - return; - } - - _impl->resize(width() - _st->margin - st::botKbScroll.width, _height - (st::botKbScroll.deltat + st::botKbScroll.deltab)); -} - void BotKeyboard::mousePressEvent(QMouseEvent *e) { _lastMousePos = e->globalPos(); updateSelected(); @@ -2529,14 +2514,8 @@ bool BotKeyboard::updateMarkup(HistoryItem *to, bool force) { } } - updateStyle(); - _height = st::botKbScroll.deltat + st::botKbScroll.deltab + (_impl ? _impl->naturalHeight() : 0); - if (_maximizeSize) _height = qMax(_height, _maxOuterHeight); - if (height() != _height) { - resize(width(), _height); - } else { - resizeEvent(nullptr); - } + resizeToWidth(width(), _maxOuterHeight); + return true; } @@ -2548,13 +2527,23 @@ bool BotKeyboard::forceReply() const { return _forceReply; } -void BotKeyboard::resizeToWidth(int width, int maxOuterHeight) { - updateStyle(width); - _height = st::botKbScroll.deltat + st::botKbScroll.deltab + (_impl ? _impl->naturalHeight() : 0); +void BotKeyboard::resizeToWidth(int newWidth, int maxOuterHeight) { _maxOuterHeight = maxOuterHeight; - if (_maximizeSize) _height = qMax(_height, _maxOuterHeight); - resize(width, _height); + updateStyle(newWidth); + _height = st::botKbScroll.deltat + st::botKbScroll.deltab + (_impl ? _impl->naturalHeight() : 0); + if (_maximizeSize) { + accumulate_max(_height, _maxOuterHeight); + } + if (_impl) { + int implWidth = newWidth - _st->margin - st::botKbScroll.width; + int implHeight = _height - (st::botKbScroll.deltat + st::botKbScroll.deltab); + _impl->resize(implWidth, implHeight); + } + QSize newSize(newWidth, _height); + if (newSize != size()) { + resize(newSize); + } } bool BotKeyboard::maximizeSize() const { @@ -2565,10 +2554,10 @@ bool BotKeyboard::singleUse() const { return _singleUse; } -void BotKeyboard::updateStyle(int32 w) { +void BotKeyboard::updateStyle(int newWidth) { if (!_impl) return; - int implWidth = ((w < 0) ? width() : w) - st::botKbButton.margin - st::botKbScroll.width; + int implWidth = newWidth - st::botKbButton.margin - st::botKbScroll.width; _st = _impl->isEnoughSpace(implWidth, st::botKbButton) ? &st::botKbButton : &st::botKbTinyButton; _impl->setStyle(std_::make_unique<Style>(this, *_st)); @@ -2594,13 +2583,6 @@ QString BotKeyboard::tooltipText() const { return QString(); } -//void BotKeyboard::onParentScrolled() { -// // Holding scrollarea can fire scrolled() event from a resize() call before -// // the resizeEvent() is called, which prepares _impl for updateSelected() call. -// // Calling updateSelected() without delay causes _impl->getState() before _impl->resize(). -// QMetaObject::invokeMethod(this, "updateSelected", Qt::QueuedConnection); -//} - void BotKeyboard::updateSelected() { PopupTooltip::Show(1000, this); @@ -3086,8 +3068,6 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _kbScroll.setWidget(&_keyboard); _kbScroll.hide(); -// connect(&_kbScroll, SIGNAL(scrolled()), &_keyboard, SLOT(onParentScrolled())); - updateScrollColors(); _historyToEnd->installEventFilter(this); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index dcb5f05b0..c1481437b 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -357,7 +357,6 @@ public: BotKeyboard(); void paintEvent(QPaintEvent *e) override; - void resizeEvent(QResizeEvent *e) override; void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; @@ -371,7 +370,7 @@ public: bool forceReply() const; void step_selected(uint64 ms, bool timer); - void resizeToWidth(int width, int maxOuterHeight); + void resizeToWidth(int newWidth, int maxOuterHeight); bool maximizeSize() const; bool singleUse() const; @@ -388,18 +387,10 @@ public: void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override; void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool pressed) override; -//public slots: -// -// void onParentScrolled(); - -//private slots: private: - void updateSelected(); -private: - - void updateStyle(int32 w = -1); + void updateStyle(int newWidth); void clearSelection(); FullMsgId _wasForMsgId; diff --git a/Telegram/SourceFiles/platform/win/windows_dlls.cpp b/Telegram/SourceFiles/platform/win/windows_dlls.cpp index ae7bef04e..048aed929 100644 --- a/Telegram/SourceFiles/platform/win/windows_dlls.cpp +++ b/Telegram/SourceFiles/platform/win/windows_dlls.cpp @@ -43,7 +43,6 @@ HINSTANCE LibShell32; HINSTANCE LibWtsApi32; HINSTANCE LibPropSys; HINSTANCE LibComBase; -HINSTANCE LibWinRtString; void start() { LibUxTheme = LoadLibrary(L"UXTHEME.DLL"); @@ -66,10 +65,8 @@ void start() { LibComBase = LoadLibrary(L"COMBASE.DLL"); load(LibComBase, "RoGetActivationFactory", RoGetActivationFactory); - - LibWinRtString = LoadLibrary(L"api-ms-win-core-winrt-string-l1-1-0.dll"); - load(LibWinRtString, "WindowsCreateStringReference", WindowsCreateStringReference); - load(LibWinRtString, "WindowsDeleteString", WindowsDeleteString); + load(LibComBase, "WindowsCreateStringReference", WindowsCreateStringReference); + load(LibComBase, "WindowsDeleteString", WindowsDeleteString); } } // namespace Dlls diff --git a/Telegram/SourceFiles/platform/win/windows_dlls.h b/Telegram/SourceFiles/platform/win/windows_dlls.h index 2a998a37e..0e684d46c 100644 --- a/Telegram/SourceFiles/platform/win/windows_dlls.h +++ b/Telegram/SourceFiles/platform/win/windows_dlls.h @@ -78,8 +78,6 @@ extern f_PropVariantToString PropVariantToString; typedef HRESULT (FAR STDAPICALLTYPE *f_RoGetActivationFactory)(_In_ HSTRING activatableClassId, _In_ REFIID iid, _COM_Outptr_ void ** factory); extern f_RoGetActivationFactory RoGetActivationFactory; -// api-ms-win-core-winrt-string-l1-1-0.dll - typedef HRESULT (FAR STDAPICALLTYPE *f_WindowsCreateStringReference)(_In_reads_opt_(length + 1) PCWSTR sourceString, UINT32 length, _Out_ HSTRING_HEADER * hstringHeader, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * string); extern f_WindowsCreateStringReference WindowsCreateStringReference; diff --git a/Telegram/SourceFiles/pspecific_win.cpp b/Telegram/SourceFiles/pspecific_win.cpp index e75983310..effc56d8a 100644 --- a/Telegram/SourceFiles/pspecific_win.cpp +++ b/Telegram/SourceFiles/pspecific_win.cpp @@ -98,7 +98,7 @@ namespace { _PsInitializer() { Dlls::start(); - useOpenWith = (Dlls::SHAssocEnumHandlers != nullptr) && (SHCreateItemFromParsingName != nullptr); + useOpenWith = (Dlls::SHAssocEnumHandlers != nullptr) && (Dlls::SHCreateItemFromParsingName != nullptr); useOpenAs = (Dlls::SHOpenWithDialog != nullptr) || (Dlls::OpenAs_RunDLL != nullptr); useShellapi = (Dlls::SHQueryUserNotificationState != nullptr); } diff --git a/Telegram/SourceFiles/ui/text/text.cpp b/Telegram/SourceFiles/ui/text/text.cpp index 4cba8e371..5539f8472 100644 --- a/Telegram/SourceFiles/ui/text/text.cpp +++ b/Telegram/SourceFiles/ui/text/text.cpp @@ -943,12 +943,18 @@ public: _y = top; _yFrom = yFrom + top; _yTo = (yTo < 0) ? -1 : (yTo + top); - if (_elideLast) { - _yToElide = _yTo; - } _selection = selection; _fullWidthSelection = fullWidthSelection; _wLeft = _w = w; + if (_elideLast) { + _yToElide = _yTo; + if (_elideRemoveFromEnd > 0 && !_t->_blocks.isEmpty()) { + int firstBlockHeight = countBlockHeight(_t->_blocks.front(), _t->_font); + if (_y + firstBlockHeight >= _yToElide) { + _wLeft -= _elideRemoveFromEnd; + } + } + } _str = _t->_text.unicode(); if (_p) {