Side shadow moved to MainWidget. Testing slide animation with 3s duration.

New profile widget has fixed top bar outside of scroll area.
This commit is contained in:
John Preston 2016-05-14 19:57:06 +03:00
parent 3d073eddd6
commit bf8a98a13b
31 changed files with 366 additions and 175 deletions

View File

@ -375,7 +375,7 @@ versionColor: #777;
shadowColor: rgba(0, 0, 0, 24); shadowColor: rgba(0, 0, 0, 24);
slideDuration: 240; slideDuration: 240;
slideShift: 0.3; slideShift: 100px;
slideFadeOut: 0.3; slideFadeOut: 0.3;
slideShadow: sprite(348px, 71px, 48px, 1px); slideShadow: sprite(348px, 71px, 48px, 1px);
slideFunction: transition(easeOutCirc); slideFunction: transition(easeOutCirc);

View File

@ -1864,7 +1864,7 @@ void DialogsWidget::animShow(const QPixmap &bgAnimCache) {
_cancelSearch.hide(); _cancelSearch.hide();
_newGroup.hide(); _newGroup.hide();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();

View File

@ -2767,7 +2767,6 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
, _attachDragPhoto(this) , _attachDragPhoto(this)
, _fileLoader(this, FileLoaderQueueStopTimeout) , _fileLoader(this, FileLoaderQueueStopTimeout)
, _a_show(animation(this, &HistoryWidget::step_show)) , _a_show(animation(this, &HistoryWidget::step_show))
, _sideShadow(this, st::shadowColor)
, _topShadow(this, st::shadowColor) { , _topShadow(this, st::shadowColor) {
_scroll.setFocusPolicy(Qt::NoFocus); _scroll.setFocusPolicy(Qt::NoFocus);
@ -2890,7 +2889,6 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
_attachDragPhoto.hide(); _attachDragPhoto.hide();
_topShadow.hide(); _topShadow.hide();
_sideShadow.setVisible(!Adaptive::OneColumn());
connect(&_attachDragDocument, SIGNAL(dropped(const QMimeData*)), this, SLOT(onDocumentDrop(const QMimeData*))); connect(&_attachDragDocument, SIGNAL(dropped(const QMimeData*)), this, SLOT(onDocumentDrop(const QMimeData*)));
connect(&_attachDragPhoto, SIGNAL(dropped(const QMimeData*)), this, SLOT(onPhotoDrop(const QMimeData*))); connect(&_attachDragPhoto, SIGNAL(dropped(const QMimeData*)), this, SLOT(onPhotoDrop(const QMimeData*)));
@ -5038,7 +5036,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo
_pinnedBar->cancel.hide(); _pinnedBar->cancel.hide();
} }
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();
@ -5048,10 +5046,9 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo
} }
void HistoryWidget::step_show(float64 ms, bool timer) { void HistoryWidget::step_show(float64 ms, bool timer) {
float64 dt = ms / st::slideDuration; float64 dt = ms / 3000;// st::slideDuration;
if (dt >= 1) { if (dt >= 1) {
_a_show.stop(); _a_show.stop();
_sideShadow.setVisible(!Adaptive::OneColumn());
_topShadow.setVisible(_peer ? true : false); _topShadow.setVisible(_peer ? true : false);
a_coordUnder.finish(); a_coordUnder.finish();
@ -5090,14 +5087,12 @@ void HistoryWidget::doneShow() {
} }
void HistoryWidget::updateAdaptiveLayout() { void HistoryWidget::updateAdaptiveLayout() {
_sideShadow.setVisible(!Adaptive::OneColumn());
update(); update();
} }
void HistoryWidget::animStop() { void HistoryWidget::animStop() {
if (!_a_show.animating()) return; if (!_a_show.animating()) return;
_a_show.stop(); _a_show.stop();
_sideShadow.setVisible(!Adaptive::OneColumn());
_topShadow.setVisible(_peer ? true : false); _topShadow.setVisible(_peer ? true : false);
} }
@ -6489,8 +6484,6 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) {
_topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth); _topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth);
_topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0); _topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0);
_sideShadow.resize(st::lineWidth, height());
_sideShadow.moveToLeft(0, 0);
} }
void HistoryWidget::itemRemoved(HistoryItem *item) { void HistoryWidget::itemRemoved(HistoryItem *item) {
@ -7081,7 +7074,6 @@ bool HistoryWidget::pinnedMsgVisibilityUpdated() {
} }
connect(&_pinnedBar->cancel, SIGNAL(clicked()), this, SLOT(onPinnedHide())); connect(&_pinnedBar->cancel, SIGNAL(clicked()), this, SLOT(onPinnedHide()));
_reportSpamPanel.raise(); _reportSpamPanel.raise();
_sideShadow.raise();
_topShadow.raise(); _topShadow.raise();
updatePinnedBar(); updatePinnedBar();
result = true; result = true;

View File

@ -656,12 +656,10 @@ public:
bool contentOverlapped(const QRect &globalRect); bool contentOverlapped(const QRect &globalRect);
void grabStart() override { void grabStart() override {
_sideShadow.hide();
_inGrab = true; _inGrab = true;
resizeEvent(0); resizeEvent(0);
} }
void grabFinish() override { void grabFinish() override {
_sideShadow.setVisible(!Adaptive::OneColumn());
_inGrab = false; _inGrab = false;
resizeEvent(0); resizeEvent(0);
} }
@ -1086,7 +1084,7 @@ private:
bool _saveDraftText = false; bool _saveDraftText = false;
QTimer _saveDraftTimer; QTimer _saveDraftTimer;
PlainShadow _sideShadow, _topShadow; PlainShadow _topShadow;
bool _inGrab = false; bool _inGrab = false;
}; };

View File

