Version 0.10.14 alpha: userpic images are now generated as icons.
Also fixed Windows build by adding breakpad include path back to gyp.
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.7 KiB |
|
@ -41,15 +41,6 @@ transparent: #fff0;
|
||||||
white: #fff;
|
white: #fff;
|
||||||
black: #000;
|
black: #000;
|
||||||
|
|
||||||
color1: #c03d33; // red
|
|
||||||
color2: #4fad2d; // green
|
|
||||||
color3: #d09306; // yellow
|
|
||||||
color4: #348cd4; // blue
|
|
||||||
color5: #8544d6; // purple
|
|
||||||
color6: #cd4073; // pink
|
|
||||||
color7: #2996ad; // sea
|
|
||||||
color8: #ce671b; // orange
|
|
||||||
|
|
||||||
wndMinWidth: 380px;
|
wndMinWidth: 380px;
|
||||||
|
|
||||||
adaptiveNormalWidth: 640px;
|
adaptiveNormalWidth: 640px;
|
||||||
|
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 7.5 KiB |
|
@ -10,28 +10,9 @@
|
||||||
<file>art/sprite_125x.png</file>
|
<file>art/sprite_125x.png</file>
|
||||||
<file>art/sprite_150x.png</file>
|
<file>art/sprite_150x.png</file>
|
||||||
<file>art/sprite_200x.png</file>
|
<file>art/sprite_200x.png</file>
|
||||||
<file>art/blank.gif</file>
|
|
||||||
<file>art/icon256.png</file>
|
<file>art/icon256.png</file>
|
||||||
<file>art/iconbig256.png</file>
|
<file>art/iconbig256.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/ava">
|
|
||||||
<file>art/chatcolor1.png</file>
|
|
||||||
<file>art/chatcolor2.png</file>
|
|
||||||
<file>art/chatcolor3.png</file>
|
|
||||||
<file>art/chatcolor4.png</file>
|
|
||||||
<file>art/channelcolor1.png</file>
|
|
||||||
<file>art/channelcolor2.png</file>
|
|
||||||
<file>art/channelcolor3.png</file>
|
|
||||||
<file>art/channelcolor4.png</file>
|
|
||||||
<file>art/usercolor1.png</file>
|
|
||||||
<file>art/usercolor2.png</file>
|
|
||||||
<file>art/usercolor3.png</file>
|
|
||||||
<file>art/usercolor4.png</file>
|
|
||||||
<file>art/usercolor5.png</file>
|
|
||||||
<file>art/usercolor6.png</file>
|
|
||||||
<file>art/usercolor7.png</file>
|
|
||||||
<file>art/usercolor8.png</file>
|
|
||||||
</qresource>
|
|
||||||
<qresource prefix="/qt-project.org">
|
<qresource prefix="/qt-project.org">
|
||||||
<file>qmime/freedesktop.org.xml</file>
|
<file>qmime/freedesktop.org.xml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
|
|
@ -92,3 +92,44 @@ historyViewsInSelectedIcon: icon {{ "history_views", #6a9bc5 }};
|
||||||
historyViewsOutIcon: icon {{ "history_views", historyOutFg }};
|
historyViewsOutIcon: icon {{ "history_views", historyOutFg }};
|
||||||
historyViewsOutSelectedIcon: icon {{ "history_views", historyOutSelectedFg }};
|
historyViewsOutSelectedIcon: icon {{ "history_views", historyOutSelectedFg }};
|
||||||
historyViewsInvertedIcon: icon {{ "history_views", #ffffffe6 }};
|
historyViewsInvertedIcon: icon {{ "history_views", #ffffffe6 }};
|
||||||
|
|
||||||
|
historyPeer1NameFg: #c03d33; // red
|
||||||
|
historyPeer1UserpicBg: #ed9482;
|
||||||
|
historyPeer1UserpicFg: #d3644b;
|
||||||
|
historyPeer1UserpicPerson: icon {{ size(120px, 120px), historyPeer1UserpicBg }, { "userpic_person", historyPeer1UserpicFg }};
|
||||||
|
historyPeer1UserpicChat: icon {{ size(120px, 120px), historyPeer1UserpicBg }, { "userpic_chat", historyPeer1UserpicFg }};
|
||||||
|
historyPeer1UserpicChannel: icon {{ size(120px, 120px), historyPeer1UserpicBg }, { "userpic_channel", historyPeer1UserpicFg }};
|
||||||
|
historyPeer2NameFg: #4fad2d; // green
|
||||||
|
historyPeer2UserpicBg: #a8db92;
|
||||||
|
historyPeer2UserpicFg: #75c057;
|
||||||
|
historyPeer2UserpicPerson: icon {{ size(120px, 120px), historyPeer2UserpicBg }, { "userpic_person", historyPeer2UserpicFg }};
|
||||||
|
historyPeer2UserpicChat: icon {{ size(120px, 120px), historyPeer2UserpicBg }, { "userpic_chat", historyPeer2UserpicFg }};
|
||||||
|
historyPeer2UserpicChannel: icon {{ size(120px, 120px), historyPeer2UserpicBg }, { "userpic_channel", historyPeer2UserpicFg }};
|
||||||
|
historyPeer3NameFg: #d09306; // yellow
|
||||||
|
historyPeer3UserpicBg: #efd289;
|
||||||
|
historyPeer3UserpicFg: #e4a861;
|
||||||
|
historyPeer3UserpicPerson: icon {{ size(120px, 120px), historyPeer3UserpicBg }, { "userpic_person", historyPeer3UserpicFg }};
|
||||||
|
historyPeer3UserpicChat: icon {{ size(120px, 120px), historyPeer3UserpicBg }, { "userpic_chat", historyPeer3UserpicFg }};
|
||||||
|
historyPeer3UserpicChannel: icon {{ size(120px, 120px), historyPeer3UserpicBg }, { "userpic_channel", historyPeer3UserpicFg }};
|
||||||
|
historyPeer4NameFg: #348cd4; // blue
|
||||||
|
historyPeer4UserpicBg: #8fbfe9;
|
||||||
|
historyPeer4UserpicFg: #649fd3;
|
||||||
|
historyPeer4UserpicPerson: icon {{ size(120px, 120px), historyPeer4UserpicBg }, { "userpic_person", historyPeer4UserpicFg }};
|
||||||
|
historyPeer4UserpicChat: icon {{ size(120px, 120px), historyPeer4UserpicBg }, { "userpic_chat", historyPeer4UserpicFg }};
|
||||||
|
historyPeer4UserpicChannel: icon {{ size(120px, 120px), historyPeer4UserpicBg }, { "userpic_channel", historyPeer4UserpicFg }};
|
||||||
|
historyPeer5NameFg: #8544d6; // purple
|
||||||
|
historyPeer5UserpicBg: #9992e4;
|
||||||
|
historyPeer5UserpicFg: #7b72cf;
|
||||||
|
historyPeer5UserpicPerson: icon {{ size(120px, 120px), historyPeer5UserpicBg }, { "userpic_person", historyPeer5UserpicFg }};
|
||||||
|
historyPeer6NameFg: #cd4073; // pink
|
||||||
|
historyPeer6UserpicBg: #ffa9c3;
|
||||||
|
historyPeer6UserpicFg: #e87497;
|
||||||
|
historyPeer6UserpicPerson: icon {{ size(120px, 120px), historyPeer6UserpicBg }, { "userpic_person", historyPeer6UserpicFg }};
|
||||||
|
historyPeer7NameFg: #2996ad; // sea
|
||||||
|
historyPeer7UserpicBg: #8eccdb;
|
||||||
|
historyPeer7UserpicFg: #5eb2c7;
|
||||||
|
historyPeer7UserpicPerson: icon {{ size(120px, 120px), historyPeer7UserpicBg }, { "userpic_person", historyPeer7UserpicFg }};
|
||||||
|
historyPeer8NameFg: #ce671b; // orange
|
||||||
|
historyPeer8UserpicBg: #f7b37c;
|
||||||
|
historyPeer8UserpicFg: #de8d62;
|
||||||
|
historyPeer8UserpicPerson: icon {{ size(120px, 120px), historyPeer8UserpicBg }, { "userpic_person", historyPeer8UserpicFg }};
|
||||||
|
|
|
@ -76,18 +76,14 @@ void LocationManager::init() {
|
||||||
#endif // OS_MAC_OLD
|
#endif // OS_MAC_OLD
|
||||||
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
|
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
|
||||||
|
|
||||||
if (black) {
|
if (notLoadedPlaceholder) {
|
||||||
delete black->v();
|
delete notLoadedPlaceholder->v();
|
||||||
delete black;
|
delete notLoadedPlaceholder;
|
||||||
}
|
}
|
||||||
QImage b(cIntRetinaFactor(), cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
|
auto data = QImage(cIntRetinaFactor(), cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
|
||||||
{
|
data.fill(st::white->c);
|
||||||
QPainter p(&b);
|
data.setDevicePixelRatio(cRetinaFactor());
|
||||||
p.fillRect(QRect(0, 0, cIntRetinaFactor(), cIntRetinaFactor()), st::white->b);
|
notLoadedPlaceholder = new ImagePtr(App::pixmapFromImageInPlace(std_::move(data)), "GIF");
|
||||||
}
|
|
||||||
QPixmap p = App::pixmapFromImageInPlace(std_::move(b));
|
|
||||||
p.setDevicePixelRatio(cRetinaFactor());
|
|
||||||
black = new ImagePtr(p, "PNG");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocationManager::reinit() {
|
void LocationManager::reinit() {
|
||||||
|
@ -99,10 +95,10 @@ void LocationManager::deinit() {
|
||||||
delete manager;
|
delete manager;
|
||||||
manager = nullptr;
|
manager = nullptr;
|
||||||
}
|
}
|
||||||
if (black) {
|
if (notLoadedPlaceholder) {
|
||||||
delete black->v();
|
delete notLoadedPlaceholder->v();
|
||||||
delete black;
|
delete notLoadedPlaceholder;
|
||||||
black = nullptr;
|
notLoadedPlaceholder = nullptr;
|
||||||
}
|
}
|
||||||
dataLoadings.clear();
|
dataLoadings.clear();
|
||||||
imageLoadings.clear();
|
imageLoadings.clear();
|
||||||
|
@ -206,7 +202,7 @@ void LocationManager::onFinished(QNetworkReply *reply) {
|
||||||
if (format.isEmpty()) format = QByteArray("JPG");
|
if (format.isEmpty()) format = QByteArray("JPG");
|
||||||
}
|
}
|
||||||
d->loading = false;
|
d->loading = false;
|
||||||
d->thumb = thumb.isNull() ? (*black) : ImagePtr(thumb, format);
|
d->thumb = thumb.isNull() ? (*notLoadedPlaceholder) : ImagePtr(thumb, format);
|
||||||
serverRedirects.remove(d);
|
serverRedirects.remove(d);
|
||||||
if (App::main()) App::main()->update();
|
if (App::main()) App::main()->update();
|
||||||
}
|
}
|
||||||
|
@ -236,7 +232,7 @@ void LocationManager::onFailed(QNetworkReply *reply) {
|
||||||
|
|
||||||
void LocationManager::failed(LocationData *data) {
|
void LocationManager::failed(LocationData *data) {
|
||||||
data->loading = false;
|
data->loading = false;
|
||||||
data->thumb = *black;
|
data->thumb = *notLoadedPlaceholder;
|
||||||
serverRedirects.remove(data);
|
serverRedirects.remove(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,6 @@ private:
|
||||||
QNetworkAccessManager *manager = nullptr;
|
QNetworkAccessManager *manager = nullptr;
|
||||||
QMap<QNetworkReply*, LocationData*> dataLoadings, imageLoadings;
|
QMap<QNetworkReply*, LocationData*> dataLoadings, imageLoadings;
|
||||||
QMap<LocationData*, int32> serverRedirects;
|
QMap<LocationData*, int32> serverRedirects;
|
||||||
ImagePtr *black = nullptr;
|
ImagePtr *notLoadedPlaceholder = nullptr;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -2296,7 +2296,7 @@ void HistoryContact::draw(Painter &p, const QRect &r, TextSelection selection, u
|
||||||
if (_contact) {
|
if (_contact) {
|
||||||
_contact->paintUserpic(p, st::msgFileThumbSize, rthumb.x(), rthumb.y());
|
_contact->paintUserpic(p, st::msgFileThumbSize, rthumb.x(), rthumb.y());
|
||||||
} else {
|
} else {
|
||||||
p.drawPixmap(rthumb.topLeft(), userDefPhoto(qAbs(_userId) % UserColorsCount)->pixCircled(st::msgFileThumbSize, st::msgFileThumbSize));
|
p.drawPixmap(rthumb.topLeft(), userDefPhoto(qAbs(_userId) % kUserColorsCount)->pixCircled(st::msgFileThumbSize, st::msgFileThumbSize));
|
||||||
}
|
}
|
||||||
if (selected) {
|
if (selected) {
|
||||||
App::roundRect(p, rthumb, textstyleCurrent()->selectOverlay, SelectedOverlaySmallCorners);
|
App::roundRect(p, rthumb, textstyleCurrent()->selectOverlay, SelectedOverlaySmallCorners);
|
||||||
|
@ -2313,7 +2313,7 @@ void HistoryContact::draw(Painter &p, const QRect &r, TextSelection selection, u
|
||||||
statustop = st::msgFileStatusTop;
|
statustop = st::msgFileStatusTop;
|
||||||
|
|
||||||
QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, width));
|
QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, width));
|
||||||
p.drawPixmap(inner.topLeft(), userDefPhoto(qAbs(_parent->id) % UserColorsCount)->pixCircled(st::msgFileSize, st::msgFileSize));
|
p.drawPixmap(inner.topLeft(), userDefPhoto(qAbs(_parent->id) % kUserColorsCount)->pixCircled(st::msgFileSize, st::msgFileSize));
|
||||||
}
|
}
|
||||||
int32 namewidth = width - nameleft - nameright;
|
int32 namewidth = width - nameleft - nameright;
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ ImagePtr ItemBase::getResultThumb() const {
|
||||||
|
|
||||||
QPixmap ItemBase::getResultContactAvatar(int width, int height) const {
|
QPixmap ItemBase::getResultContactAvatar(int width, int height) const {
|
||||||
if (_result->_type == Result::Type::Contact) {
|
if (_result->_type == Result::Type::Contact) {
|
||||||
return userDefPhoto(qHash(_result->_id) % UserColorsCount)->pixCircled(width, height);
|
return userDefPhoto(qHash(_result->_id) % kUserColorsCount)->pixCircled(width, height);
|
||||||
}
|
}
|
||||||
return QPixmap();
|
return QPixmap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,64 +34,81 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||||
#include "media/media_audio.h"
|
#include "media/media_audio.h"
|
||||||
#include "localstorage.h"
|
#include "localstorage.h"
|
||||||
#include "history/history_media_types.h"
|
#include "history/history_media_types.h"
|
||||||
|
#include "styles/style_history.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
int peerColorIndex(const PeerId &peer) {
|
int peerColorIndex(const PeerId &peer) {
|
||||||
UserId myId(MTP::authedId()), peerId(peerToBareInt(peer));
|
auto myId = MTP::authedId();
|
||||||
QByteArray both(qsl("%1%2").arg(peerId).arg(myId).toUtf8());
|
auto peerId = peerToBareInt(peer);
|
||||||
if (both.size() > 15) {
|
auto both = (QByteArray::number(peerId) + QByteArray::number(myId)).mid(0, 15);
|
||||||
both = both.mid(0, 15);
|
|
||||||
}
|
|
||||||
uchar md5[16];
|
uchar md5[16];
|
||||||
hashMd5(both.constData(), both.size(), md5);
|
hashMd5(both.constData(), both.size(), md5);
|
||||||
return (md5[peerId & 0x0F] & (peerIsUser(peer) ? 0x07 : 0x03));
|
return (md5[peerId & 0x0F] & (peerIsUser(peer) ? 0x07 : 0x03));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ColorReferenceWrap {
|
||||||
|
ColorReferenceWrap(const style::color &data) : data(data) {
|
||||||
|
}
|
||||||
|
const style::color &data;
|
||||||
|
};
|
||||||
|
|
||||||
|
ImagePtr generateUserpicImage(const style::icon &icon) {
|
||||||
|
auto data = QImage(icon.width() * cIntRetinaFactor(), icon.height() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
|
||||||
|
{
|
||||||
|
Painter p(&data);
|
||||||
|
icon.paint(p, 0, 0, icon.width());
|
||||||
|
}
|
||||||
|
data.setDevicePixelRatio(cRetinaFactor());
|
||||||
|
return ImagePtr(App::pixmapFromImageInPlace(std_::move(data)), "PNG");
|
||||||
}
|
}
|
||||||
|
|
||||||
style::color peerColor(int index) {
|
} // namespace
|
||||||
static const style::color peerColors[8] = {
|
|
||||||
style::color(st::color1),
|
const style::color &peerColor(int index) {
|
||||||
style::color(st::color2),
|
static const ColorReferenceWrap peerColors[kUserColorsCount] = {
|
||||||
style::color(st::color3),
|
st::historyPeer1NameFg,
|
||||||
style::color(st::color4),
|
st::historyPeer2NameFg,
|
||||||
style::color(st::color5),
|
st::historyPeer3NameFg,
|
||||||
style::color(st::color6),
|
st::historyPeer4NameFg,
|
||||||
style::color(st::color7),
|
st::historyPeer5NameFg,
|
||||||
style::color(st::color8)
|
st::historyPeer6NameFg,
|
||||||
|
st::historyPeer7NameFg,
|
||||||
|
st::historyPeer8NameFg,
|
||||||
};
|
};
|
||||||
return peerColors[index];
|
return peerColors[index].data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImagePtr userDefPhoto(int index) {
|
ImagePtr userDefPhoto(int index) {
|
||||||
static const ImagePtr userDefPhotos[UserColorsCount] = {
|
static const ImagePtr userDefPhotos[kUserColorsCount] = {
|
||||||
ImagePtr(qsl(":/ava/art/usercolor1.png"), "PNG"),
|
generateUserpicImage(st::historyPeer1UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor2.png"), "PNG"),
|
generateUserpicImage(st::historyPeer2UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor3.png"), "PNG"),
|
generateUserpicImage(st::historyPeer3UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor4.png"), "PNG"),
|
generateUserpicImage(st::historyPeer4UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor5.png"), "PNG"),
|
generateUserpicImage(st::historyPeer5UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor6.png"), "PNG"),
|
generateUserpicImage(st::historyPeer6UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor7.png"), "PNG"),
|
generateUserpicImage(st::historyPeer7UserpicPerson),
|
||||||
ImagePtr(qsl(":/ava/art/usercolor8.png"), "PNG"),
|
generateUserpicImage(st::historyPeer8UserpicPerson),
|
||||||
};
|
};
|
||||||
return userDefPhotos[index];
|
return userDefPhotos[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
ImagePtr chatDefPhoto(int index) {
|
ImagePtr chatDefPhoto(int index) {
|
||||||
static const ImagePtr chatDefPhotos[4] = {
|
static const ImagePtr chatDefPhotos[kChatColorsCount] = {
|
||||||
ImagePtr(qsl(":/ava/art/chatcolor1.png"), "PNG"),
|
generateUserpicImage(st::historyPeer1UserpicChat),
|
||||||
ImagePtr(qsl(":/ava/art/chatcolor2.png"), "PNG"),
|
generateUserpicImage(st::historyPeer2UserpicChat),
|
||||||
ImagePtr(qsl(":/ava/art/chatcolor3.png"), "PNG"),
|
generateUserpicImage(st::historyPeer3UserpicChat),
|
||||||
ImagePtr(qsl(":/ava/art/chatcolor4.png"), "PNG"),
|
generateUserpicImage(st::historyPeer4UserpicChat),
|
||||||
};
|
};
|
||||||
return chatDefPhotos[index];
|
return chatDefPhotos[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
ImagePtr channelDefPhoto(int index) {
|
ImagePtr channelDefPhoto(int index) {
|
||||||
static const ImagePtr channelDefPhotos[4] = {
|
static const ImagePtr channelDefPhotos[kChannelColorsCount] = {
|
||||||
ImagePtr(qsl(":/ava/art/channelcolor1.png"), "PNG"),
|
generateUserpicImage(st::historyPeer1UserpicChannel),
|
||||||
ImagePtr(qsl(":/ava/art/channelcolor2.png"), "PNG"),
|
generateUserpicImage(st::historyPeer2UserpicChannel),
|
||||||
ImagePtr(qsl(":/ava/art/channelcolor3.png"), "PNG"),
|
generateUserpicImage(st::historyPeer3UserpicChannel),
|
||||||
ImagePtr(qsl(":/ava/art/channelcolor4.png"), "PNG"),
|
generateUserpicImage(st::historyPeer4UserpicChannel),
|
||||||
};
|
};
|
||||||
return channelDefPhotos[index];
|
return channelDefPhotos[index];
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,9 +199,11 @@ inline bool isNotifyMuted(NotifySettingsPtr settings, TimeId *changeIn = 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int UserColorsCount = 8;
|
static constexpr int kUserColorsCount = 8;
|
||||||
|
static constexpr int kChatColorsCount = 4;
|
||||||
|
static constexpr int kChannelColorsCount = 4;
|
||||||
|
|
||||||
style::color peerColor(int index);
|
const style::color &peerColor(int index);
|
||||||
ImagePtr userDefPhoto(int index);
|
ImagePtr userDefPhoto(int index);
|
||||||
ImagePtr chatDefPhoto(int index);
|
ImagePtr chatDefPhoto(int index);
|
||||||
ImagePtr channelDefPhoto(int index);
|
ImagePtr channelDefPhoto(int index);
|
||||||
|
|
|
@ -27,28 +27,37 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||||
#include "pspecific.h"
|
#include "pspecific.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
typedef QMap<QString, Image*> LocalImages;
|
|
||||||
|
using LocalImages = QMap<QString, Image*>;
|
||||||
LocalImages localImages;
|
LocalImages localImages;
|
||||||
|
|
||||||
typedef QMap<QString, WebImage*> WebImages;
|
using WebImages = QMap<QString, WebImage*>;
|
||||||
WebImages webImages;
|
WebImages webImages;
|
||||||
|
|
||||||
Image *blank() {
|
Image *generateBlankImage() {
|
||||||
static Image *img = internal::getImage(qsl(":/gui/art/blank.gif"), "GIF");
|
auto data = QImage(cIntRetinaFactor(), cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
|
||||||
return img;
|
data.fill(QColor(255, 255, 255, 0));
|
||||||
|
data.setDevicePixelRatio(cRetinaFactor());
|
||||||
|
return internal::getImage(App::pixmapFromImageInPlace(std_::move(data)), "GIF");
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef QMap<StorageKey, StorageImage*> StorageImages;
|
Image *blank() {
|
||||||
|
static auto blankImage = generateBlankImage();
|
||||||
|
return blankImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
using StorageImages = QMap<StorageKey, StorageImage*>;
|
||||||
StorageImages storageImages;
|
StorageImages storageImages;
|
||||||
|
|
||||||
int64 globalAcquiredSize = 0;
|
int64 globalAcquiredSize = 0;
|
||||||
|
|
||||||
static const uint64 BlurredCacheSkip = 0x1000000000000000LLU;
|
constexpr uint64 BlurredCacheSkip = 0x1000000000000000LLU;
|
||||||
static const uint64 ColoredCacheSkip = 0x2000000000000000LLU;
|
constexpr uint64 ColoredCacheSkip = 0x2000000000000000LLU;
|
||||||
static const uint64 BlurredColoredCacheSkip = 0x3000000000000000LLU;
|
constexpr uint64 BlurredColoredCacheSkip = 0x3000000000000000LLU;
|
||||||
static const uint64 RoundedCacheSkip = 0x4000000000000000LLU;
|
constexpr uint64 RoundedCacheSkip = 0x4000000000000000LLU;
|
||||||
static const uint64 CircledCacheSkip = 0x5000000000000000LLU;
|
constexpr uint64 CircledCacheSkip = 0x5000000000000000LLU;
|
||||||
}
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
StorageImageLocation StorageImageLocation::Null;
|
StorageImageLocation StorageImageLocation::Null;
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,6 @@
|
||||||
'pt-BR',
|
'pt-BR',
|
||||||
],
|
],
|
||||||
'travis_defines%': '',
|
'travis_defines%': '',
|
||||||
'linux_path_breakpad%': '<(libs_loc)/breakpad',
|
|
||||||
},
|
},
|
||||||
'includes': [
|
'includes': [
|
||||||
'common_executable.gypi',
|
'common_executable.gypi',
|
||||||
|
@ -86,7 +85,7 @@
|
||||||
'include_dirs': [
|
'include_dirs': [
|
||||||
'<(src_loc)',
|
'<(src_loc)',
|
||||||
'<(SHARED_INTERMEDIATE_DIR)',
|
'<(SHARED_INTERMEDIATE_DIR)',
|
||||||
'<(linux_path_breakpad)/include/breakpad',
|
'<(libs_loc)/breakpad/src',
|
||||||
'<(libs_loc)/lzma/C',
|
'<(libs_loc)/lzma/C',
|
||||||
'<(libs_loc)/libexif-0.6.20',
|
'<(libs_loc)/libexif-0.6.20',
|
||||||
'<(libs_loc)/zlib-1.2.8',
|
'<(libs_loc)/zlib-1.2.8',
|
||||||
|
|
|
@ -31,19 +31,21 @@
|
||||||
'linux_path_openal%': '/usr/local',
|
'linux_path_openal%': '/usr/local',
|
||||||
'linux_path_libexif_lib%': '<(libs_loc)/libexif-0.6.20/libexif/.libs',
|
'linux_path_libexif_lib%': '<(libs_loc)/libexif-0.6.20/libexif/.libs',
|
||||||
'linux_path_va%': '/usr/local',
|
'linux_path_va%': '/usr/local',
|
||||||
|
'linux_path_breakpad%': '<(libs_loc)/breakpad',
|
||||||
},
|
},
|
||||||
'include_dirs': [
|
'include_dirs': [
|
||||||
'/usr/local/include',
|
'/usr/local/include',
|
||||||
'<(linux_path_ffmpeg)/include',
|
'<(linux_path_ffmpeg)/include',
|
||||||
'<(linux_path_openal)/include',
|
'<(linux_path_openal)/include',
|
||||||
|
'<(linux_path_breakpad)/include/breakpad',
|
||||||
],
|
],
|
||||||
'library_dirs': [
|
'library_dirs': [
|
||||||
'/usr/local/lib',
|
'/usr/local/lib',
|
||||||
'<(linux_path_ffmpeg)/lib',
|
'<(linux_path_ffmpeg)/lib',
|
||||||
'<(linux_path_openal)/lib',
|
'<(linux_path_openal)/lib',
|
||||||
'<(linux_path_breakpad)/lib',
|
|
||||||
'<(linux_path_libexif_lib)',
|
'<(linux_path_libexif_lib)',
|
||||||
'<(linux_path_va)/lib',
|
'<(linux_path_va)/lib',
|
||||||
|
'<(linux_path_breakpad)/lib',
|
||||||
],
|
],
|
||||||
'libraries': [
|
'libraries': [
|
||||||
'breakpad_client',
|
'breakpad_client',
|
||||||
|
|