Started video player UI in MediaView.
|
@ -449,3 +449,17 @@ OutlineButton {
|
|||
font: font;
|
||||
padding: margins;
|
||||
}
|
||||
|
||||
IconButton {
|
||||
width: pixels;
|
||||
height: pixels;
|
||||
|
||||
opacity: double;
|
||||
overOpacity: double;
|
||||
|
||||
icon: icon;
|
||||
iconPosition: point;
|
||||
downIconPosition: point;
|
||||
|
||||
duration: int;
|
||||
}
|
||||
|
|
BIN
Telegram/Resources/icons/media_fullscreen_from.png
Normal file
After Width: | Height: | Size: 405 B |
BIN
Telegram/Resources/icons/media_fullscreen_from@2x.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
Telegram/Resources/icons/media_fullscreen_to.png
Normal file
After Width: | Height: | Size: 388 B |
BIN
Telegram/Resources/icons/media_fullscreen_to@2x.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
Telegram/Resources/icons/media_pause.png
Normal file
After Width: | Height: | Size: 98 B |
BIN
Telegram/Resources/icons/media_pause@2x.png
Normal file
After Width: | Height: | Size: 133 B |
BIN
Telegram/Resources/icons/media_play.png
Normal file
After Width: | Height: | Size: 281 B |
BIN
Telegram/Resources/icons/media_play@2x.png
Normal file
After Width: | Height: | Size: 375 B |
BIN
Telegram/Resources/icons/media_volume.png
Normal file
After Width: | Height: | Size: 148 B |
BIN
Telegram/Resources/icons/media_volume@2x.png
Normal file
After Width: | Height: | Size: 209 B |
|
@ -533,6 +533,12 @@ namespace Sandbox {
|
|||
}
|
||||
}
|
||||
|
||||
void removeEventFilter(QObject *filter) {
|
||||
if (Application *a = application()) {
|
||||
a->removeEventFilter(filter);
|
||||
}
|
||||
}
|
||||
|
||||
void execExternal(const QString &cmd) {
|
||||
DEBUG_LOG(("Application Info: executing external command '%1'").arg(cmd));
|
||||
if (cmd == "show") {
|
||||
|
|
|
@ -114,6 +114,7 @@ namespace Sandbox {
|
|||
bool isSavingSession();
|
||||
|
||||
void installEventFilter(QObject *filter);
|
||||
void removeEventFilter(QObject *filter);
|
||||
|
||||
void execExternal(const QString &cmd);
|
||||
|
||||
|
|
|
@ -327,8 +327,11 @@ bool Generator::writeHeaderStyleNamespace() {
|
|||
header_->stream() << "void init_" << baseName_ << "();\n\n";
|
||||
header_->popNamespace();
|
||||
}
|
||||
bool wroteForwardDeclarations = writeStructsForwardDeclarations();
|
||||
if (module_.hasStructs()) {
|
||||
header_->newline();
|
||||
if (!wroteForwardDeclarations) {
|
||||
header_->newline();
|
||||
}
|
||||
if (!writeStructsDefinitions()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -338,6 +341,32 @@ bool Generator::writeHeaderStyleNamespace() {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Generator::writeStructsForwardDeclarations() {
|
||||
bool hasNoExternalStructs = module_.enumVariables([this](const Variable &value) -> bool {
|
||||
if (value.value.type().tag == structure::TypeTag::Struct) {
|
||||
if (!module_.findStructInModule(value.value.type().name, module_)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (hasNoExternalStructs) {
|
||||
return false;
|
||||
}
|
||||
|
||||
header_->newline();
|
||||
bool result = module_.enumVariables([this](const Variable &value) -> bool {
|
||||
if (value.value.type().tag == structure::TypeTag::Struct) {
|
||||
if (!module_.findStructInModule(value.value.type().name, module_)) {
|
||||
header_->stream() << "struct " << value.value.type().name.back() << ";\n";
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
header_->newline();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool Generator::writeStructsDefinitions() {
|
||||
if (!module_.hasStructs()) {
|
||||
return true;
|
||||
|
|
|
@ -47,6 +47,7 @@ private:
|
|||
QString valueAssignmentCode(structure::Value value) const;
|
||||
|
||||
bool writeHeaderStyleNamespace();
|
||||
bool writeStructsForwardDeclarations();
|
||||
bool writeStructsDefinitions();
|
||||
bool writeRefsDeclarations();
|
||||
|
||||
|
|
|
@ -94,6 +94,9 @@ public:
|
|||
return !fullpath_.isEmpty();
|
||||
}
|
||||
|
||||
const Struct *findStructInModule(const FullName &name, const Module &module) const;
|
||||
const Variable *findVariableInModule(const FullName &name, const Module &module) const;
|
||||
|
||||
private:
|
||||
QString fullpath_;
|
||||
std::vector<std::unique_ptr<Module>> included_;
|
||||
|
@ -102,9 +105,6 @@ private:
|
|||
QMap<QString, int> structsByName_;
|
||||
QMap<QString, int> variablesByName_;
|
||||
|
||||
const Struct *findStructInModule(const FullName &name, const Module &module) const;
|
||||
const Variable *findVariableInModule(const FullName &name, const Module &module) const;
|
||||
|
||||
};
|
||||
|
||||
} // namespace structure
|
||||
|
|
116
Telegram/SourceFiles/media/view/media_clip_controller.cpp
Normal file
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
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 "media/view/media_clip_controller.h"
|
||||
|
||||
#include "media/view/media_clip_playback.h"
|
||||
#include "media/view/media_clip_volume_controller.h"
|
||||
#include "styles/style_mediaview.h"
|
||||
#include "ui/widgets/label_simple.h"
|
||||
#include "ui/effects/fade_animation.h"
|
||||
#include "ui/buttons/icon_button.h"
|
||||
#include "media/media_audio.h"
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
|
||||
Controller::Controller(QWidget *parent) : TWidget(parent)
|
||||
, _playPauseResume(this, st::mediaviewPlayButton)
|
||||
, _playback(this)
|
||||
, _volumeController(this)
|
||||
, _fullScreenToggle(this, st::mediaviewFullScreenButton)
|
||||
, _playedAlready(this, st::mediaviewPlayProgressLabel)
|
||||
, _toPlayLeft(this, st::mediaviewPlayProgressLabel)
|
||||
, _fadeAnimation(std_::make_unique<Ui::FadeAnimation>(this)) {
|
||||
_fadeAnimation->show();
|
||||
connect(_playPauseResume, SIGNAL(clicked()), this, SIGNAL(playPressed()));
|
||||
connect(_fullScreenToggle, SIGNAL(clicked()), this, SIGNAL(toFullScreenPressed()));
|
||||
connect(_playback, SIGNAL(seekProgress(int64)), this, SLOT(onSeekProgress(int64)));
|
||||
connect(_playback, SIGNAL(seekFinished(int64)), this, SLOT(onSeekFinished(int64)));
|
||||
connect(_volumeController, SIGNAL(volumeChanged(float64)), this, SIGNAL(volumeChanged(float64)));
|
||||
}
|
||||
|
||||
void Controller::onSeekProgress(int64 position) {
|
||||
_seekPosition = position;
|
||||
emit seekProgress(position);
|
||||
}
|
||||
|
||||
void Controller::onSeekFinished(int64 position) {
|
||||
_seekPosition = -1;
|
||||
emit seekFinished(position);
|
||||
}
|
||||
|
||||
void Controller::showAnimated() {
|
||||
_fadeAnimation->fadeIn(st::mvShowDuration);
|
||||
}
|
||||
|
||||
void Controller::hideAnimated() {
|
||||
_fadeAnimation->fadeOut(st::mvHideDuration);
|
||||
}
|
||||
|
||||
void Controller::updatePlayback(const AudioPlaybackState &playbackState) {
|
||||
bool showPause = (playbackState.state == AudioPlayerPlaying || playbackState.state == AudioPlayerResuming);
|
||||
if (showPause != _showPause) {
|
||||
disconnect(_playPauseResume, SIGNAL(clicked()), this, _showPause ? SIGNAL(pausePressed()) : SIGNAL(playPressed()));
|
||||
_showPause = showPause;
|
||||
connect(_playPauseResume, SIGNAL(clicked()), this, _showPause ? SIGNAL(pausePressed()) : SIGNAL(playPressed()));
|
||||
|
||||
_playPauseResume->setIcon(_showPause ? &st::mediaviewPauseIcon : nullptr);
|
||||
}
|
||||
|
||||
_playback->updateState(playbackState);
|
||||
}
|
||||
|
||||
void Controller::setInFullScreen(bool inFullScreen) {
|
||||
_fullScreenToggle->setIcon(inFullScreen ? &st::mediaviewFullScreenOutIcon : nullptr);
|
||||
disconnect(_fullScreenToggle, SIGNAL(clicked()), this, SIGNAL(toFullScreenPressed()));
|
||||
disconnect(_fullScreenToggle, SIGNAL(clicked()), this, SIGNAL(fromFullScreenPressed()));
|
||||
|
||||
auto handler = inFullScreen ? SIGNAL(fromFullScreenPressed()) : SIGNAL(toFullScreenPressed());
|
||||
connect(_fullScreenToggle, SIGNAL(clicked()), this, handler);
|
||||
}
|
||||
|
||||
void Controller::resizeEvent(QResizeEvent *e) {
|
||||
int playTop = (height() - _playPauseResume->height()) / 2;
|
||||
_playPauseResume->moveToLeft(playTop, playTop);
|
||||
_playedAlready->moveToLeft(playTop + _playPauseResume->width() + playTop, 0);
|
||||
|
||||
int fullScreenTop = (height() - _fullScreenToggle->height()) / 2;
|
||||
_fullScreenToggle->moveToRight(fullScreenTop, fullScreenTop);
|
||||
_toPlayLeft->moveToRight(fullScreenTop + _fullScreenToggle->width() + fullScreenTop, 0);
|
||||
|
||||
_volumeController->moveToRight(fullScreenTop + _fullScreenToggle->width() + fullScreenTop, (height() - _volumeController->height()) / 2);
|
||||
_playback->resize(width() - playTop - _playPauseResume->width() - playTop - fullScreenTop - _volumeController->width() - fullScreenTop - _fullScreenToggle->width() - fullScreenTop, _volumeController->height());
|
||||
_playback->moveToLeft(playTop + _playPauseResume->width() + playTop, (height() - _playback->height()) / 2);
|
||||
}
|
||||
|
||||
void Controller::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
if (_fadeAnimation->paint(p)) {
|
||||
return;
|
||||
}
|
||||
|
||||
App::roundRect(p, rect(), st::medviewSaveMsg, MediaviewSaveCorners);
|
||||
}
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
82
Telegram/SourceFiles/media/view/media_clip_controller.h
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
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 Ui {
|
||||
class LabelSimple;
|
||||
class FadeAnimation;
|
||||
class IconButton;
|
||||
} // namespace Ui
|
||||
|
||||
struct AudioPlaybackState;
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
|
||||
class Playback;
|
||||
class VolumeController;
|
||||
|
||||
class Controller : public TWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Controller(QWidget *parent);
|
||||
|
||||
void showAnimated();
|
||||
void hideAnimated();
|
||||
|
||||
void updatePlayback(const AudioPlaybackState &playbackState);
|
||||
void setInFullScreen(bool inFullScreen);
|
||||
|
||||
signals:
|
||||
void playPressed();
|
||||
void pausePressed();
|
||||
void seekProgress(int64 position);
|
||||
void seekFinished(int64 position);
|
||||
void volumeChanged(float64 volume);
|
||||
void toFullScreenPressed();
|
||||
void fromFullScreenPressed();
|
||||
|
||||
private slots:
|
||||
void onSeekProgress(int64 position);
|
||||
void onSeekFinished(int64 position);
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *e) override;
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
private:
|
||||
bool _showPause = false;
|
||||
int64 _seekPosition = -1;
|
||||
|
||||
ChildWidget<Ui::IconButton> _playPauseResume;
|
||||
ChildWidget<Playback> _playback;
|
||||
ChildWidget<VolumeController> _volumeController;
|
||||
ChildWidget<Ui::IconButton> _fullScreenToggle;
|
||||
ChildWidget<Ui::LabelSimple> _playedAlready;
|
||||
ChildWidget<Ui::LabelSimple> _toPlayLeft;
|
||||
|
||||
std_::unique_ptr<Ui::FadeAnimation> _fadeAnimation;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
131
Telegram/SourceFiles/media/view/media_clip_playback.cpp
Normal file
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
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 "media/view/media_clip_playback.h"
|
||||
|
||||
#include "styles/style_mediaview.h"
|
||||
#include "media/media_audio.h"
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
|
||||
Playback::Playback(QWidget *parent) : TWidget(parent)
|
||||
, _a_progress(animation(this, &Playback::step_progress)) {
|
||||
setCursor(style::cur_pointer);
|
||||
}
|
||||
|
||||
void Playback::updateState(const AudioPlaybackState &playbackState) {
|
||||
qint64 position = 0, duration = playbackState.duration;
|
||||
|
||||
if (!(playbackState.state & AudioPlayerStoppedMask) && playbackState.state != AudioPlayerFinishing) {
|
||||
position = playbackState.position;
|
||||
} else if (playbackState.state == AudioPlayerStoppedAtEnd) {
|
||||
position = playbackState.duration;
|
||||
} else {
|
||||
position = 0;
|
||||
}
|
||||
|
||||
float64 progress = 0.;
|
||||
if (duration) {
|
||||
progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.;
|
||||
}
|
||||
if (duration != _duration || position != _position) {
|
||||
if (duration && _duration) {
|
||||
a_progress.start(progress);
|
||||
_a_progress.start();
|
||||
} else {
|
||||
a_progress = anim::fvalue(progress, progress);
|
||||
_a_progress.stop();
|
||||
}
|
||||
_position = position;
|
||||
_duration = duration;
|
||||
}
|
||||
}
|
||||
|
||||
void Playback::step_progress(float64 ms, bool timer) {
|
||||
float64 dt = ms / (2 * AudioVoiceMsgUpdateView);
|
||||
if (_duration && dt >= 1) {
|
||||
_a_progress.stop();
|
||||
a_progress.finish();
|
||||
} else {
|
||||
a_progress.update(qMin(dt, 1.), anim::linear);
|
||||
}
|
||||
if (timer) update();
|
||||
}
|
||||
|
||||
void Playback::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
int radius = st::mediaviewPlaybackWidth / 2;
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setRenderHint(QPainter::HighQualityAntialiasing);
|
||||
|
||||
auto over = _a_over.current(getms(), _over ? 1. : 0.);
|
||||
int skip = (st::mediaviewSeekSize.width() / 2);
|
||||
int length = (width() - st::mediaviewSeekSize.width());
|
||||
float64 prg = _mouseDown ? _downProgress : a_progress.current();
|
||||
int32 from = skip, mid = qRound(from + prg * length), end = from + length;
|
||||
if (mid > from) {
|
||||
p.setClipRect(0, 0, mid, height());
|
||||
p.setOpacity(over * st::mediaviewActiveOpacity + (1. - over) * st::mediaviewInactiveOpacity);
|
||||
p.setBrush(st::mediaviewPlaybackActive);
|
||||
p.drawRoundedRect(0, (height() - st::mediaviewPlaybackWidth) / 2, mid + radius, st::mediaviewPlaybackWidth, radius, radius);
|
||||
}
|
||||
if (end > mid) {
|
||||
p.setClipRect(mid, 0, width() - mid, height());
|
||||
p.setOpacity(1.);
|
||||
p.setBrush(st::mediaviewPlaybackInactive);
|
||||
p.drawRoundedRect(mid - radius, (height() - st::mediaviewPlaybackWidth) / 2, width() - (mid - radius), st::mediaviewPlaybackWidth, radius, radius);
|
||||
}
|
||||
int x = mid - skip;
|
||||
p.setClipRect(rect());
|
||||
p.setOpacity(over * st::mediaviewActiveOpacity + (1. - over) * st::mediaviewInactiveOpacity);
|
||||
p.setBrush(st::mediaviewPlaybackActive);
|
||||
p.drawRoundedRect(x, (height() - st::mediaviewSeekSize.height()) / 2, st::mediaviewSeekSize.width(), st::mediaviewSeekSize.height(), st::mediaviewSeekSize.width() / 2, st::mediaviewSeekSize.width() / 2);
|
||||
}
|
||||
|
||||
void Playback::mouseMoveEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void Playback::mousePressEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void Playback::mouseReleaseEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void Playback::enterEvent(QEvent *e) {
|
||||
setOver(true);
|
||||
}
|
||||
|
||||
void Playback::leaveEvent(QEvent *e) {
|
||||
setOver(false);
|
||||
}
|
||||
|
||||
void Playback::setOver(bool over) {
|
||||
if (_over == over) return;
|
||||
|
||||
_over = over;
|
||||
auto from = _over ? 0. : 1., to = _over ? 1. : 0.;
|
||||
START_ANIMATION(_a_over, func(this, &Playback::updateCallback), from, to, st::mediaviewOverDuration, anim::linear);
|
||||
}
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
69
Telegram/SourceFiles/media/view/media_clip_playback.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
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
|
||||
|
||||
struct AudioPlaybackState;
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
|
||||
class Playback : public TWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Playback(QWidget *parent);
|
||||
|
||||
void updateState(const AudioPlaybackState &playbackState);
|
||||
|
||||
signals:
|
||||
void seekProgress(int64 position);
|
||||
void seekFinished(int64 position);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
void mouseReleaseEvent(QMouseEvent *e) override;
|
||||
void enterEvent(QEvent *e) override;
|
||||
void leaveEvent(QEvent *e) override;
|
||||
|
||||
private:
|
||||
void step_progress(float64 ms, bool timer);
|
||||
void updateCallback() {
|
||||
update();
|
||||
}
|
||||
void setOver(bool over);
|
||||
|
||||
bool _over = false;
|
||||
FloatAnimation _a_over;
|
||||
|
||||
int64 _position = 0;
|
||||
int64 _duration = 0;
|
||||
anim::fvalue a_progress = { 0., 0. };
|
||||
Animation _a_progress;
|
||||
|
||||
bool _mouseDown = false;
|
||||
float64 _downProgress = 0.;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
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 "media/view/media_clip_volume_controller.h"
|
||||
|
||||
#include "styles/style_mediaview.h"
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
|
||||
VolumeController::VolumeController(QWidget *parent) : TWidget(parent) {
|
||||
resize(st::mediaviewVolumeSize);
|
||||
setCursor(style::cur_pointer);
|
||||
}
|
||||
|
||||
void VolumeController::setVolume(float64 volume) {
|
||||
_volume = volume;
|
||||
update();
|
||||
}
|
||||
|
||||
void VolumeController::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
int32 top = (height() - st::mediaviewVolumeIcon.height()) / 2;
|
||||
int32 left = (width() - st::mediaviewVolumeIcon.width()) / 2;
|
||||
int32 mid = left + qRound(st::mediaviewVolumeIcon.width() * _volume);
|
||||
int32 right = left + st::mediaviewVolumeIcon.width();
|
||||
|
||||
if (mid > left) {
|
||||
auto over = _a_over.current(getms(), _over ? 1. : 0.);
|
||||
p.setOpacity(over * st::mediaviewActiveOpacity + (1. - over) * st::mediaviewInactiveOpacity);
|
||||
p.setClipRect(rtlrect(left, top, mid - left, st::mediaviewVolumeIcon.height(), width()));
|
||||
st::mediaviewVolumeOnIcon.paint(p, QPoint(left, top), width());
|
||||
}
|
||||
if (right > mid) {
|
||||
p.setClipRect(rtlrect(mid, top, right - mid, st::mediaviewVolumeIcon.height(), width()));
|
||||
st::mediaviewVolumeIcon.paint(p, QPoint(left, top), width());
|
||||
}
|
||||
}
|
||||
|
||||
void VolumeController::mouseMoveEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void VolumeController::mousePressEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void VolumeController::mouseReleaseEvent(QMouseEvent *e) {
|
||||
}
|
||||
|
||||
void VolumeController::enterEvent(QEvent *e) {
|
||||
setOver(true);
|
||||
}
|
||||
|
||||
void VolumeController::leaveEvent(QEvent *e) {
|
||||
setOver(false);
|
||||
}
|
||||
|
||||
void VolumeController::setOver(bool over) {
|
||||
if (_over == over) return;
|
||||
|
||||
_over = over;
|
||||
auto from = _over ? 0. : 1., to = _over ? 1. : 0.;
|
||||
START_ANIMATION(_a_over, func(this, &VolumeController::updateCallback), from, to, st::mediaviewOverDuration, anim::linear);
|
||||
}
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
|
@ -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 Media {
|
||||
namespace Clip {
|
||||
|
||||
class VolumeController : public TWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
VolumeController(QWidget *parent);
|
||||
|
||||
void setVolume(float64 volume);
|
||||
|
||||
signals:
|
||||
void volumeChanged(float64 volume);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
void mouseReleaseEvent(QMouseEvent *e) override;
|
||||
void enterEvent(QEvent *e) override;
|
||||
void leaveEvent(QEvent *e) override;
|
||||
|
||||
private:
|
||||
void updateCallback() {
|
||||
update();
|
||||
}
|
||||
void setOver(bool over);
|
||||
|
||||
float64 _volume = 0.;
|
||||
|
||||
bool _over = false;
|
||||
FloatAnimation _a_over;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
74
Telegram/SourceFiles/media/view/mediaview.style
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
using "basic.style";
|
||||
using "ui/widgets/widgets.style";
|
||||
|
||||
mediaviewActiveOpacity: 1.;
|
||||
mediaviewInactiveOpacity: 0.78;
|
||||
mediaviewOverDuration: 150;
|
||||
|
||||
mediaviewControllerSize: size(600px, 50px);
|
||||
mediaviewPlayProgressLabel: LabelSimple(defaultLabelSimple) {
|
||||
textFg: #ffffffc7;
|
||||
}
|
||||
mediaviewPlayButton: IconButton {
|
||||
width: 25px;
|
||||
height: 24px;
|
||||
|
||||
opacity: mediaviewInactiveOpacity;
|
||||
overOpacity: mediaviewActiveOpacity;
|
||||
|
||||
icon: icon {
|
||||
{ "media_play", #ffffff, point(0px, 0px) },
|
||||
};
|
||||
iconPosition: point(3px, 1px);
|
||||
downIconPosition: point(3px, 1px);
|
||||
|
||||
duration: mediaviewOverDuration;
|
||||
}
|
||||
mediaviewPauseIcon: icon {
|
||||
{ "media_pause", #ffffff, point(1px, 1px) }
|
||||
};
|
||||
|
||||
mediaviewFullScreenButton: IconButton(mediaviewPlayButton) {
|
||||
icon: icon {
|
||||
{ "media_fullscreen_to", #ffffff, point(0px, 0px) },
|
||||
};
|
||||
iconPosition: point(0px, 0px);
|
||||
downIconPosition: point(0px, 0px);
|
||||
}
|
||||
mediaviewFullScreenOutIcon: icon {
|
||||
{ "media_fullscreen_from", #ffffff, point(0px, 0px) },
|
||||
};
|
||||
|
||||
mediaviewPlaybackActive: #ffffff;
|
||||
mediaviewPlaybackInactive: #474747;
|
||||
mediaviewPlaybackWidth: 3px;
|
||||
mediaviewSeekSize: size(2px, 13px);
|
||||
|
||||
mediaviewVolumeSize: size(44px, 12px);
|
||||
mediaviewVolumeIcon: icon {
|
||||
{ "media_volume", mediaviewPlaybackInactive, point(0px, 0px) },
|
||||
};
|
||||
mediaviewVolumeOnIcon: icon {
|
||||
{ "media_volume", mediaviewPlaybackActive, point(0px, 0px) },
|
||||
};
|
|
@ -27,6 +27,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "application.h"
|
||||
#include "ui/filedialog.h"
|
||||
#include "media/media_clip_reader.h"
|
||||
#include "media/view/media_clip_controller.h"
|
||||
#include "styles/style_mediaview.h"
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -228,8 +230,9 @@ bool MediaView::gifShown() const {
|
|||
}
|
||||
|
||||
void MediaView::stopGif() {
|
||||
delete _gif;
|
||||
_gif = nullptr;
|
||||
_clipController.destroy();
|
||||
Sandbox::removeEventFilter(this);
|
||||
}
|
||||
|
||||
void MediaView::documentUpdated(DocumentData *doc) {
|
||||
|
@ -364,6 +367,7 @@ void MediaView::updateControls() {
|
|||
} else {
|
||||
_leftNavVisible = _rightNavVisible = false;
|
||||
}
|
||||
|
||||
if (!_caption.isEmpty()) {
|
||||
int32 skipw = qMax(_dateNav.left() + _dateNav.width(), _headerNav.left() + _headerNav.width());
|
||||
int32 maxw = qMin(qMax(width() - 2 * skipw - st::mvCaptionPadding.left() - st::mvCaptionPadding.right() - 2 * st::mvCaptionMargin.width(), int(st::msgMinWidth)), _caption.maxWidth());
|
||||
|
@ -372,6 +376,9 @@ void MediaView::updateControls() {
|
|||
} else {
|
||||
_captionRect = QRect();
|
||||
}
|
||||
if (_clipController) {
|
||||
setClipControllerGeometry();
|
||||
}
|
||||
updateOver(mapFromGlobal(QCursor::pos()));
|
||||
update();
|
||||
}
|
||||
|
@ -519,7 +526,6 @@ void MediaView::clearData() {
|
|||
}
|
||||
|
||||
MediaView::~MediaView() {
|
||||
deleteAndMark(_gif);
|
||||
deleteAndMark(_menu);
|
||||
}
|
||||
|
||||
|
@ -551,6 +557,9 @@ void MediaView::activateControls() {
|
|||
a_cOpacity.start(1);
|
||||
if (!_a_state.animating()) _a_state.start();
|
||||
}
|
||||
if (_clipController) {
|
||||
_clipController->showAnimated();
|
||||
}
|
||||
}
|
||||
|
||||
void MediaView::onHideControls(bool force) {
|
||||
|
@ -560,6 +569,9 @@ void MediaView::onHideControls(bool force) {
|
|||
_controlsAnimStarted = getms();
|
||||
a_cOpacity.start(0);
|
||||
if (!_a_state.animating()) _a_state.start();
|
||||
if (_clipController) {
|
||||
_clipController->hideAnimated();
|
||||
}
|
||||
}
|
||||
|
||||
void MediaView::onDropdownHiding() {
|
||||
|
@ -1072,24 +1084,11 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty
|
|||
} else {
|
||||
_doc->automaticLoad(item);
|
||||
|
||||
const FileLocation &location(_doc->location(true));
|
||||
if (!_doc->data().isEmpty() && (_doc->isAnimation() || _doc->isVideo())) {
|
||||
if (!_gif) {
|
||||
if (_doc->dimensions.width() && _doc->dimensions.height()) {
|
||||
_current = _doc->thumb->pixNoCache(_doc->dimensions.width(), _doc->dimensions.height(), ImagePixSmooth | ImagePixBlurred, _doc->dimensions.width(), _doc->dimensions.height());
|
||||
}
|
||||
_gif = new Media::Clip::Reader(location, _doc->data(), func(this, &MediaView::clipCallback));
|
||||
}
|
||||
} else if (location.accessEnable()) {
|
||||
if (_doc->isAnimation() || _doc->isVideo()) {
|
||||
if (!_gif) {
|
||||
if (_doc->dimensions.width() && _doc->dimensions.height()) {
|
||||
_current = _doc->thumb->pixNoCache(_doc->dimensions.width(), _doc->dimensions.height(), ImagePixSmooth | ImagePixBlurred, _doc->dimensions.width(), _doc->dimensions.height());
|
||||
}
|
||||
auto mode = _doc->isVideo() ? Media::Clip::Reader::Mode::Video : Media::Clip::Reader::Mode::Gif;
|
||||
_gif = new Media::Clip::Reader(location, _doc->data(), func(this, &MediaView::clipCallback), mode);
|
||||
}
|
||||
} else {
|
||||
if (_doc->isAnimation() || _doc->isVideo()) {
|
||||
initAnimation();
|
||||
} else {
|
||||
const FileLocation &location(_doc->location(true));
|
||||
if (location.accessEnable()) {
|
||||
if (QImageReader(location.name()).canRead()) {
|
||||
_current = QPixmap::fromImage(App::readImage(location.name(), 0, false), Qt::ColorOnly);
|
||||
}
|
||||
|
@ -1202,6 +1201,94 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty
|
|||
}
|
||||
}
|
||||
|
||||
void MediaView::initAnimation() {
|
||||
t_assert(_doc != nullptr);
|
||||
t_assert(_doc->isAnimation() || _doc->isVideo());
|
||||
|
||||
auto &location = _doc->location(true);
|
||||
if (!_doc->data().isEmpty()) {
|
||||
createClipReader();
|
||||
} else if (location.accessEnable()) {
|
||||
createClipReader();
|
||||
location.accessDisable();
|
||||
}
|
||||
}
|
||||
|
||||
void MediaView::createClipReader() {
|
||||
if (_gif) return;
|
||||
|
||||
t_assert(_doc != nullptr);
|
||||
t_assert(_doc->isAnimation() || _doc->isVideo());
|
||||
|
||||
if (_doc->dimensions.width() && _doc->dimensions.height()) {
|
||||
_current = _doc->thumb->pixNoCache(_doc->dimensions.width(), _doc->dimensions.height(), ImagePixSmooth | ImagePixBlurred, _doc->dimensions.width(), _doc->dimensions.height());
|
||||
}
|
||||
auto mode = _doc->isVideo() ? Media::Clip::Reader::Mode::Video : Media::Clip::Reader::Mode::Gif;
|
||||
_gif = std_::make_unique<Media::Clip::Reader>(_doc->location(), _doc->data(), func(this, &MediaView::clipCallback), mode);
|
||||
|
||||
createClipController();
|
||||
}
|
||||
|
||||
void MediaView::createClipController() {
|
||||
if (!_doc->isVideo()) return;
|
||||
|
||||
_clipController.destroy();
|
||||
_clipController = new Media::Clip::Controller(this);
|
||||
setClipControllerGeometry();
|
||||
_clipController->show();
|
||||
|
||||
connect(_clipController, SIGNAL(playPressed()), this, SLOT(onVideoPlay()));
|
||||
connect(_clipController, SIGNAL(pausePressed()), this, SLOT(onVideoPause()));
|
||||
connect(_clipController, SIGNAL(seekProgress(int64)), this, SLOT(onVideoSeekProgress(int64)));
|
||||
connect(_clipController, SIGNAL(seekFinished(int64)), this, SLOT(onVideoSeekFinished(int64)));
|
||||
connect(_clipController, SIGNAL(volumeChanged(float64)), this, SLOT(onVideoVolumeChanged(float64)));
|
||||
connect(_clipController, SIGNAL(toFullScreenPressed()), this, SLOT(onVideoToFullScreen()));
|
||||
connect(_clipController, SIGNAL(fromFullScreenPressed()), this, SLOT(onVideoFromFullScreen()));
|
||||
|
||||
Sandbox::removeEventFilter(this);
|
||||
Sandbox::installEventFilter(this);
|
||||
}
|
||||
|
||||
void MediaView::setClipControllerGeometry() {
|
||||
t_assert(_clipController != nullptr);
|
||||
|
||||
int controllerBottom = _captionRect.isEmpty() ? height() : _captionRect.y();
|
||||
_clipController->setGeometry(
|
||||
(width() - _clipController->width()) / 2,
|
||||
controllerBottom - _clipController->height() - st::mvCaptionPadding.bottom() - st::mvCaptionMargin.height(),
|
||||
st::mediaviewControllerSize.width(),
|
||||
st::mediaviewControllerSize.height());
|
||||
myEnsureResized(_clipController);
|
||||
}
|
||||
|
||||
void MediaView::onVideoPlay() {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoPause() {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoSeekProgress(int64 position) {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoSeekFinished(int64 position) {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoVolumeChanged(float64 volume) {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoToFullScreen() {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::onVideoFromFullScreen() {
|
||||
|
||||
}
|
||||
|
||||
void MediaView::paintEvent(QPaintEvent *e) {
|
||||
QRect r(e->rect());
|
||||
QRegion region(e->region());
|
||||
|
@ -1833,9 +1920,6 @@ void MediaView::snapXY() {
|
|||
}
|
||||
|
||||
void MediaView::mouseMoveEvent(QMouseEvent *e) {
|
||||
bool moved = (e->pos() != _lastMouseMovePos);
|
||||
_lastMouseMovePos = e->pos();
|
||||
|
||||
updateOver(e->pos());
|
||||
if (_lastAction.x() >= 0 && (e->pos() - _lastAction).manhattanLength() >= st::mvDeltaFromLastAction) {
|
||||
_lastAction = QPoint(-st::mvDeltaFromLastAction, -st::mvDeltaFromLastAction);
|
||||
|
@ -1858,7 +1942,6 @@ void MediaView::mouseMoveEvent(QMouseEvent *e) {
|
|||
update();
|
||||
}
|
||||
}
|
||||
if (moved) activateControls();
|
||||
}
|
||||
|
||||
void MediaView::updateOverRect(OverState state) {
|
||||
|
@ -2105,6 +2188,18 @@ bool MediaView::event(QEvent *e) {
|
|||
return QWidget::event(e);
|
||||
}
|
||||
|
||||
bool MediaView::eventFilter(QObject *obj, QEvent *e) {
|
||||
if (e->type() == QEvent::MouseMove && obj->isWidgetType()) {
|
||||
if (isAncestorOf(static_cast<QWidget*>(obj))) {
|
||||
auto mousePosition = mapFromGlobal(static_cast<QMouseEvent*>(e)->globalPos());
|
||||
bool moved = (mousePosition != _lastMouseMovePos);
|
||||
_lastMouseMovePos = mousePosition;
|
||||
if (moved) activateControls();
|
||||
}
|
||||
}
|
||||
return TWidget::eventFilter(obj, e);
|
||||
}
|
||||
|
||||
void MediaView::hide() {
|
||||
_controlsHideTimer.stop();
|
||||
_controlsState = ControlsShown;
|
||||
|
|
|
@ -22,23 +22,18 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
|
||||
#include "dropdown.h"
|
||||
|
||||
namespace Media {
|
||||
namespace Clip {
|
||||
class Controller;
|
||||
} // namespace Clip
|
||||
} // namespace Media
|
||||
|
||||
class MediaView : public TWidget, public RPCSender, public ClickHandlerHost {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MediaView();
|
||||
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
void mouseReleaseEvent(QMouseEvent *e) override;
|
||||
void contextMenuEvent(QContextMenuEvent *e) override;
|
||||
void touchEvent(QTouchEvent *e);
|
||||
|
||||
bool event(QEvent *e) override;
|
||||
|
||||
void hide();
|
||||
|
||||
void updateOver(QPoint mpos);
|
||||
|
@ -106,12 +101,40 @@ public slots:
|
|||
|
||||
void updateImage();
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
void mouseReleaseEvent(QMouseEvent *e) override;
|
||||
void contextMenuEvent(QContextMenuEvent *e) override;
|
||||
void touchEvent(QTouchEvent *e);
|
||||
|
||||
bool event(QEvent *e) override;
|
||||
bool eventFilter(QObject *obj, QEvent *e) override;
|
||||
|
||||
private slots:
|
||||
void onVideoPlay();
|
||||
void onVideoPause();
|
||||
void onVideoSeekProgress(int64 position);
|
||||
void onVideoSeekFinished(int64 position);
|
||||
void onVideoVolumeChanged(float64 volume);
|
||||
void onVideoToFullScreen();
|
||||
void onVideoFromFullScreen();
|
||||
|
||||
private:
|
||||
void displayPhoto(PhotoData *photo, HistoryItem *item);
|
||||
void displayDocument(DocumentData *doc, HistoryItem *item);
|
||||
void findCurrent();
|
||||
void loadBack();
|
||||
|
||||
void createClipController();
|
||||
void setClipControllerGeometry();
|
||||
|
||||
void initAnimation();
|
||||
void createClipReader();
|
||||
|
||||
// Radial animation interface.
|
||||
float64 radialProgress() const;
|
||||
bool radialLoading() const;
|
||||
|
@ -154,6 +177,8 @@ private:
|
|||
QString _dateText;
|
||||
QString _headerText;
|
||||
|
||||
ChildWidget<Media::Clip::Controller> _clipController = { nullptr };
|
||||
|
||||
Text _caption;
|
||||
QRect _captionRect;
|
||||
|
||||
|
@ -168,7 +193,7 @@ private:
|
|||
bool _pressed = false;
|
||||
int32 _dragging = 0;
|
||||
QPixmap _current;
|
||||
Media::Clip::Reader *_gif = nullptr;
|
||||
std_::unique_ptr<Media::Clip::Reader> _gif;
|
||||
int32 _full = -1; // -1 - thumb, 0 - medium, 1 - full
|
||||
|
||||
bool fileShown() const;
|
||||
|
|
|
@ -486,7 +486,6 @@ using FloatAnimation = SimpleAnimation<anim::fvalue>;
|
|||
using IntAnimation = SimpleAnimation<anim::ivalue>;
|
||||
using ColorAnimation = SimpleAnimation<anim::cvalue>;
|
||||
|
||||
|
||||
// Macro allows us to lazily create updateCallback.
|
||||
#define ENSURE_ANIMATION(animation, updateCallback, from) \
|
||||
if ((animation).isNull()) { \
|
||||
|
|
56
Telegram/SourceFiles/ui/buttons/icon_button.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
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 "ui/buttons/icon_button.h"
|
||||
|
||||
namespace Ui {
|
||||
|
||||
IconButton::IconButton(QWidget *parent, const style::IconButton &st) : Button(parent)
|
||||
, _st(st) {
|
||||
resize(_st.width, _st.height);
|
||||
setCursor(style::cur_pointer);
|
||||
}
|
||||
|
||||
void IconButton::setIcon(const style::icon *icon) {
|
||||
_iconOverride = icon;
|
||||
update();
|
||||
}
|
||||
|
||||
void IconButton::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
auto over = _a_over.current(getms(), (_state & StateOver) ? 1. : 0.);
|
||||
p.setOpacity(over * _st.overOpacity + (1. - over) * _st.opacity);
|
||||
|
||||
auto position = (_state & StateDown) ? _st.downIconPosition : _st.iconPosition;
|
||||
(_iconOverride ? _iconOverride : &_st.icon)->paint(p, position, width());
|
||||
}
|
||||
|
||||
void IconButton::onStateChanged(int oldState, ButtonStateChangeSource source) {
|
||||
auto over = (_state & StateOver);
|
||||
if (over != (oldState & StateOver)) {
|
||||
auto from = over ? 0. : 1.;
|
||||
auto to = over ? 1. : 0.;
|
||||
START_ANIMATION(_a_over, func(this, &IconButton::updateCallback), from, to, _st.duration, anim::linear);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Ui
|
51
Telegram/SourceFiles/ui/buttons/icon_button.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
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
|
||||
|
||||
#include "ui/button.h"
|
||||
|
||||
namespace Ui {
|
||||
|
||||
class IconButton : public Button {
|
||||
public:
|
||||
IconButton(QWidget *parent, const style::IconButton &st);
|
||||
|
||||
// Pass nullptr to restore the default icon.
|
||||
void setIcon(const style::icon *icon);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
void onStateChanged(int oldState, ButtonStateChangeSource source) override;
|
||||
|
||||
private:
|
||||
void updateCallback() {
|
||||
update();
|
||||
}
|
||||
|
||||
const style::IconButton &_st;
|
||||
const style::icon *_iconOverride = nullptr;
|
||||
|
||||
FloatAnimation _a_over;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Ui
|
99
Telegram/SourceFiles/ui/effects/fade_animation.cpp
Normal file
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
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 "ui/effects/fade_animation.h"
|
||||
|
||||
namespace Ui {
|
||||
|
||||
FadeAnimation::FadeAnimation(TWidget *widget) : _widget(widget) {
|
||||
}
|
||||
|
||||
bool FadeAnimation::paint(Painter &p) {
|
||||
if (_cache.isNull()) return false;
|
||||
|
||||
bool animating = _animation.animating(getms());
|
||||
|
||||
p.setOpacity(_animation.current(_visible ? 1. : 0.));
|
||||
p.drawPixmap(0, 0, _cache);
|
||||
if (!animating) {
|
||||
stopAnimation();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void FadeAnimation::setFinishedCallback(FinishedCallback &&callback) {
|
||||
_finishedCallback = std_::move(callback);
|
||||
}
|
||||
|
||||
void FadeAnimation::show() {
|
||||
_visible = true;
|
||||
stopAnimation();
|
||||
}
|
||||
|
||||
void FadeAnimation::hide() {
|
||||
_visible = false;
|
||||
stopAnimation();
|
||||
}
|
||||
|
||||
void FadeAnimation::stopAnimation() {
|
||||
_animation.finish();
|
||||
if (!_cache.isNull()) {
|
||||
_cache = QPixmap();
|
||||
updateCallback();
|
||||
_widget->showChildren();
|
||||
_finishedCallback.call();
|
||||
}
|
||||
if (_visible == _widget->isHidden()) {
|
||||
_widget->setVisible(_visible);
|
||||
}
|
||||
}
|
||||
|
||||
void FadeAnimation::fadeIn(int duration) {
|
||||
if (_visible) return;
|
||||
|
||||
_visible = true;
|
||||
startAnimation(duration);
|
||||
}
|
||||
|
||||
void FadeAnimation::fadeOut(int duration) {
|
||||
if (!_visible) return;
|
||||
|
||||
_visible = false;
|
||||
startAnimation(duration);
|
||||
}
|
||||
|
||||
void FadeAnimation::startAnimation(int duration) {
|
||||
if (_cache.isNull()) {
|
||||
_cache = myGrab(_widget);
|
||||
_widget->hideChildren();
|
||||
}
|
||||
START_ANIMATION(_animation, func(this, &FadeAnimation::updateCallback), _visible ? 0. : 1., _visible ? 1. : 0., duration, anim::linear);
|
||||
updateCallback();
|
||||
if (_widget->isHidden()) {
|
||||
_widget->show();
|
||||
}
|
||||
}
|
||||
|
||||
void FadeAnimation::updateCallback() {
|
||||
_widget->update();
|
||||
}
|
||||
|
||||
} // namespace Ui
|
57
Telegram/SourceFiles/ui/effects/fade_animation.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
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
|
||||
|
||||
class TWidget;
|
||||
|
||||
namespace Ui {
|
||||
|
||||
class FadeAnimation {
|
||||
public:
|
||||
FadeAnimation(TWidget *widget);
|
||||
|
||||
bool paint(Painter &p);
|
||||
|
||||
using FinishedCallback = Function<void>;
|
||||
void setFinishedCallback(FinishedCallback &&callback);
|
||||
|
||||
void show();
|
||||
void hide();
|
||||
|
||||
void fadeIn(int duration);
|
||||
void fadeOut(int duration);
|
||||
|
||||
private:
|
||||
void startAnimation(int duration);
|
||||
void stopAnimation();
|
||||
|
||||
void updateCallback();
|
||||
|
||||
TWidget *_widget;
|
||||
FloatAnimation _animation;
|
||||
QPixmap _cache;
|
||||
bool _visible = false;
|
||||
|
||||
FinishedCallback _finishedCallback;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Ui
|
52
Telegram/SourceFiles/ui/widgets/label_simple.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
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 "ui/widgets/label_simple.h"
|
||||
|
||||
namespace Ui {
|
||||
|
||||
LabelSimple::LabelSimple(QWidget *parent, const style::LabelSimple &st, const QString &value) : TWidget(parent)
|
||||
, _st(st) {
|
||||
setText(value);
|
||||
}
|
||||
|
||||
void LabelSimple::setText(const QString &value) {
|
||||
_fullText = value;
|
||||
_fullTextWidth = _st.font->width(_fullText);
|
||||
if (!_st.maxWidth || _fullTextWidth <= _st.maxWidth) {
|
||||
_text = _fullText;
|
||||
_textWidth = _fullTextWidth;
|
||||
} else {
|
||||
_text = _st.font->elided(_fullText, _st.maxWidth);
|
||||
_textWidth = _st.font->width(_text);
|
||||
}
|
||||
resize(_textWidth, _st.font->height);
|
||||
}
|
||||
|
||||
void LabelSimple::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
p.setFont(_st.font);
|
||||
p.setPen(_st.textFg);
|
||||
p.drawTextLeft(0, 0, width(), _text, _textWidth);
|
||||
}
|
||||
|
||||
} // namespace Ui
|
48
Telegram/SourceFiles/ui/widgets/label_simple.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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
|
||||
|
||||
#include "styles/style_widgets.h"
|
||||
|
||||
namespace Ui {
|
||||
|
||||
class LabelSimple : public TWidget {
|
||||
public:
|
||||
LabelSimple(QWidget *parent, const style::LabelSimple &st = st::defaultLabelSimple, const QString &value = QString());
|
||||
|
||||
// This method also resizes the label.
|
||||
void setText(const QString &newText);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
private:
|
||||
QString _fullText;
|
||||
int _fullTextWidth;
|
||||
|
||||
QString _text;
|
||||
int _textWidth;
|
||||
|
||||
const style::LabelSimple &_st;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Ui
|
34
Telegram/SourceFiles/ui/widgets/widgets.style
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
using "basic.style";
|
||||
|
||||
LabelSimple {
|
||||
font: font;
|
||||
maxWidth: pixels;
|
||||
textFg: color;
|
||||
}
|
||||
|
||||
defaultLabelSimple: LabelSimple {
|
||||
font: normalFont;
|
||||
maxWidth: 0px;
|
||||
textFg: windowTextFg;
|
||||
}
|
|
@ -375,10 +375,22 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_playback.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_reader.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_volume_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_overviewwidget.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
|
@ -713,10 +725,22 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_playback.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_reader.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_volume_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_overviewwidget.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
|
@ -1082,10 +1106,22 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_playback.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_reader.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_volume_controller.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_overviewwidget.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
|
@ -1211,8 +1247,10 @@
|
|||
<ClCompile Include="GeneratedFiles\styles\style_basic_types.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_dialogs.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_history.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_mediaview.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_overview.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_profile.cpp" />
|
||||
<ClCompile Include="GeneratedFiles\styles\style_widgets.cpp" />
|
||||
<ClCompile Include="SourceFiles\apiwrap.cpp" />
|
||||
<ClCompile Include="SourceFiles\app.cpp" />
|
||||
<ClCompile Include="SourceFiles\application.cpp" />
|
||||
|
@ -1282,6 +1320,9 @@
|
|||
<ClCompile Include="SourceFiles\media\media_clip_implementation.cpp" />
|
||||
<ClCompile Include="SourceFiles\media\media_clip_qtgif.cpp" />
|
||||
<ClCompile Include="SourceFiles\media\media_clip_reader.cpp" />
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_controller.cpp" />
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_playback.cpp" />
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_volume_controller.cpp" />
|
||||
<ClCompile Include="SourceFiles\mtproto\auth_key.cpp" />
|
||||
<ClCompile Include="SourceFiles\mtproto\connection.cpp" />
|
||||
<ClCompile Include="SourceFiles\mtproto\connection_abstract.cpp" />
|
||||
|
@ -1388,10 +1429,12 @@
|
|||
<ClCompile Include="SourceFiles\ui\boxshadow.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\buttons\history_down_button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\buttons\icon_button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\buttons\left_outline_button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\buttons\peer_avatar_button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\buttons\round_button.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\countryinput.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\effects\fade_animation.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\emoji_config.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\filedialog.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\flatbutton.cpp" />
|
||||
|
@ -1416,6 +1459,7 @@
|
|||
<ClCompile Include="SourceFiles\ui\toast\toast_widget.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\twidget.cpp" />
|
||||
<ClCompile Include="SourceFiles\mainwindow.cpp" />
|
||||
<ClCompile Include="SourceFiles\ui\widgets\label_simple.cpp" />
|
||||
<ClCompile Include="SourceFiles\window\main_window.cpp" />
|
||||
<ClCompile Include="SourceFiles\window\section_widget.cpp" />
|
||||
<ClCompile Include="SourceFiles\window\slide_animation.cpp" />
|
||||
|
@ -1491,8 +1535,10 @@
|
|||
<ClInclude Include="GeneratedFiles\styles\style_basic_types.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_dialogs.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_history.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_mediaview.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_overview.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_profile.h" />
|
||||
<ClInclude Include="GeneratedFiles\styles\style_widgets.h" />
|
||||
<ClInclude Include="Resources\winrc\resource.h" />
|
||||
<CustomBuild Include="SourceFiles\boxes\report_box.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
|
@ -1588,6 +1634,48 @@
|
|||
<ClInclude Include="SourceFiles\media\media_clip_ffmpeg.h" />
|
||||
<ClInclude Include="SourceFiles\media\media_clip_implementation.h" />
|
||||
<ClInclude Include="SourceFiles\media\media_clip_qtgif.h" />
|
||||
<CustomBuild Include="SourceFiles\media\view\media_clip_controller.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing media_clip_controller.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/media/view/media_clip_controller.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 media_clip_controller.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/media/view/media_clip_controller.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 media_clip_controller.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/media/view/media_clip_controller.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 Include="SourceFiles\media\view\media_clip_playback.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing media_clip_playback.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/media/view/media_clip_playback.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 media_clip_playback.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/media/view/media_clip_playback.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 media_clip_playback.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/media/view/media_clip_playback.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 Include="SourceFiles\media\view\media_clip_volume_controller.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing media_clip_volume_controller.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/media/view/media_clip_volume_controller.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 media_clip_volume_controller.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/media/view/media_clip_volume_controller.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 media_clip_volume_controller.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/media/view/media_clip_volume_controller.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\mtproto\auth_key.h" />
|
||||
<CustomBuild Include="SourceFiles\mtproto\connection.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
|
@ -1934,9 +2022,11 @@
|
|||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -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" "-fstdafx.h" "-f../../SourceFiles/ui/countryinput.h"</Command>
|
||||
</CustomBuild>
|
||||
<ClInclude Include="SourceFiles\ui\buttons\history_down_button.h" />
|
||||
<ClInclude Include="SourceFiles\ui\buttons\icon_button.h" />
|
||||
<ClInclude Include="SourceFiles\ui\buttons\left_outline_button.h" />
|
||||
<ClInclude Include="SourceFiles\ui\buttons\peer_avatar_button.h" />
|
||||
<ClInclude Include="SourceFiles\ui\buttons\round_button.h" />
|
||||
<ClInclude Include="SourceFiles\ui\effects\fade_animation.h" />
|
||||
<ClInclude Include="SourceFiles\ui\emoji_config.h" />
|
||||
<ClInclude Include="SourceFiles\ui\filedialog.h" />
|
||||
<CustomBuild Include="SourceFiles\ui\flatbutton.h">
|
||||
|
@ -2119,6 +2209,7 @@
|
|||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window/section_widget.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 Include="SourceFiles\window\main_window.h" />
|
||||
<CustomBuild Include="SourceFiles\ui\widgets\label_simple.h" />
|
||||
<ClInclude Include="SourceFiles\window\section_memento.h" />
|
||||
<ClInclude Include="SourceFiles\window\slide_animation.h" />
|
||||
<ClInclude Include="ThirdParty\minizip\crypt.h" />
|
||||
|
@ -2929,6 +3020,8 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</CodegenStyleItem>
|
||||
<CodegenStyleItem Include="SourceFiles\media\view\mediaview.style" />
|
||||
<CodegenStyleItem Include="SourceFiles\ui\widgets\widgets.style" />
|
||||
<CustomBuild Include="Resources\basic.style">
|
||||
<FileType>Document</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(SolutionDir)$(Platform)\codegen\$(Configuration)\codegen_style.exe" "-I.\Resources" "-I.\SourceFiles" "-o.\GeneratedFiles\styles" %(FullPath)</Command>
|
||||
|
|
|
@ -115,6 +115,15 @@
|
|||
<Filter Include="SourceFiles\media">
|
||||
<UniqueIdentifier>{a281888a-8b70-4e95-9b03-ebcb02837df4}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="SourceFiles\ui\widgets">
|
||||
<UniqueIdentifier>{1937d8d7-6dd1-4147-8afb-6f03daff4f0e}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="SourceFiles\media\view">
|
||||
<UniqueIdentifier>{59996402-fc66-481c-9a12-5619112c60a5}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="SourceFiles\ui\effects">
|
||||
<UniqueIdentifier>{4fdf499d-a1be-46ce-9f17-af007a72e915}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SourceFiles\main.cpp">
|
||||
|
@ -1389,6 +1398,57 @@
|
|||
<ClCompile Include="SourceFiles\media\media_audio_loader.cpp">
|
||||
<Filter>SourceFiles\media</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\ui\widgets\label_simple.cpp">
|
||||
<Filter>SourceFiles\ui\widgets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_controller.cpp">
|
||||
<Filter>GeneratedFiles\Deploy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_controller.cpp">
|
||||
<Filter>GeneratedFiles\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_controller.cpp">
|
||||
<Filter>GeneratedFiles\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_controller.cpp">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\styles\style_mediaview.cpp">
|
||||
<Filter>GeneratedFiles\styles</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\styles\style_widgets.cpp">
|
||||
<Filter>GeneratedFiles\styles</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\ui\effects\fade_animation.cpp">
|
||||
<Filter>SourceFiles\ui\effects</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\ui\buttons\icon_button.cpp">
|
||||
<Filter>SourceFiles\ui\buttons</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_playback.cpp">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_playback.cpp">
|
||||
<Filter>GeneratedFiles\Deploy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SourceFiles\media\view\media_clip_volume_controller.cpp">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_playback.cpp">
|
||||
<Filter>GeneratedFiles\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_playback.cpp">
|
||||
<Filter>GeneratedFiles\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Deploy\moc_media_clip_volume_controller.cpp">
|
||||
<Filter>GeneratedFiles\Deploy</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Debug\moc_media_clip_volume_controller.cpp">
|
||||
<Filter>GeneratedFiles\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GeneratedFiles\Release\moc_media_clip_volume_controller.cpp">
|
||||
<Filter>GeneratedFiles\Release</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SourceFiles\stdafx.h">
|
||||
|
@ -1658,6 +1718,18 @@
|
|||
<ClInclude Include="SourceFiles\media\media_audio_ffmpeg_loader.h">
|
||||
<Filter>SourceFiles\media</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GeneratedFiles\styles\style_mediaview.h">
|
||||
<Filter>GeneratedFiles\styles</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GeneratedFiles\styles\style_widgets.h">
|
||||
<Filter>GeneratedFiles\styles</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SourceFiles\ui\effects\fade_animation.h">
|
||||
<Filter>SourceFiles\ui\effects</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SourceFiles\ui\buttons\icon_button.h">
|
||||
<Filter>SourceFiles\ui\buttons</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="SourceFiles\application.h">
|
||||
|
@ -1954,6 +2026,18 @@
|
|||
<CustomBuild Include="SourceFiles\media\media_audio_loaders.h">
|
||||
<Filter>SourceFiles\media</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="SourceFiles\ui\widgets\label_simple.h">
|
||||
<Filter>SourceFiles\ui\widgets</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="SourceFiles\media\view\media_clip_controller.h">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="SourceFiles\media\view\media_clip_playback.h">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="SourceFiles\media\view\media_clip_volume_controller.h">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\langs\lang_it.strings">
|
||||
|
@ -2035,6 +2119,12 @@
|
|||
<CodegenStyleItem Include="SourceFiles\profile\profile.style">
|
||||
<Filter>SourceFiles\profile</Filter>
|
||||
</CodegenStyleItem>
|
||||
<CodegenStyleItem Include="SourceFiles\ui\widgets\widgets.style">
|
||||
<Filter>SourceFiles\ui\widgets</Filter>
|
||||
</CodegenStyleItem>
|
||||
<CodegenStyleItem Include="SourceFiles\media\view\mediaview.style">
|
||||
<Filter>SourceFiles\media\view</Filter>
|
||||
</CodegenStyleItem>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Resources\winrc\Telegram.rc">
|
||||
|
|