@ -180,7 +180,7 @@ void IntroWidget::animShow(const QPixmap &bgAnimCache, bool back) {
step()->hide(); step()->hide();
_back.hide(); _back.hide();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();

View File

@ -48,6 +48,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
MainWidget::MainWidget(MainWindow *window) : TWidget(window) MainWidget::MainWidget(MainWindow *window) : TWidget(window)
, _a_show(animation(this, &MainWidget::step_show)) , _a_show(animation(this, &MainWidget::step_show))
, _sideShadow(this, st::shadowColor)
, _dialogs(this) , _dialogs(this)
, _history(this) , _history(this)
, _player(this) , _player(this)
@ -387,7 +388,7 @@ QPixmap MainWidget::grabInner() {
if (_overview && !_overview->isHidden()) { if (_overview && !_overview->isHidden()) {
return myGrab(_overview); return myGrab(_overview);
} else if (_profile && !_profile->isHidden()) { } else if (_profile && !_profile->isHidden()) {
return myGrab(_profile); return myGrab(_profile, QRect(0, st::topBarHeight, _history->width(), _history->height() - st::topBarHeight));
} else if (Adaptive::OneColumn() && _history->isHidden()) { } else if (Adaptive::OneColumn() && _history->isHidden()) {
return myGrab(_dialogs, QRect(0, st::topBarHeight, _dialogs->width(), _dialogs->height() - st::topBarHeight)); return myGrab(_dialogs, QRect(0, st::topBarHeight, _dialogs->width(), _dialogs->height() - st::topBarHeight));
} else if (_history->peer()) { } else if (_history->peer()) {
@ -407,6 +408,8 @@ bool MainWidget::isItemVisible(HistoryItem *item) {
QPixmap MainWidget::grabTopBar() { QPixmap MainWidget::grabTopBar() {
if (!_topBar->isHidden()) { if (!_topBar->isHidden()) {
return myGrab(_topBar); return myGrab(_topBar);
} else if (_profile) {
return myGrab(_profile, QRect(0, 0, _profile->width(), st::topBarHeight));
} else if (Adaptive::OneColumn() && _history->isHidden()) { } else if (Adaptive::OneColumn() && _history->isHidden()) {
return myGrab(_dialogs, QRect(0, 0, _dialogs->width(), st::topBarHeight)); return myGrab(_dialogs, QRect(0, 0, _dialogs->width(), st::topBarHeight));
} else { } else {
@ -528,7 +531,9 @@ void MainWidget::noHider(HistoryHider *destroyed) {
if (Adaptive::OneColumn()) { if (Adaptive::OneColumn()) {
animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight));
} else { } else {
_sideShadow.hide();
animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight));
_sideShadow.show();
} }
} else { } else {
animCache = grabInner(); animCache = grabInner();
@ -2050,7 +2055,9 @@ void MainWidget::ui_showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool bac
} else if (Adaptive::OneColumn()) { } else if (Adaptive::OneColumn()) {
animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight));
} else { } else {
_sideShadow.hide();
animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight));
_sideShadow.show();
} }
if (peerId || !Adaptive::OneColumn()) { if (peerId || !Adaptive::OneColumn()) {
animTopBarCache = grabTopBar(); animTopBarCache = grabTopBar();
@ -2261,7 +2268,9 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop)
if (Adaptive::OneColumn()) { if (Adaptive::OneColumn()) {
animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight));
} else { } else {
_sideShadow.hide();
animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight));
_sideShadow.show();
} }
// QPixmap animCache = grabInner(), animTopBarCache = grabTopBar(); // QPixmap animCache = grabInner(), animTopBarCache = grabTopBar();
if (!back) { if (!back) {
@ -2343,6 +2352,7 @@ void MainWidget::orderWidgets() {
_player->raise(); _player->raise();
_dialogs->raise(); _dialogs->raise();
_mediaType->raise(); _mediaType->raise();
_sideShadow.raise();
if (_hider) _hider->raise(); if (_hider) _hider->raise();
} }
@ -2435,7 +2445,7 @@ void MainWidget::animShow(const QPixmap &bgAnimCache, bool back) {
(back ? _cacheUnder : _cacheOver) = myGrab(this); (back ? _cacheUnder : _cacheOver) = myGrab(this);
hideAll(); hideAll();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();
@ -2587,6 +2597,8 @@ void MainWidget::resizeEvent(QResizeEvent *e) {
_dialogsWidth = chatsListWidth(width()); _dialogsWidth = chatsListWidth(width());
_dialogs->resize(_dialogsWidth, height()); _dialogs->resize(_dialogsWidth, height());
_dialogs->moveToLeft(0, 0); _dialogs->moveToLeft(0, 0);
_sideShadow.resize(st::lineWidth, height());
_sideShadow.moveToLeft(_dialogsWidth, 0);
_player->resize(width() - _dialogsWidth, _player->height()); _player->resize(width() - _dialogsWidth, _player->height());
_player->moveToLeft(_dialogsWidth, 0); _player->moveToLeft(_dialogsWidth, 0);
_topBar->resize(width() - _dialogsWidth, st::topBarHeight); _topBar->resize(width() - _dialogsWidth, st::topBarHeight);
@ -2616,11 +2628,9 @@ void MainWidget::keyPressEvent(QKeyEvent *e) {
void MainWidget::updateAdaptiveLayout() { void MainWidget::updateAdaptiveLayout() {
showAll(); showAll();
_sideShadow.setVisible(!Adaptive::OneColumn());
_topBar->updateAdaptiveLayout(); _topBar->updateAdaptiveLayout();
_history->updateAdaptiveLayout(); _history->updateAdaptiveLayout();
if (_overview) _overview->updateAdaptiveLayout();
// if (_profile) _profile->updateAdaptiveLayout(); TODO
_player->updateAdaptiveLayout();
} }
bool MainWidget::needBackButton() { bool MainWidget::needBackButton() {

View File

@ -552,6 +552,8 @@ private:
int _dialogsWidth = st::dlgMinWidth; int _dialogsWidth = st::dlgMinWidth;
PlainShadow _sideShadow;
ChildWidget<DialogsWidget> _dialogs; ChildWidget<DialogsWidget> _dialogs;
ChildWidget<HistoryWidget> _history; ChildWidget<HistoryWidget> _history;
ChildWidget<Profile::Widget> _profile = { nullptr }; ChildWidget<Profile::Widget> _profile = { nullptr };

View File

@ -1922,7 +1922,6 @@ OverviewWidget::OverviewWidget(QWidget *parent, PeerData *peer, MediaOverviewTyp
, _scrollSetAfterShow(0) , _scrollSetAfterShow(0)
, _scrollDelta(0) , _scrollDelta(0)
, _selCount(0) , _selCount(0)
, _sideShadow(this, st::shadowColor)
, _topShadow(this, st::shadowColor) , _topShadow(this, st::shadowColor)
, _inGrab(false) { , _inGrab(false) {
_scroll.setFocusPolicy(Qt::NoFocus); _scroll.setFocusPolicy(Qt::NoFocus);
@ -1930,8 +1929,6 @@ OverviewWidget::OverviewWidget(QWidget *parent, PeerData *peer, MediaOverviewTyp
_scroll.move(0, 0); _scroll.move(0, 0);
_inner.move(0, 0); _inner.move(0, 0);
_sideShadow.setVisible(!Adaptive::OneColumn());
updateScrollColors(); updateScrollColors();
_scroll.show(); _scroll.show();
@ -1983,8 +1980,6 @@ void OverviewWidget::resizeEvent(QResizeEvent *e) {
_topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth); _topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth);
_topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0); _topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0);
_sideShadow.resize(st::lineWidth, height());
_sideShadow.moveToLeft(0, 0);
} }
void OverviewWidget::paintEvent(QPaintEvent *e) { void OverviewWidget::paintEvent(QPaintEvent *e) {
@ -2148,7 +2143,7 @@ void OverviewWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimT
_scroll.hide(); _scroll.hide();
_topShadow.hide(); _topShadow.hide();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();
@ -2163,7 +2158,6 @@ void OverviewWidget::step_show(float64 ms, bool timer) {
float64 dt = ms / st::slideDuration; float64 dt = ms / st::slideDuration;
if (dt >= 1) { if (dt >= 1) {
_a_show.stop(); _a_show.stop();
_sideShadow.setVisible(!Adaptive::OneColumn());
_topShadow.show(); _topShadow.show();
a_coordUnder.finish(); a_coordUnder.finish();
@ -2186,10 +2180,6 @@ void OverviewWidget::step_show(float64 ms, bool timer) {
} }
} }
void OverviewWidget::updateAdaptiveLayout() {
_sideShadow.setVisible(!Adaptive::OneColumn());
}
void OverviewWidget::doneShow() { void OverviewWidget::doneShow() {
_scroll.show(); _scroll.show();
_scroll.scrollToY(_scrollSetAfterShow); _scroll.scrollToY(_scrollSetAfterShow);

View File

@ -279,7 +279,6 @@ public:
void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1); void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1);
void step_show(float64 ms, bool timer); void step_show(float64 ms, bool timer);
void updateAdaptiveLayout();
void doneShow(); void doneShow();
void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type);
@ -300,12 +299,10 @@ public:
void updateAfterDrag(); void updateAfterDrag();
void grabStart() override { void grabStart() override {
_sideShadow.hide();
_inGrab = true; _inGrab = true;
resizeEvent(0); resizeEvent(0);
} }
void grabFinish() override { void grabFinish() override {
_sideShadow.setVisible(!Adaptive::OneColumn());
_inGrab = false; _inGrab = false;
resizeEvent(0); resizeEvent(0);
} }
@ -354,7 +351,7 @@ private:
int32 _selCount; int32 _selCount;
PlainShadow _sideShadow, _topShadow; PlainShadow _topShadow;
bool _inGrab; bool _inGrab;
}; };

View File

@ -119,7 +119,7 @@ void PasscodeWidget::animShow(const QPixmap &bgAnimCache, bool back) {
(back ? _cacheUnder : _cacheOver) = myGrab(this); (back ? _cacheUnder : _cacheOver) = myGrab(this);
hideAll(); hideAll();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();

View File

@ -33,12 +33,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent) PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent)
, _a_state(animation(this, &PlayerWidget::step_state)) , _a_state(animation(this, &PlayerWidget::step_state))
, _a_progress(animation(this, &PlayerWidget::step_progress)) , _a_progress(animation(this, &PlayerWidget::step_progress)) {
, _sideShadow(this, st::shadowColor) {
resize(st::wndMinWidth, st::playerHeight); resize(st::wndMinWidth, st::playerHeight);
setMouseTracking(true); setMouseTracking(true);
memset(_stateHovers, 0, sizeof(_stateHovers)); memset(_stateHovers, 0, sizeof(_stateHovers));
_sideShadow.setVisible(!Adaptive::OneColumn());
} }
void PlayerWidget::paintEvent(QPaintEvent *e) { void PlayerWidget::paintEvent(QPaintEvent *e) {
@ -343,10 +341,6 @@ void PlayerWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type)
} }
} }
void PlayerWidget::updateAdaptiveLayout() {
_sideShadow.setVisible(!Adaptive::OneColumn());
}
bool PlayerWidget::seekingSong(const SongMsgId &song) const { bool PlayerWidget::seekingSong(const SongMsgId &song) const {
return (_down == OverPlayback) && (song == _song); return (_down == OverPlayback) && (song == _song);
} }
@ -570,9 +564,6 @@ void PlayerWidget::resizeEvent(QResizeEvent *e) {
int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width())); int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width()));
_infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _repeatRect.x()) - infoLeft - st::playerSkip, availh); _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _repeatRect.x()) - infoLeft - st::playerSkip, availh);
_sideShadow.resize(st::lineWidth, height());
_sideShadow.moveToLeft(0, 0);
update(); update();
} }

