mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-19 15:47:11 +02:00
Added floating date badge to Shared Photos and Shared Videos.
This commit is contained in:
parent
2cd8b00610
commit
5c54d3690c
5 changed files with 93 additions and 5 deletions
|
@ -51,7 +51,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
namespace HistoryView {
|
||||
namespace {
|
||||
|
||||
constexpr auto kScrollDateHideTimeout = 1000;
|
||||
constexpr auto kPreloadedScreensCount = 4;
|
||||
constexpr auto kPreloadIfLessThanScreens = 2;
|
||||
constexpr auto kPreloadedScreensCountFull
|
||||
|
@ -743,7 +742,7 @@ void ListWidget::scrollDateCheck() {
|
|||
}
|
||||
_scrollDateLastItem = _visibleTopItem;
|
||||
_scrollDateLastItemTop = _visibleTopFromItem;
|
||||
_scrollDateHideTimer.callOnce(kScrollDateHideTimeout);
|
||||
_scrollDateHideTimer.callOnce(st::historyScrollDateHideTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -766,7 +765,7 @@ void ListWidget::keepScrollDateForNow() {
|
|||
&& _scrollDateOpacity.animating()) {
|
||||
toggleScrollDateShown();
|
||||
}
|
||||
_scrollDateHideTimer.callOnce(kScrollDateHideTimeout);
|
||||
_scrollDateHideTimer.callOnce(st::historyScrollDateHideTimeout);
|
||||
}
|
||||
|
||||
void ListWidget::toggleScrollDateShown() {
|
||||
|
|
|
@ -947,3 +947,6 @@ inviteLinkQrValuePadding: margins(22px, 0px, 22px, 12px);
|
|||
infoAboutGigagroup: FlatLabel(defaultFlatLabel) {
|
||||
minWidth: 274px;
|
||||
}
|
||||
|
||||
infoScrollDateHideTimeout: historyScrollDateHideTimeout;
|
||||
infoDateFadeDuration: historyDateFadeDuration;
|
||||
|
|
|
@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "history/history_item.h"
|
||||
#include "history/history.h"
|
||||
#include "history/view/history_view_cursor_state.h"
|
||||
#include "history/view/history_view_service_message.h"
|
||||
#include "window/themes/window_theme.h"
|
||||
#include "window/window_session_controller.h"
|
||||
#include "window/window_peer_menu.h"
|
||||
|
@ -568,7 +569,12 @@ ListWidget::ListWidget(
|
|||
, _peer(_controller->key().peer())
|
||||
, _migrated(_controller->migrated())
|
||||
, _type(_controller->section().mediaType())
|
||||
, _slice(sliceKey(_universalAroundId)) {
|
||||
, _slice(sliceKey(_universalAroundId))
|
||||
, _dateBadge(DateBadge{
|
||||
.check = SingleQueuedInvokation([=] { scrollDateCheck(); }),
|
||||
.hideTimer = base::Timer([=] { scrollDateHide(); }),
|
||||
.goodType = (_type == Type::Photo || _type == Type::Video),
|
||||
}) {
|
||||
setMouseTracking(true);
|
||||
start();
|
||||
}
|
||||
|
@ -1070,6 +1076,55 @@ void ListWidget::visibleTopBottomUpdated(
|
|||
|
||||
checkMoveToOtherViewer();
|
||||
clearHeavyItems();
|
||||
|
||||
if (_dateBadge.goodType) {
|
||||
updateDateBadgeFor(_visibleTop);
|
||||
if (!_visibleTop) {
|
||||
if (_dateBadge.shown) {
|
||||
scrollDateHide();
|
||||
} else {
|
||||
update(_dateBadge.rect);
|
||||
}
|
||||
} else {
|
||||
_dateBadge.check.call();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ListWidget::updateDateBadgeFor(int top) {
|
||||
if (_sections.empty()) {
|
||||
return;
|
||||
}
|
||||
const auto layout = findItemByPoint({ st::infoMediaSkip, top }).layout;
|
||||
const auto rectHeight = st::msgServiceMargin.top()
|
||||
+ st::msgServicePadding.top()
|
||||
+ st::msgServiceFont->height
|
||||
+ st::msgServicePadding.bottom();
|
||||
|
||||
_dateBadge.text = ItemDateText(layout->getItem(), false);
|
||||
_dateBadge.rect = QRect(0, top, width(), rectHeight);
|
||||
}
|
||||
|
||||
void ListWidget::scrollDateCheck() {
|
||||
if (!_dateBadge.shown) {
|
||||
toggleScrollDateShown();
|
||||
}
|
||||
_dateBadge.hideTimer.callOnce(st::infoScrollDateHideTimeout);
|
||||
}
|
||||
|
||||
void ListWidget::scrollDateHide() {
|
||||
if (_dateBadge.shown) {
|
||||
toggleScrollDateShown();
|
||||
}
|
||||
}
|
||||
|
||||
void ListWidget::toggleScrollDateShown() {
|
||||
_dateBadge.shown = !_dateBadge.shown;
|
||||
_dateBadge.opacity.start(
|
||||
[=] { update(_dateBadge.rect); },
|
||||
_dateBadge.shown ? 0. : 1.,
|
||||
_dateBadge.shown ? 1. : 0.,
|
||||
st::infoDateFadeDuration);
|
||||
}
|
||||
|
||||
void ListWidget::checkMoveToOtherViewer() {
|
||||
|
@ -1217,6 +1272,21 @@ void ListWidget::paintEvent(QPaintEvent *e) {
|
|||
it->paint(p, context, clip.translated(0, -top), outerWidth);
|
||||
p.translate(0, -top);
|
||||
}
|
||||
|
||||
if (_dateBadge.goodType && clip.intersects(_dateBadge.rect)) {
|
||||
const auto scrollDateOpacity =
|
||||
_dateBadge.opacity.value(_dateBadge.shown ? 1. : 0.);
|
||||
if (scrollDateOpacity > 0.) {
|
||||
p.setOpacity(scrollDateOpacity);
|
||||
HistoryView::ServiceMessagePainter::paintDate(
|
||||
p,
|
||||
_dateBadge.text,
|
||||
_visibleTop,
|
||||
outerWidth,
|
||||
st::roundedBg,
|
||||
st::roundedFg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ListWidget::mousePressEvent(QMouseEvent *e) {
|
||||
|
|
|
@ -271,6 +271,11 @@ private:
|
|||
void updateDragSelection();
|
||||
void clearDragSelection();
|
||||
|
||||
void updateDateBadgeFor(int top);
|
||||
void scrollDateCheck();
|
||||
void scrollDateHide();
|
||||
void toggleScrollDateShown();
|
||||
|
||||
void trySwitchToWordSelection();
|
||||
void switchToWordSelection();
|
||||
void validateTrippleClickStartTime();
|
||||
|
@ -282,7 +287,7 @@ private:
|
|||
const not_null<AbstractController*> _controller;
|
||||
const not_null<PeerData*> _peer;
|
||||
PeerData * const _migrated = nullptr;
|
||||
Type _type = Type::Photo;
|
||||
const Type _type = Type::Photo;
|
||||
|
||||
static constexpr auto kMinimalIdsLimit = 16;
|
||||
static constexpr auto kDefaultAroundId = (ServerMaxMsgId - 1);
|
||||
|
@ -317,6 +322,16 @@ private:
|
|||
DragSelectAction _dragSelectAction = DragSelectAction::None;
|
||||
bool _wasSelectedText = false; // was some text selected in current drag action
|
||||
|
||||
struct DateBadge {
|
||||
SingleQueuedInvokation check;
|
||||
base::Timer hideTimer;
|
||||
Ui::Animations::Simple opacity;
|
||||
bool goodType = false;
|
||||
bool shown = false;
|
||||
QString text;
|
||||
QRect rect;
|
||||
} _dateBadge;
|
||||
|
||||
base::unique_qptr<Ui::PopupMenu> _contextMenu;
|
||||
rpl::event_stream<> _checkForHide;
|
||||
QPointer<Ui::RpWidget> _actionBoxWeak;
|
||||
|
|
|
@ -497,6 +497,7 @@ botKbTinyButton: BotKeyboardButton {
|
|||
}
|
||||
botKbScroll: defaultSolidScroll;
|
||||
|
||||
historyScrollDateHideTimeout: 1000;
|
||||
historyDateFadeDuration: 200;
|
||||
historyDiceToast: Toast(defaultToast) {
|
||||
minWidth: msgMinWidth;
|
||||
|
|
Loading…
Add table
Reference in a new issue