Check that sticker drag point is inside.

This commit is contained in:
John Preston 2019-08-18 17:03:34 +03:00
parent 06fbb2edc4
commit b814c6307a
2 changed files with 33 additions and 0 deletions

View File

@ -195,6 +195,38 @@ void UnwrappedMedia::drawSurrounding(
}
}
PointState UnwrappedMedia::pointState(QPoint point) const {
if (width() < st::msgPadding.left() + st::msgPadding.right() + 1) {
return PointState::Outside;
}
const auto rightAligned = _parent->hasOutLayout() && !Adaptive::ChatWide();
const auto inWebPage = (_parent->media() != this);
const auto item = _parent->data();
const auto via = inWebPage ? nullptr : item->Get<HistoryMessageVia>();
const auto reply = inWebPage ? nullptr : item->Get<HistoryMessageReply>();
auto usex = 0;
auto usew = maxWidth();
if (!inWebPage) {
usew -= additionalWidth(via, reply);
if (rightAligned) {
usex = width() - usew;
}
}
if (rtl()) {
usex = width() - usex - usew;
}
const auto usey = rightAligned ? 0 : (height() - _contentSize.height());
const auto useh = rightAligned
? std::max(
_contentSize.height(),
height() - st::msgDateImgPadding.y() * 2 - st::msgDateFont->height)
: _contentSize.height();
const auto inner = QRect(usex, usey, usew, useh);
return inner.contains(point) ? PointState::Inside : PointState::Outside;
}
TextState UnwrappedMedia::textState(QPoint point, StateRequest request) const {
auto result = TextState(_parent);
if (width() < st::msgPadding.left() + st::msgPadding.right() + 1) {

View File

@ -49,6 +49,7 @@ public:
std::unique_ptr<Content> content);
void draw(Painter &p, const QRect &r, TextSelection selection, crl::time ms) const override;
PointState pointState(QPoint point) const override;
TextState textState(QPoint point, StateRequest request) const override;
bool toggleSelectionByHandlerClick(const ClickHandlerPtr &p) const override {