View File

@ -52,7 +52,6 @@ public:
void clearSelection(); void clearSelection();
void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type);
void updateAdaptiveLayout();
bool seekingSong(const SongMsgId &song) const; bool seekingSong(const SongMsgId &song) const;
@ -136,6 +135,4 @@ private:
anim::fvalue a_loadProgress = { 0., 0. }; anim::fvalue a_loadProgress = { 0., 0. };
Animation _a_progress; Animation _a_progress;
PlainShadow _sideShadow;
}; };

View File

@ -25,39 +25,49 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "lang.h" #include "lang.h"
#include "apiwrap.h" #include "apiwrap.h"
#include "mainwidget.h" #include "mainwidget.h"
#include "mainwindow.h"
namespace Profile { namespace Profile {
namespace {
class BackButton final : public Button { class OnlineCounter {
public: public:
BackButton(QWidget *parent) : Button(parent) { OnlineCounter() : _currentTime(unixtime()), _self(App::self()) {
setCursor(style::cur_pointer);
} }
void feedUser(UserData *user) {
void resizeToWidth(int newWidth) { if (App::onlineForSort(user, _currentTime) > _currentTime) {
resize(newWidth, st::profileTopBarHeight); ++_result;
if (user != _self) {
_onlyMe = false;
} }
}
protected: }
void paintEvent(QPaintEvent *e) { QString result(int fullCount) const {
Painter p(this); if (_result > 0 && !_onlyMe) {
return lng_chat_status_members_online(lt_count, fullCount, lt_count_online, _result);
st::profileTopBarBackIcon.paint(p, st::profileTopBarBackIconPosition, width()); }
return lng_chat_status_members(lt_count, fullCount);
p.setFont(st::profileTopBarBackFont);
p.setPen(st::profileTopBarBackFg);
p.drawTextLeft(st::profileTopBarBackPosition.x(), st::profileTopBarBackPosition.y(), width(), lang(lng_menu_back));
} }
private: private:
bool _onlyMe = true;
int _result = 0;
int _currentTime;
UserData *_self;
}; };
} // namespace
class PhotoButton final : public Button { class PhotoButton final : public Button {
public: public:
PhotoButton(QWidget *parent, PeerData *peer) : Button(parent), _peer(peer) { PhotoButton(QWidget *parent, PeerData *peer) : Button(parent), _peer(peer) {
resize(st::profilePhotoSize, st::profilePhotoSize); resize(st::profilePhotoSize, st::profilePhotoSize);
} }
void photoUpdated() {
bool hasPhoto = (_peer->photoId && _peer->photoId != UnknownPeerPhotoId);
setCursor(hasPhoto ? style::cur_pointer : style::cur_default);
}
protected: protected:
void paintEvent(QPaintEvent *e) { void paintEvent(QPaintEvent *e) {
@ -77,29 +87,29 @@ CoverWidget::CoverWidget(QWidget *parent, PeerData *peer) : TWidget(parent)
, _peerChat(peer->asChat()) , _peerChat(peer->asChat())
, _peerChannel(peer->asChannel()) , _peerChannel(peer->asChannel())
, _peerMegagroup(peer->isMegagroup() ? _peerChannel : nullptr) , _peerMegagroup(peer->isMegagroup() ? _peerChannel : nullptr)
, _backButton(this)
, _photoButton(this, peer) { , _photoButton(this, peer) {
setAttribute(Qt::WA_OpaquePaintEvent); setAttribute(Qt::WA_OpaquePaintEvent);
_backButton->moveToLeft(0, 0); _photoButton->photoUpdated();
connect(_backButton, SIGNAL(clicked()), this, SLOT(onBack())); connect(_photoButton, SIGNAL(clicked()), this, SLOT(onPhotoShow()));
_nameText.setText(st::profileNameFont, App::peerName(_peer)); _nameText.setText(st::profileNameFont, App::peerName(_peer));
updateStatusText(); updateStatusText();
} }
void CoverWidget::onBack() { void CoverWidget::onPhotoShow() {
App::main()->showBackFromStack(); PhotoData *photo = (_peer->photoId && _peer->photoId != UnknownPeerPhotoId) ? App::photo(_peer->photoId) : nullptr;
if ((_peer->photoId == UnknownPeerPhotoId) || (_peer->photoId && !photo->date)) {
App::api()->requestFullPeer(_peer);
}
if (photo && photo->date) {
App::wnd()->showPhoto(photo, _peer);
}
} }
void CoverWidget::resizeToWidth(int newWidth) { void CoverWidget::resizeToWidth(int newWidth) {
int newHeight = 0; int newHeight = 0;
// Top bar
_backButton->resizeToWidth(newWidth);
newHeight += _backButton->height();
// Cover content
newHeight += st::profileMarginTop; newHeight += st::profileMarginTop;
_photoButton->moveToLeft(st::profilePhotoLeft, newHeight); _photoButton->moveToLeft(st::profilePhotoLeft, newHeight);
@ -143,34 +153,19 @@ void CoverWidget::updateStatusText() {
_statusText = lng_chat_status_members(lt_count, _peerChat->count); _statusText = lng_chat_status_members(lt_count, _peerChat->count);
} }
} else { } else {
int onlineCount = 0; OnlineCounter counter;
bool onlyMe = true; auto &participants = _peerChat->participants;
for (auto i = _peerChat->participants.cbegin(), e = _peerChat->participants.cend(); i != e; ++i) { for (auto i = participants.cbegin(), e = participants.cend(); i != e; ++i) {
auto onlineTill = App::onlineForSort(i.key(), currentTime); counter.feedUser(i.key());
if (onlineTill > currentTime) {
++onlineCount;
}
}
if (onlineCount && !onlyMe) {
_statusText = lng_chat_status_members_online(lt_count, _peerChat->participants.size(), lt_count_online, onlineCount);
} else {
_statusText = lng_chat_status_members(lt_count, _peerChat->participants.size());
} }
_statusText = counter.result(participants.size());
} }
} else if (isUsingMegagroupOnlineCount()) { } else if (isUsingMegagroupOnlineCount()) {
int onlineCount = 0; OnlineCounter counter;
bool onlyMe = true; for_const (auto user, _peerMegagroup->mgInfo->lastParticipants) {
for_const (auto &user, _peerMegagroup->mgInfo->lastParticipants) { counter.feedUser(user);
auto onlineTill = App::onlineForSort(user, currentTime);
if (onlineTill > currentTime) {
++onlineCount;
}
}
if (onlineCount && !onlyMe) {
_statusText = lng_chat_status_members_online(lt_count, _peerMegagroup->count, lt_count_online, onlineCount);
} else {
_statusText = lng_chat_status_members(lt_count, _peerMegagroup->count);
} }
_statusText = counter.result(_peerMegagroup->count);
} else if (_peerChannel) { } else if (_peerChannel) {
if (_peerChannel->count > 0) { if (_peerChannel->count > 0) {
_statusText = lng_chat_status_members(lt_count, _peerChannel->count); _statusText = lng_chat_status_members(lt_count, _peerChannel->count);

View File

@ -35,7 +35,7 @@ public:
void resizeToWidth(int newWidth); void resizeToWidth(int newWidth);
public slots: public slots:
void onBack(); void onPhotoShow();
protected: protected:
void paintEvent(QPaintEvent *e) override; void paintEvent(QPaintEvent *e) override;
@ -50,10 +50,6 @@ private:
ChannelData *_peerChannel; ChannelData *_peerChannel;
ChannelData *_peerMegagroup; ChannelData *_peerMegagroup;
// Top bar
ChildWidget<BackButton> _backButton;
QList<FlatButton*> _rightActions;
// Cover content // Cover content
ChildWidget<PhotoButton> _photoButton; ChildWidget<PhotoButton> _photoButton;

View File

@ -0,0 +1,103 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "profile/profile_fixed_bar.h"
#include "styles/style_profile.h"
#include "lang.h"
#include "mainwidget.h"
namespace Profile {
class BackButton final : public Button {
public:
BackButton(QWidget *parent) : Button(parent) {
setCursor(style::cur_pointer);
}
void resizeToWidth(int newWidth) {
resize(newWidth, st::profileTopBarHeight);
}
protected:
void paintEvent(QPaintEvent *e) {
Painter p(this);
p.fillRect(e->rect(), st::profileBg);
st::profileTopBarBackIcon.paint(p, st::profileTopBarBackIconPosition, width());
p.setFont(st::profileTopBarBackFont);
p.setPen(st::profileTopBarBackFg);
p.drawTextLeft(st::profileTopBarBackPosition.x(), st::profileTopBarBackPosition.y(), width(), lang(lng_menu_back));
}
private:
};
FixedBar::FixedBar(QWidget *parent, PeerData *peer) : TWidget(parent)
, _peer(peer)
, _peerUser(peer->asUser())
, _peerChat(peer->asChat())
, _peerChannel(peer->asChannel())
, _peerMegagroup(peer->isMegagroup() ? _peerChannel : nullptr)
, _backButton(this) {
_backButton->moveToLeft(0, 0);
connect(_backButton, SIGNAL(clicked()), this, SLOT(onBack()));
}
void FixedBar::onBack() {
App::main()->showBackFromStack();
}
void FixedBar::resizeToWidth(int newWidth) {
int newHeight = 0;
_backButton->resizeToWidth(newWidth);
newHeight += _backButton->height();
resize(newWidth, newHeight);
}
void FixedBar::setAnimatingMode(bool enabled) {
if (_animatingMode != enabled) {
_animatingMode = enabled;
setCursor(_animatingMode ? style::cur_pointer : style::cur_default);
if (_animatingMode) {
setAttribute(Qt::WA_OpaquePaintEvent, false);
hideChildren();
} else {
setAttribute(Qt::WA_OpaquePaintEvent);
showChildren();
}
show();
}
}
void FixedBar::mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::LeftButton) {
onBack();
} else {
TWidget::mousePressEvent(e);
}
}
} // namespace Profile

View File

@ -0,0 +1,59 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
namespace Profile {
class BackButton;
class FixedBar final : public TWidget {
Q_OBJECT
public:
FixedBar(QWidget *parent, PeerData *peer);
void resizeToWidth(int newWidth);
// When animating mode is enabled the content is hidden and the
// whole fixed bar acts like a back button.
void setAnimatingMode(bool enabled);
protected:
void mousePressEvent(QMouseEvent *e) override;
public slots:
void onBack();
private:
PeerData *_peer;
UserData *_peerUser;
ChatData *_peerChat;
ChannelData *_peerChannel;
ChannelData *_peerMegagroup;
ChildWidget<BackButton> _backButton;
QList<FlatButton*> _rightActions;
bool _animatingMode = false;
};
} // namespace Profile

View File

@ -23,6 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "styles/style_profile.h" #include "styles/style_profile.h"
#include "profile/profile_cover.h" #include "profile/profile_cover.h"
#include "apiwrap.h"
namespace Profile { namespace Profile {
@ -37,10 +38,25 @@ void InnerWidget::resizeToWidth(int newWidth, int minHeight) {
resize(newWidth, naturalHeight + _addedHeight); resize(newWidth, naturalHeight + _addedHeight);
} }
void InnerWidget::decreaseAdditionalHeight(int removeHeight) { void InnerWidget::setVisibleTopBottom(int visibleTop, int visibleBottom) {
if (removeHeight > 0) { _visibleTop = visibleTop;
resizeToWidth(width(), height() - removeHeight); _visibleBottom = visibleBottom;
int notDisplayedAtBottom = height() - _visibleBottom;
if (notDisplayedAtBottom > 0) {
decreaseAdditionalHeight(notDisplayedAtBottom);
} }
//loadProfilePhotos(_visibleTop);
if (peer()->isMegagroup() && !peer()->asChannel()->mgInfo->lastParticipants.isEmpty() && peer()->asChannel()->mgInfo->lastParticipants.size() < peer()->asChannel()->count) {
if (_visibleTop + (PreloadHeightsCount + 1) * (_visibleBottom - _visibleTop) > height()) {
App::api()->requestLastParticipants(peer()->asChannel(), false);
}
}
}
void InnerWidget::decreaseAdditionalHeight(int removeHeight) {
resizeToWidth(width(), height() - removeHeight);
} }
void InnerWidget::paintEvent(QPaintEvent *e) { void InnerWidget::paintEvent(QPaintEvent *e) {

View File

@ -38,10 +38,8 @@ public:
// Count new height for width=newWidth and resize to it. // Count new height for width=newWidth and resize to it.
void resizeToWidth(int newWidth, int minHeight); void resizeToWidth(int newWidth, int minHeight);
// Sometimes height of this widget is larger than it is required // Updates the area that is visible inside the scroll container.
// so that it is allowed to scroll down to the desired position. void setVisibleTopBottom(int visibleTop, int visibleBottom);
// When resizing with scroll moving up the additional height may be decreased.
void decreaseAdditionalHeight(int removeHeight);
protected: protected:
void paintEvent(QPaintEvent *e) override; void paintEvent(QPaintEvent *e) override;
@ -50,11 +48,18 @@ private:
// Resizes content and counts natural widget height for the desired width. // Resizes content and counts natural widget height for the desired width.
int resizeGetHeight(int newWidth); int resizeGetHeight(int newWidth);
// Sometimes height of this widget is larger than it is required
// so that it is allowed to scroll down to the desired position.
// When resizing with scroll moving up the additional height may be decreased.
void decreaseAdditionalHeight(int removeHeight);
PeerData *_peer; PeerData *_peer;
// Height that we added to the natural height so that it is allowed // Height that we added to the natural height so that it is allowed
// to scroll down to the desired position. // to scroll down to the desired position.
int _addedHeight = 0; int _addedHeight = 0;
int _visibleTop = 0;
int _visibleBottom = 0;
ChildWidget<CoverWidget> _cover; ChildWidget<CoverWidget> _cover;
QList<BlockWidget*> _blocks; QList<BlockWidget*> _blocks;

View File

@ -21,6 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h" #include "stdafx.h"
#include "profile/profile_widget.h" #include "profile/profile_widget.h"
#include "profile/profile_fixed_bar.h"
#include "profile/profile_inner_widget.h" #include "profile/profile_inner_widget.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "application.h" #include "application.h"
@ -28,14 +29,16 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
namespace Profile { namespace Profile {
Widget::Widget(QWidget *parent, PeerData *peer) : TWidget(parent) Widget::Widget(QWidget *parent, PeerData *peer) : TWidget(parent)
, _fixedBar(this, peer)
, _scroll(this, st::setScroll) , _scroll(this, st::setScroll)
, _inner(this, peer) , _inner(this, peer) {
, _sideShadow(this, st::shadowColor) { _fixedBar->move(0, 0);
_scroll->setWidget(_inner); _fixedBar->resizeToWidth(width());
_scroll->move(0, 0); _fixedBar->show();
_scroll->show();
_sideShadow->setVisible(!Adaptive::OneColumn()); _scroll->setWidget(_inner);
_scroll->move(0, _fixedBar->height());
_scroll->show();
connect(_scroll, SIGNAL(scrolled()), _inner, SLOT(updateSelected())); connect(_scroll, SIGNAL(scrolled()), _inner, SLOT(updateSelected()));
connect(_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); connect(_scroll, SIGNAL(scrolled()), this, SLOT(onScroll()));
@ -58,12 +61,13 @@ void Widget::setGeometryWithTopMoved(const QRect &newGeometry, int topDelta) {
} }
void Widget::showAnimated(SlideDirection direction, const QPixmap &oldContentCache) { void Widget::showAnimated(SlideDirection direction, const QPixmap &oldContentCache) {
show(); _showAnimation = nullptr;
_scroll->show();
_sideShadow->hide(); showChildren();
_fixedBar->setAnimatingMode(false);
auto myContentCache = myGrab(this); auto myContentCache = myGrab(this);
_scroll->hide(); hideChildren();
_sideShadow->show(); _fixedBar->setAnimatingMode(true);
_showAnimation = std_::make_unique<SlideAnimation>(); _showAnimation = std_::make_unique<SlideAnimation>();
_showAnimation->setDirection(direction); _showAnimation->setDirection(direction);
@ -71,6 +75,8 @@ void Widget::showAnimated(SlideDirection direction, const QPixmap &oldContentCac
_showAnimation->setFinishedCallback(func(this, &Widget::showFinished)); _showAnimation->setFinishedCallback(func(this, &Widget::showFinished));
_showAnimation->setPixmaps(oldContentCache, myContentCache); _showAnimation->setPixmaps(oldContentCache, myContentCache);
_showAnimation->start(); _showAnimation->start();
show();
} }
void Widget::setInnerFocus() { void Widget::setInnerFocus() {
@ -79,26 +85,22 @@ void Widget::setInnerFocus() {
void Widget::resizeEvent(QResizeEvent *e) { void Widget::resizeEvent(QResizeEvent *e) {
int newScrollTop = _scroll->scrollTop() + _topDelta; int newScrollTop = _scroll->scrollTop() + _topDelta;
if (_scroll->size() != size()) { _fixedBar->resizeToWidth(width());
_scroll->resize(size());
if (_inner->width() != width()) { QSize scrollSize(width(), height() - _fixedBar->height());
_inner->resizeToWidth(width(), _scroll->height()); if (_scroll->size() != scrollSize) {
} _scroll->resize(scrollSize);
_inner->resizeToWidth(scrollSize.width(), _scroll->height());
} }
if (!_scroll->isHidden()) { if (!_scroll->isHidden()) {
if (_topDelta) { if (_topDelta) {
_scroll->scrollToY(newScrollTop); _scroll->scrollToY(newScrollTop);
} }
int notDisplayedAtBottom = _scroll->scrollTopMax() - _scroll->scrollTop(); int scrollTop = _scroll->scrollTop();
if (notDisplayedAtBottom > 0) { _inner->setVisibleTopBottom(scrollTop, scrollTop + _scroll->height());
_inner->decreaseAdditionalHeight(notDisplayedAtBottom);
} }
} }
_sideShadow->resize(st::lineWidth, height());
_sideShadow->moveToLeft(0, 0);
}
void Widget::paintEvent(QPaintEvent *e) { void Widget::paintEvent(QPaintEvent *e) {
if (Ui::skipPaintEvent(this, e)) return; if (Ui::skipPaintEvent(this, e)) return;
@ -108,11 +110,19 @@ void Widget::paintEvent(QPaintEvent *e) {
} }
} }
void Widget::onScroll() {
int scrollTop = _scroll->scrollTop();
_inner->setVisibleTopBottom(scrollTop, scrollTop + _scroll->height());
}
void Widget::showFinished() { void Widget::showFinished() {
if (isHidden()) return; if (isHidden()) return;
App::app()->mtpUnpause(); App::app()->mtpUnpause();
_scroll->show();
showChildren();
_fixedBar->setAnimatingMode(false);
setInnerFocus(); setInnerFocus();
} }

View File

@ -27,6 +27,7 @@ class ScrollArea;
namespace Profile { namespace Profile {
class InnerWidget; class InnerWidget;
class FixedBar;
class Widget final : public TWidget { class Widget final : public TWidget {
Q_OBJECT Q_OBJECT
@ -48,6 +49,9 @@ protected:
void resizeEvent(QResizeEvent *e) override; void resizeEvent(QResizeEvent *e) override;
void paintEvent(QPaintEvent *e) override; void paintEvent(QPaintEvent *e) override;
private slots:
void onScroll();
private: private:
// QWidget::update() method is overloaded and we need template deduction. // QWidget::update() method is overloaded and we need template deduction.
void repaintCallback() { void repaintCallback() {
@ -55,9 +59,9 @@ private:
} }
void showFinished(); void showFinished();
ChildWidget<FixedBar> _fixedBar;
ChildWidget<ScrollArea> _scroll; ChildWidget<ScrollArea> _scroll;
ChildWidget<InnerWidget> _inner; ChildWidget<InnerWidget> _inner;
ChildWidget<PlainShadow> _sideShadow;
std_::unique_ptr<SlideAnimation> _showAnimation; std_::unique_ptr<SlideAnimation> _showAnimation;

View File

@ -1864,7 +1864,6 @@ ProfileWidget::ProfileWidget(QWidget *parent, PeerData *peer) : TWidget(parent)
, _scroll(this, st::setScroll) , _scroll(this, st::setScroll)
, _inner(this, peer) , _inner(this, peer)
, _a_show(animation(this, &ProfileWidget::step_show)) , _a_show(animation(this, &ProfileWidget::step_show))
, _sideShadow(this, st::shadowColor)
, _topShadow(this, st::shadowColor) , _topShadow(this, st::shadowColor)
, _inGrab(false) { , _inGrab(false) {
_scroll.setWidget(&_inner); _scroll.setWidget(&_inner);
@ -1872,8 +1871,6 @@ ProfileWidget::ProfileWidget(QWidget *parent, PeerData *peer) : TWidget(parent)
_inner.move(0, 0); _inner.move(0, 0);
_scroll.show(); _scroll.show();
_sideShadow.setVisible(!Adaptive::OneColumn());
connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(updateSelected())); connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(updateSelected()));
connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll()));
} }
@ -1906,8 +1903,6 @@ void ProfileWidget::resizeEvent(QResizeEvent *e) {
_topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth); _topShadow.resize(width() - ((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0), st::lineWidth);
_topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0); _topShadow.moveToLeft((!Adaptive::OneColumn() && !_inGrab) ? st::lineWidth : 0, 0);
_sideShadow.resize(st::lineWidth, height());
_sideShadow.moveToLeft(0, 0);
} }
void ProfileWidget::mousePressEvent(QMouseEvent *e) { void ProfileWidget::mousePressEvent(QMouseEvent *e) {
@ -1988,7 +1983,7 @@ void ProfileWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo
_scroll.hide(); _scroll.hide();
_topShadow.hide(); _topShadow.hide();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();
@ -2003,7 +1998,6 @@ void ProfileWidget::step_show(float64 ms, bool timer) {
float64 dt = ms / st::slideDuration; float64 dt = ms / st::slideDuration;
if (dt >= 1) { if (dt >= 1) {
_a_show.stop(); _a_show.stop();
_sideShadow.setVisible(!Adaptive::OneColumn());
_topShadow.show(); _topShadow.show();
a_coordUnder.finish(); a_coordUnder.finish();
@ -2055,10 +2049,6 @@ void ProfileWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type)
} }
} }
void ProfileWidget::updateAdaptiveLayout() {
_sideShadow.setVisible(!Adaptive::OneColumn());
}
PeerData *ProfileWidget::ui_getPeerForMouseAction() { PeerData *ProfileWidget::ui_getPeerForMouseAction() {
return _inner.peer(); return _inner.peer();
} }

View File

@ -257,15 +257,12 @@ public:
void updateNotifySettings(); void updateNotifySettings();
void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type);
void updateAdaptiveLayout();
void grabStart() override { void grabStart() override {
_sideShadow.hide();
_inGrab = true; _inGrab = true;
resizeEvent(0); resizeEvent(0);
} }
void grabFinish() override { void grabFinish() override {
_sideShadow.setVisible(!Adaptive::OneColumn());
_inGrab = false; _inGrab = false;
resizeEvent(0); resizeEvent(0);
} }
@ -294,7 +291,7 @@ private:
anim::ivalue a_coordUnder, a_coordOver; anim::ivalue a_coordUnder, a_coordOver;
anim::fvalue a_shadow; anim::fvalue a_shadow;
PlainShadow _sideShadow, _topShadow; PlainShadow _topShadow;
bool _inGrab; bool _inGrab;
}; };

View File

@ -851,7 +851,6 @@ namespace {
_psShadowWindows.setColor(_shInactive); _psShadowWindows.setColor(_shInactive);
} }
if (Global::started()) { if (Global::started()) {
QMetaObject::invokeMethod(App::wnd(), "updateCounter", Qt::QueuedConnection);
App::wnd()->update(); App::wnd()->update();
} }
} return false; } return false;

View File

@ -852,7 +852,6 @@ namespace {
// _psShadowWindows.setColor(_shInactive); // _psShadowWindows.setColor(_shInactive);
//} //}
if (Global::started()) { if (Global::started()) {
QMetaObject::invokeMethod(App::wnd(), "updateCounter", Qt::QueuedConnection);
App::wnd()->update(); App::wnd()->update();
} }
} return false; } return false;

View File

@ -1864,7 +1864,7 @@ void SettingsWidget::animShow(const QPixmap &bgAnimCache, bool back) {
(back ? _cacheUnder : _cacheOver) = myGrab(this); (back ? _cacheUnder : _cacheOver) = myGrab(this);
hideAll(); hideAll();
a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordUnder = back ? anim::ivalue(-st::slideShift, 0) : anim::ivalue(0, -st::slideShift);
a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0);
a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1);
_a_show.start(); _a_show.start();

View File

@ -61,7 +61,7 @@ void SlideAnimation::setFinishedCallback(FinishedCallback &&callback) {
void SlideAnimation::start() { void SlideAnimation::start() {
int width = _cacheUnder.width() / cIntRetinaFactor(); int width = _cacheUnder.width() / cIntRetinaFactor();
int delta = qFloor(st::slideShift * width); int delta = st::slideShift;
a_progress = anim::fvalue(0, 1); a_progress = anim::fvalue(0, 1);
if (_direction == SlideDirection::FromLeft) { if (_direction == SlideDirection::FromLeft) {
std::swap(_cacheUnder, _cacheOver); std::swap(_cacheUnder, _cacheOver);
@ -75,7 +75,7 @@ void SlideAnimation::start() {
} }
void SlideAnimation::step(float64 ms, bool timer) { void SlideAnimation::step(float64 ms, bool timer) {
float64 dt = ms / st::slideDuration; float64 dt = ms / 3000;// st::slideDuration;
if (dt >= 1) { if (dt >= 1) {
dt = 1; dt = 1;
if (timer) { if (timer) {

View File

@ -184,6 +184,21 @@ public:
bool inFocusChain() const; bool inFocusChain() const;
void hideChildren() {
for (auto child : children()) {
if (auto widget = qobject_cast<QWidget*>(child)) {
widget->hide();
}
}
}
void showChildren() {
for (auto child : children()) {
if (auto widget = qobject_cast<QWidget*>(child)) {
widget->show();
}
}
}
}; };
void myEnsureResized(QWidget *target); void myEnsureResized(QWidget *target);

View File

@ -51,8 +51,7 @@ TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w)
, _addContact(this, lang(lng_profile_add_contact), st::topBarButton) , _addContact(this, lang(lng_profile_add_contact), st::topBarButton)
, _deleteContact(this, lang(lng_profile_delete_contact), st::topBarButton) , _deleteContact(this, lang(lng_profile_delete_contact), st::topBarButton)
, _mediaType(this, lang(lng_media_type), st::topBarButton) , _mediaType(this, lang(lng_media_type), st::topBarButton)
, _search(this, st::topBarSearch) , _search(this, st::topBarSearch) {
, _sideShadow(this, st::shadowColor) {
connect(_forward, SIGNAL(clicked()), this, SLOT(onForwardSelection())); connect(_forward, SIGNAL(clicked()), this, SLOT(onForwardSelection()));
connect(_delete, SIGNAL(clicked()), this, SLOT(onDeleteSelection())); connect(_delete, SIGNAL(clicked()), this, SLOT(onDeleteSelection()));
@ -263,9 +262,6 @@ void TopBarWidget::resizeEvent(QResizeEvent *e) {
if (!_addContact->isHidden()) _addContact->move(r -= _addContact->width(), 0); if (!_addContact->isHidden()) _addContact->move(r -= _addContact->width(), 0);
if (!_mediaType->isHidden()) _mediaType->move(r -= _mediaType->width(), 0); if (!_mediaType->isHidden()) _mediaType->move(r -= _mediaType->width(), 0);
_search->move(width() - (_info->isHidden() ? st::topBarForwardPadding.right() : _info->width()) - _search->width(), 0); _search->move(width() - (_info->isHidden() ? st::topBarForwardPadding.right() : _info->width()) - _search->width(), 0);
_sideShadow->resize(st::lineWidth, height());
_sideShadow->moveToLeft(0, 0);
} }
void TopBarWidget::startAnim() { void TopBarWidget::startAnim() {
@ -285,7 +281,6 @@ void TopBarWidget::startAnim() {
void TopBarWidget::stopAnim() { void TopBarWidget::stopAnim() {
_animating = false; _animating = false;
_sideShadow->setVisible(!Adaptive::OneColumn());
showAll(); showAll();
} }
@ -363,7 +358,6 @@ void TopBarWidget::showAll() {
_info->hide(); _info->hide();
} }
} }
_sideShadow->setVisible(!Adaptive::OneColumn());
resizeEvent(nullptr); resizeEvent(nullptr);
} }

View File

@ -47,7 +47,6 @@ public:
void resizeEvent(QResizeEvent *e) override; void resizeEvent(QResizeEvent *e) override;
void step_appearance(float64 ms, bool timer); void step_appearance(float64 ms, bool timer);
void enableShadow(bool enable = true);
void startAnim(); void startAnim();
void stopAnim(); void stopAnim();
@ -58,13 +57,6 @@ public:
FlatButton *mediaTypeButton(); FlatButton *mediaTypeButton();
void grabStart() override {
_sideShadow->hide();
}
void grabFinish() override {
_sideShadow->setVisible(!Adaptive::OneColumn());
}
public slots: public slots:
void onForwardSelection(); void onForwardSelection();
@ -107,8 +99,6 @@ private:
ChildWidget<IconedButton> _search; ChildWidget<IconedButton> _search;
ChildWidget<PlainShadow> _sideShadow;
}; };
} // namespace Window } // namespace Window

View File

@ -390,6 +390,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_profile_fixed_bar.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_profile_inner_widget.cpp"> <ClCompile Include="GeneratedFiles\Debug\moc_profile_inner_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -689,6 +693,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_profile_fixed_bar.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_profile_inner_widget.cpp"> <ClCompile Include="GeneratedFiles\Deploy\moc_profile_inner_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -1014,6 +1022,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_profile_fixed_bar.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_profile_inner_widget.cpp"> <ClCompile Include="GeneratedFiles\Release\moc_profile_inner_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
@ -1163,6 +1175,7 @@
<ClCompile Include="SourceFiles\playerwidget.cpp" /> <ClCompile Include="SourceFiles\playerwidget.cpp" />
<ClCompile Include="SourceFiles\profilewidget.cpp" /> <ClCompile Include="SourceFiles\profilewidget.cpp" />
<ClCompile Include="SourceFiles\profile\profile_cover.cpp" /> <ClCompile Include="SourceFiles\profile\profile_cover.cpp" />
<ClCompile Include="SourceFiles\profile\profile_fixed_bar.cpp" />
<ClCompile Include="SourceFiles\profile\profile_inner_widget.cpp" /> <ClCompile Include="SourceFiles\profile\profile_inner_widget.cpp" />
<ClCompile Include="SourceFiles\profile\profile_widget.cpp" /> <ClCompile Include="SourceFiles\profile\profile_widget.cpp" />
<ClCompile Include="SourceFiles\pspecific_linux.cpp"> <ClCompile Include="SourceFiles\pspecific_linux.cpp">
@ -1459,6 +1472,20 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profile/profile_cover.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore\5.6.0\QtCore" "-I$(QTDIR)\include\QtGui\5.6.0\QtGui" "-I.\..\..\Libraries\breakpad\src" "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\ThirdParty\minizip" "-I.\..\..\Libraries\openssl\Release\include"</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profile/profile_cover.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore\5.6.0\QtCore" "-I$(QTDIR)\include\QtGui\5.6.0\QtGui" "-I.\..\..\Libraries\breakpad\src" "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\ThirdParty\minizip" "-I.\..\..\Libraries\openssl\Release\include"</Command>
</CustomBuild> </CustomBuild>
<CustomBuild Include="SourceFiles\profile\profile_fixed_bar.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing profile_fixed_bar.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profile/profile_fixed_bar.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore\5.6.0\QtCore" "-I$(QTDIR)\include\QtGui\5.6.0\QtGui" "-I.\..\..\Libraries\breakpad\src" "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\ThirdParty\minizip" "-I.\..\..\Libraries\openssl\Release\include"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing profile_fixed_bar.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profile/profile_fixed_bar.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore\5.6.0\QtCore" "-I$(QTDIR)\include\QtGui\5.6.0\QtGui" "-I.\..\..\Libraries\breakpad\src" "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\ThirdParty\minizip" "-I.\..\..\Libraries\openssl_debug\Debug\include"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing profile_fixed_bar.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profile/profile_fixed_bar.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore\5.6.0\QtCore" "-I$(QTDIR)\include\QtGui\5.6.0\QtGui" "-I.\..\..\Libraries\breakpad\src" "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\ThirdParty\minizip" "-I.\..\..\Libraries\openssl\Release\include"</Command>
</CustomBuild>
<ClInclude Include="SourceFiles\serialize\serialize_common.h" /> <ClInclude Include="SourceFiles\serialize\serialize_common.h" />
<ClInclude Include="SourceFiles\serialize\serialize_document.h" /> <ClInclude Include="SourceFiles\serialize\serialize_document.h" />
<ClInclude Include="SourceFiles\shortcuts.h" /> <ClInclude Include="SourceFiles\shortcuts.h" />

View File

@ -1149,6 +1149,18 @@
<ClCompile Include="GeneratedFiles\Release\moc_profile_cover.cpp"> <ClCompile Include="GeneratedFiles\Release\moc_profile_cover.cpp">
<Filter>GeneratedFiles\Release</Filter> <Filter>GeneratedFiles\Release</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="SourceFiles\profile\profile_fixed_bar.cpp">
<Filter>SourceFiles\profile</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_profile_fixed_bar.cpp">
<Filter>GeneratedFiles\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_profile_fixed_bar.cpp">
<Filter>GeneratedFiles\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_profile_fixed_bar.cpp">
<Filter>GeneratedFiles\Release</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="SourceFiles\stdafx.h"> <ClInclude Include="SourceFiles\stdafx.h">
@ -1576,6 +1588,9 @@
<CustomBuild Include="SourceFiles\profile\profile_cover.h"> <CustomBuild Include="SourceFiles\profile\profile_cover.h">
<Filter>SourceFiles\profile</Filter> <Filter>SourceFiles\profile</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="SourceFiles\profile\profile_fixed_bar.h">
<Filter>SourceFiles\profile</Filter>
</CustomBuild>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Resources\langs\lang_it.strings"> <None Include="Resources\langs\lang_it.strings">