Some icons moved from sprite to separate files.

This commit is contained in:
John Preston 2016-10-22 21:58:25 +03:00
parent e1478359e6
commit c1d862d8de
47 changed files with 123 additions and 120 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View file

@ -91,15 +91,6 @@ boxTitleFont: font(boxFontSize bold);
boxTitlePosition: point(26px, 28px); boxTitlePosition: point(26px, 28px);
boxTitleHeight: 54px; boxTitleHeight: 54px;
boxBlueTitleBg: #6393b5;
boxBlueTitleAdditionalFg: #dae9f5;
boxBlueTitleAdditionalSkip: 12px;
boxBlueTitlePosition: point(23px, 18px);
boxBlueCloseIcon: sprite(120px, 108px, 12px, 12px);
boxBlueCloseBg: #c8e1f0;
boxBlueCloseDuration: 150;
boxBlueShadow: sprite(132px, 108px, 1px, 4px);
boxButtonFont: font(boxFontSize semibold); boxButtonFont: font(boxFontSize semibold);
defaultBoxButton: RoundButton { defaultBoxButton: RoundButton {
textFg: #2f9fea; textFg: #2f9fea;
@ -337,8 +328,6 @@ boxScrollShadowBg: #00000012;
titleBg: #6389a8; titleBg: #6389a8;
titleHeight: 39px; titleHeight: 39px;
titleIconPos: point(7px, 7px);
titleIconImg: sprite(161px, 100px, 26px, 26px);
titleFont: font(17px); titleFont: font(17px);
titlePos: point(44px, 29px); titlePos: point(44px, 29px);
titleMenuOffset: 36px; titleMenuOffset: 36px;
@ -908,8 +897,6 @@ msgDateImgBgSelected: #1c4a7187;
msgDateImgPadding: point(8px, 2px); msgDateImgPadding: point(8px, 2px);
msgDateImgCheckSpace: 4px; msgDateImgCheckSpace: 4px;
msgDogImg: sprite(216px, 92px, 126px, 126px);
collapseButton: flatButton(btnDefFlat) { collapseButton: flatButton(btnDefFlat) {
font: msgServiceFont; font: msgServiceFont;
overFont: msgServiceFont; overFont: msgServiceFont;
@ -1289,9 +1276,6 @@ layerPadding: margins(10px, 10px, 10px, 10px);
contactPadding: margins(49px, 22px, 0px, 6px); contactPadding: margins(49px, 22px, 0px, 6px);
contactSkip: 13px; contactSkip: 13px;
contactPhoneSkip: 30px; contactPhoneSkip: 30px;
contactUserIcon: sprite(120px, 90px, 18px, 18px);
contactPhoneIcon: sprite(138px, 90px, 18px, 18px);
contactIconTop: 10px;
contactsPhotoSize: 42px; contactsPhotoSize: 42px;
contactsPadding: margins(16px, 7px, 16px, 7px); contactsPadding: margins(16px, 7px, 16px, 7px);
@ -1304,11 +1288,6 @@ contactsStatusFgOver: #7c99b2;
contactsStatusFgOnline: #3b8dcc; contactsStatusFgOnline: #3b8dcc;
contactsBgOver: overBg; contactsBgOver: overBg;
contactsCheckPosition: point(8px, 16px); contactsCheckPosition: point(8px, 16px);
contactsNewItemHeight: 53px;
contactsNewItemIcon: sprite(307px, 248px, 22px, 16px);
contactsNewItemIconPosition: point(29px, 19px);
contactsNewItemTop: 18px;
contactsNewItemFg: #4b82af;
contactsAboutBg: #f7f7f7; contactsAboutBg: #f7f7f7;
contactsAboutShadow: #0000001F; contactsAboutShadow: #0000001F;
contactsAdminCheckbox: Checkbox(defaultBoxCheckbox) { contactsAdminCheckbox: Checkbox(defaultBoxCheckbox) {
@ -1832,8 +1811,6 @@ medviewSaveMsgShown: 2000;
medviewSaveMsgHiding: 2500; medviewSaveMsgHiding: 2500;
medviewSaveMsg: #000000b2; medviewSaveMsg: #000000b2;
mvTransparentBrush: sprite(9px, 124px, 8px, 8px);
// Mac specific // Mac specific
macAccessoryWidth: 450.; macAccessoryWidth: 450.;

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

View file

@ -2819,41 +2819,7 @@ namespace {
uint64 max = qMax(1ULL, components[maxtomin[0]]), mid = qMax(1ULL, components[maxtomin[1]]), min = qMax(1ULL, components[maxtomin[2]]); uint64 max = qMax(1ULL, components[maxtomin[0]]), mid = qMax(1ULL, components[maxtomin[1]]), min = qMax(1ULL, components[maxtomin[2]]);
QImage dog = App::sprite().toImage().copy(st::msgDogImg.rect()); Window::chatBackground()->init(id, pixmapFromImageInPlace(std_::move(img)));
QImage::Format f = dog.format();
if (f != QImage::Format_ARGB32 && f != QImage::Format_ARGB32_Premultiplied) {
dog = dog.convertToFormat(QImage::Format_ARGB32_Premultiplied);
}
uchar *dogBits = dog.bits();
if (max != min) {
float64 coef = float64(mid - min) / float64(max - min);
for (int i = 0, s = dog.width() * dog.height() * 4; i < s; i += 4) {
int dogmaxtomin[3] = { i, i + 1, i + 2 };
if (dogBits[dogmaxtomin[0]] < dogBits[dogmaxtomin[1]]) {
qSwap(dogmaxtomin[0], dogmaxtomin[1]);
}
if (dogBits[dogmaxtomin[1]] < dogBits[dogmaxtomin[2]]) {
qSwap(dogmaxtomin[1], dogmaxtomin[2]);
if (dogBits[dogmaxtomin[0]] < dogBits[dogmaxtomin[1]]) {
qSwap(dogmaxtomin[0], dogmaxtomin[1]);
}
}
uchar result[3];
result[maxtomin[0]] = dogBits[dogmaxtomin[0]];
result[maxtomin[2]] = dogBits[dogmaxtomin[2]];
result[maxtomin[1]] = uchar(qRound(result[maxtomin[2]] + (result[maxtomin[0]] - result[maxtomin[2]]) * coef));
dogBits[i] = result[2];
dogBits[i + 1] = result[1];
dogBits[i + 2] = result[0];
}
} else {
for (int i = 0, s = dog.width() * dog.height() * 4; i < s; i += 4) {
uchar b = dogBits[i], g = dogBits[i + 1], r = dogBits[i + 2];
dogBits[i] = dogBits[i + 1] = dogBits[i + 2] = (r + r + b + g + g + g) / 6;
}
}
Window::chatBackground()->init(id, pixmapFromImageInPlace(std_::move(img)), pixmapFromImageInPlace(std_::move(dog)));
memcpy(componentsScroll, components, sizeof(components)); memcpy(componentsScroll, components, sizeof(components));
memcpy(componentsPoint, components, sizeof(components)); memcpy(componentsPoint, components, sizeof(components));

View file

@ -26,16 +26,17 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "abstractbox.h" #include "abstractbox.h"
#include "mainwidget.h" #include "mainwidget.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "styles/style_boxes.h"
void BlueTitleShadow::paintEvent(QPaintEvent *e) { void BlueTitleShadow::paintEvent(QPaintEvent *e) {
Painter p(this); Painter p(this);
QRect r(e->rect()); QRect r(e->rect());
p.drawPixmap(QRect(r.left(), 0, r.width(), height()), App::sprite(), st::boxBlueShadow.rect()); st::boxBlueTitleShadow.fill(p, QRect(r.left(), 0, r.width(), height()));
} }
BlueTitleClose::BlueTitleClose(QWidget *parent) : Button(parent) BlueTitleClose::BlueTitleClose(QWidget *parent) : Button(parent)
, a_iconFg(st::boxBlueCloseBg->c) , a_iconFg(st::boxBlueCloseFg->c)
, _a_over(animation(this, &BlueTitleClose::step_over)) { , _a_over(animation(this, &BlueTitleClose::step_over)) {
resize(st::boxTitleHeight, st::boxTitleHeight); resize(st::boxTitleHeight, st::boxTitleHeight);
setCursor(style::cur_pointer); setCursor(style::cur_pointer);
@ -44,7 +45,7 @@ BlueTitleClose::BlueTitleClose(QWidget *parent) : Button(parent)
void BlueTitleClose::onStateChange(int oldState, ButtonStateChangeSource source) { void BlueTitleClose::onStateChange(int oldState, ButtonStateChangeSource source) {
if ((oldState & StateOver) != (_state & StateOver)) { if ((oldState & StateOver) != (_state & StateOver)) {
a_iconFg.start(((_state & StateOver) ? st::white : st::boxBlueCloseBg)->c); a_iconFg.start(((_state & StateOver) ? st::boxBlueCloseOverFg : st::boxBlueCloseFg)->c);
_a_over.start(); _a_over.start();
} }
} }
@ -57,28 +58,23 @@ void BlueTitleClose::step_over(float64 ms, bool timer) {
} else { } else {
a_iconFg.update(dt, anim::linear); a_iconFg.update(dt, anim::linear);
} }
if (timer) update((st::boxTitleHeight - st::boxBlueCloseIcon.pxWidth()) / 2, (st::boxTitleHeight - st::boxBlueCloseIcon.pxHeight()) / 2, st::boxBlueCloseIcon.pxWidth(), st::boxBlueCloseIcon.pxHeight()); if (timer) update((st::boxTitleHeight - st::boxBlueCloseIcon.width()) / 2, (st::boxTitleHeight - st::boxBlueCloseIcon.height()) / 2, st::boxBlueCloseIcon.width(), st::boxBlueCloseIcon.height());
} }
void BlueTitleClose::paintEvent(QPaintEvent *e) { void BlueTitleClose::paintEvent(QPaintEvent *e) {
Painter p(this); Painter p(this);
QRect r(e->rect()), s((st::boxTitleHeight - st::boxBlueCloseIcon.pxWidth()) / 2, (st::boxTitleHeight - st::boxBlueCloseIcon.pxHeight()) / 2, st::boxBlueCloseIcon.pxWidth(), st::boxBlueCloseIcon.pxHeight()); QRect r(e->rect()), s((st::boxTitleHeight - st::boxBlueCloseIcon.width()) / 2, (st::boxTitleHeight - st::boxBlueCloseIcon.height()) / 2, st::boxBlueCloseIcon.width(), st::boxBlueCloseIcon.height());
if (!s.contains(r)) { if (!s.contains(r)) {
p.fillRect(r, st::boxBlueTitleBg->b); p.fillRect(r, st::boxBlueTitleBg);
} }
if (s.intersects(r)) { if (s.intersects(r)) {
p.fillRect(s.intersected(r), a_iconFg.current()); p.fillRect(s.intersected(r), a_iconFg.current());
p.drawSprite(s.topLeft(), st::boxBlueCloseIcon); st::boxBlueCloseIcon.paint(p, s.topLeft(), width());
} }
} }
AbstractBox::AbstractBox(int32 w) : LayerWidget() AbstractBox::AbstractBox(int w) : LayerWidget() {
, _maxHeight(0)
, _closed(false)
, _blueTitle(false)
, _blueClose(0)
, _blueShadow(0) {
setAttribute(Qt::WA_OpaquePaintEvent); setAttribute(Qt::WA_OpaquePaintEvent);
resize(w, 0); resize(w, 0);
} }
@ -101,7 +97,7 @@ void AbstractBox::resizeEvent(QResizeEvent *e) {
} }
if (_blueShadow) { if (_blueShadow) {
_blueShadow->moveToLeft(0, st::boxTitleHeight); _blueShadow->moveToLeft(0, st::boxTitleHeight);
_blueShadow->resize(width(), st::boxBlueShadow.pxHeight()); _blueShadow->resize(width(), st::boxBlueTitleShadow.height());
} }
LayerWidget::resizeEvent(e); LayerWidget::resizeEvent(e);
} }
@ -165,8 +161,8 @@ void AbstractBox::resizeMaxHeight(int32 newWidth, int32 maxHeight) {
} }
} }
int32 AbstractBox::countHeight() const { int AbstractBox::countHeight() const {
return qMin(_maxHeight, App::wnd()->height() - int32(2 * st::boxVerticalMargin)); return qMin(_maxHeight, App::wnd()->height() - 2 * st::boxVerticalMargin);
} }
void AbstractBox::onClose() { void AbstractBox::onClose() {

View file

@ -52,7 +52,7 @@ class AbstractBox : public LayerWidget, protected base::Subscriber {
Q_OBJECT Q_OBJECT
public: public:
AbstractBox(int32 w = st::boxWideWidth); AbstractBox(int w = st::boxWideWidth);
void parentResized() override; void parentResized() override;
void showDone() override { void showDone() override {
showAll(); showAll();
@ -83,14 +83,14 @@ protected:
} }
private: private:
int32 _maxHeight; int _maxHeight = 0;
int32 countHeight() const; int countHeight() const;
bool _closed; bool _closed = false;
bool _blueTitle; bool _blueTitle = false;
BlueTitleClose *_blueClose; BlueTitleClose *_blueClose = nullptr;
BlueTitleShadow *_blueShadow; BlueTitleShadow *_blueShadow = nullptr;
}; };

View file

@ -109,8 +109,8 @@ void AddContactBox::paintEvent(QPaintEvent *e) {
paintTitle(p, _boxTitle); paintTitle(p, _boxTitle);
if (_retry.isHidden()) { if (_retry.isHidden()) {
p.drawSpriteLeft(st::boxPadding.left(), _first.y() + st::contactIconTop, width(), st::contactUserIcon); st::contactUserIcon.paint(p, st::boxPadding.left(), _first.y() + st::contactIconTop, width());
p.drawSpriteLeft(st::boxPadding.left(), _phone.y() + st::contactIconTop, width(), st::contactPhoneIcon); st::contactPhoneIcon.paint(p, st::boxPadding.left(), _phone.y() + st::contactIconTop, width());
} else { } else {
p.setPen(st::black->p); p.setPen(st::black->p);
p.setFont(st::boxTextFont->f); p.setFont(st::boxTextFont->f);

View file

@ -21,6 +21,16 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
using "basic.style"; using "basic.style";
using "ui/widgets/widgets.style"; using "ui/widgets/widgets.style";
boxBlueTitleBg: #6393b5;
boxBlueTitleAdditionalFg: #dae9f5;
boxBlueTitleAdditionalSkip: 12px;
boxBlueTitlePosition: point(23px, 18px);
boxBlueTitleShadow: icon {{ "box_title_shadow", windowShadowFg }};
boxBlueCloseFg: #c8e1f0;
boxBlueCloseOverFg: #ffffff;
boxBlueCloseIcon: icon {{ "box_button_close", boxBlueTitleBg }};
boxBlueCloseDuration: 150;
confirmInviteTitle: flatLabel(labelDefFlat) { confirmInviteTitle: flatLabel(labelDefFlat) {
font: font(16px semibold); font: font(16px semibold);
align: align(center); align: align(center);
@ -68,6 +78,15 @@ aboutRevokePublicLabel: flatLabel(labelDefFlat) {
textFg: windowTextFg; textFg: windowTextFg;
} }
contactUserIcon: icon {{ "add_contact_user", #999999 }};
contactPhoneIcon: icon {{ "add_contact_phone", #999999 }};
contactIconTop: 10px;
contactsNewItemHeight: 53px;
contactsNewItemIcon: icon {{ "contacts_add", #749fc2, point(29px, 19px) }};
contactsNewItemTop: 18px;
contactsNewItemFg: #4b82af;
contactsMultiSelect: MultiSelect { contactsMultiSelect: MultiSelect {
padding: margins(8px, 8px, 8px, 8px); padding: margins(8px, 8px, 8px, 8px);
maxHeight: 104px; maxHeight: 104px;

View file

@ -100,6 +100,7 @@ ContactsBox::ContactsBox(UserData *bot) : ItemListBox(st::contactsScroll)
void ContactsBox::init() { void ContactsBox::init() {
_select->resizeToWidth(st::boxWideWidth); _select->resizeToWidth(st::boxWideWidth);
myEnsureResized(_select);
auto inviting = (_inner->creating() == CreatingGroupGroup) || (_inner->channel() && _inner->membersFilter() == MembersFilter::Recent) || _inner->chat(); auto inviting = (_inner->creating() == CreatingGroupGroup) || (_inner->channel() && _inner->membersFilter() == MembersFilter::Recent) || _inner->chat();
auto topSkip = getTopScrollSkip(); auto topSkip = getTopScrollSkip();
@ -1073,7 +1074,7 @@ void ContactsBox::Inner::paintEvent(QPaintEvent *e) {
} else { } else {
p.fillRect(0, 0, width(), st::contactsNewItemHeight, (_newItemSel ? st::contactsBgOver : st::white)->b); p.fillRect(0, 0, width(), st::contactsNewItemHeight, (_newItemSel ? st::contactsBgOver : st::white)->b);
p.setFont(st::contactsNameFont); p.setFont(st::contactsNameFont);
p.drawSpriteLeft(st::contactsNewItemIconPosition.x(), st::contactsNewItemIconPosition.y(), width(), st::contactsNewItemIcon); st::contactsNewItemIcon.paint(p, 0, 0, width());
p.setPen(st::contactsNewItemFg); p.setPen(st::contactsNewItemFg);
p.drawTextLeft(st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left(), st::contactsNewItemTop, width(), lang(lng_add_contact_button)); p.drawTextLeft(st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left(), st::contactsNewItemTop, width(), lang(lng_add_contact_button));
} }

View file

@ -21,6 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h" #include "stdafx.h"
#include "boxes/members_box.h" #include "boxes/members_box.h"
#include "styles/style_boxes.h"
#include "styles/style_dialogs.h" #include "styles/style_dialogs.h"
#include "lang.h" #include "lang.h"
#include "mainwidget.h" #include "mainwidget.h"
@ -149,7 +150,7 @@ void MembersBox::Inner::paintEvent(QPaintEvent *e) {
} else { } else {
if (_newItemHeight) { if (_newItemHeight) {
p.fillRect(0, 0, width(), _newItemHeight, (_newItemSel ? st::contactsBgOver : st::white)->b); p.fillRect(0, 0, width(), _newItemHeight, (_newItemSel ? st::contactsBgOver : st::white)->b);
p.drawSpriteLeft(st::contactsNewItemIconPosition.x(), st::contactsNewItemIconPosition.y(), width(), st::contactsNewItemIcon); st::contactsNewItemIcon.paint(p, 0, 0, width());
p.setFont(st::contactsNameFont); p.setFont(st::contactsNameFont);
p.setPen(st::contactsNewItemFg); p.setPen(st::contactsNewItemFg);
p.drawTextLeft(st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left(), st::contactsNewItemTop, width(), lang(_filter == MembersFilter::Admins ? lng_channel_add_admins : lng_channel_add_members)); p.drawTextLeft(st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left(), st::contactsNewItemTop, width(), lang(_filter == MembersFilter::Admins ? lng_channel_add_admins : lng_channel_add_members));

View file

@ -48,6 +48,7 @@ ShareBox::ShareBox(CopyCallback &&copyCallback, SubmitCallback &&submitCallback,
, _topShadow(this) , _topShadow(this)
, _bottomShadow(this) { , _bottomShadow(this) {
_select->resizeToWidth(st::boxWideWidth); _select->resizeToWidth(st::boxWideWidth);
myEnsureResized(_select);
auto topSkip = getTopScrollSkip(); auto topSkip = getTopScrollSkip();
auto bottomSkip = st::boxButtonPadding.top() + _share->height() + st::boxButtonPadding.bottom(); auto bottomSkip = st::boxButtonPadding.top() + _share->height() + st::boxButtonPadding.bottom();

View file

@ -35,6 +35,9 @@ historyToDownPaddingTop: 10px;
historyToDownBadgeFont: semiboldFont; historyToDownBadgeFont: semiboldFont;
historyToDownBadgeSize: 22px; historyToDownBadgeSize: 22px;
historyEmptyDog: icon {{ "history_empty_dog", #ffffff }};
historyEmptySize: 128px;
membersInnerScroll: flatScroll(solidScroll) { membersInnerScroll: flatScroll(solidScroll) {
deltat: 3px; deltat: 3px;
deltab: 3px; deltab: 3px;

View file

@ -334,6 +334,16 @@ QVector<int> ServiceMessagePainter::countLineWidths(const Text &text, const QRec
return lineWidths; return lineWidths;
} }
void paintEmpty(Painter &p, int width, int height) {
auto position = QPoint((width - st::historyEmptySize) / 2, ((height - st::historyEmptySize) * 4) / 9);
p.setPen(Qt::NoPen);
p.setBrush(App::msgServiceBg());
p.setRenderHint(QPainter::HighQualityAntialiasing);
p.drawEllipse(rtlrect(position.x(), position.y(), st::historyEmptySize, st::historyEmptySize, width));
p.setRenderHint(QPainter::HighQualityAntialiasing, false);
st::historyEmptyDog.paint(p, position.x() + (st::historyEmptySize - st::historyEmptyDog.width()) / 2, position.y() + (st::historyEmptySize - st::historyEmptyDog.height()) / 2, width);
}
void serviceColorsUpdated() { void serviceColorsUpdated() {
if (serviceMessageStyle) { if (serviceMessageStyle) {
for (auto &corner : serviceMessageStyle->corners) { for (auto &corner : serviceMessageStyle->corners) {

View file

@ -48,6 +48,8 @@ private:
}; };
void paintEmpty(Painter &p, int width, int height);
void serviceColorsUpdated(); void serviceColorsUpdated();
} // namespace HistoryLayout } // namespace HistoryLayout

View file

@ -376,8 +376,7 @@ void HistoryInner::paintEvent(QPaintEvent *e) {
textstyleRestore(); textstyleRestore();
} }
} else if (noHistoryDisplayed) { } else if (noHistoryDisplayed) {
QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); HistoryLayout::paintEmpty(p, width(), height());
p.drawPixmap(dogPos, Window::chatBackground()->dog());
} }
if (!noHistoryDisplayed) { if (!noHistoryDisplayed) {
adjustCurrent(r.top()); adjustCurrent(r.top());
@ -8776,8 +8775,7 @@ void HistoryWidget::paintEvent(QPaintEvent *e) {
} }
if (_scroll.isHidden()) { if (_scroll.isHidden()) {
p.setClipRect(_scroll.geometry()); p.setClipRect(_scroll.geometry());
QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.pxHeight()) * 4) / 9); HistoryLayout::paintEmpty(p, width(), height() - _field.height() - 2 * st::sendPadding);
p.drawPixmap(dogPos, Window::chatBackground()->dog());
} }
} else { } else {
style::font font(st::msgServiceFont); style::font font(st::msgServiceFont);

View file

@ -230,11 +230,6 @@ style::color documentSelectedColor(int32 colorIndex) {
return colors[colorIndex & 3]; return colors[colorIndex & 3];
} }
style::sprite documentCorner(int32 colorIndex) {
static style::sprite corners[] = { st::msgFileBlue, st::msgFileGreen, st::msgFileRed, st::msgFileYellow };
return corners[colorIndex & 3];
}
RoundCorners documentCorners(int32 colorIndex) { RoundCorners documentCorners(int32 colorIndex) {
return RoundCorners(DocBlueCorners + (colorIndex & 3)); return RoundCorners(DocBlueCorners + (colorIndex & 3));
} }

View file

@ -86,7 +86,6 @@ style::color documentColor(int32 colorIndex);
style::color documentDarkColor(int32 colorIndex); style::color documentDarkColor(int32 colorIndex);
style::color documentOverColor(int32 colorIndex); style::color documentOverColor(int32 colorIndex);
style::color documentSelectedColor(int32 colorIndex); style::color documentSelectedColor(int32 colorIndex);
style::sprite documentCorner(int32 colorIndex);
RoundCorners documentCorners(int32 colorIndex); RoundCorners documentCorners(int32 colorIndex);
bool documentIsValidMediaFile(const QString &filepath); bool documentIsValidMediaFile(const QString &filepath);

View file

@ -715,7 +715,7 @@ HitTestType MainWindow::hitTest(const QPoint &p) const {
} }
QRect MainWindow::iconRect() const { QRect MainWindow::iconRect() const {
return QRect(st::titleIconPos + title->geometry().topLeft(), st::titleIconImg.pxSize()); return title->iconRect();
} }
bool MainWindow::eventFilter(QObject *obj, QEvent *e) { bool MainWindow::eventFilter(QObject *obj, QEvent *e) {

View file

@ -85,19 +85,28 @@ mediaviewClose: icon {{ "mediaview_close", #ffffff }};
mediaviewSave: icon {{ "mediaview_download", #ffffff }}; mediaviewSave: icon {{ "mediaview_download", #ffffff }};
mediaviewMore: icon {{ "mediaview_more", #ffffff }}; mediaviewMore: icon {{ "mediaview_more", #ffffff }};
mediaviewFileRedCornerFg: #d55959;
mediaviewFileYellowCornerFg: #e8a659;
mediaviewFileGreenCornerFg: #49a957;
mediaviewFileBlueCornerFg: #599dcf;
mediaviewFileRed: icon { mediaviewFileRed: icon {
{ size(25px, 25px), #ffffff }, { size(25px, 25px), #ffffff },
{ "mediaview_file_corner", #d55959 }, { "mediaview_file_corner", mediaviewFileRedCornerFg },
}; };
mediaviewFileYellow: icon { mediaviewFileYellow: icon {
{ size(25px, 25px), #ffffff }, { size(25px, 25px), #ffffff },
{ "mediaview_file_corner", #e8a659 }, { "mediaview_file_corner", mediaviewFileYellowCornerFg },
}; };
mediaviewFileGreen: icon { mediaviewFileGreen: icon {
{ size(25px, 25px), #ffffff }, { size(25px, 25px), #ffffff },
{ "mediaview_file_corner", #49a957 }, { "mediaview_file_corner", mediaviewFileGreenCornerFg },
}; };
mediaviewFileBlue: icon { mediaviewFileBlue: icon {
{ size(25px, 25px), #ffffff }, { size(25px, 25px), #ffffff },
{ "mediaview_file_corner", #599dcf }, { "mediaview_file_corner", mediaviewFileBlueCornerFg },
}; };
mediaviewTransparentBg: #ffffff;
mediaviewTransparentFg: #cccccc;
mediaviewTransparentSize: 4px;

View file

@ -103,7 +103,7 @@ MediaView::MediaView() : TWidget(App::wnd())
} }
}); });
_transparentBrush = QBrush(App::sprite().copy(st::mvTransparentBrush.rect())); generateTransparentBrush();
setWindowFlags(Qt::FramelessWindowHint | Qt::BypassWindowManagerHint | Qt::Tool | Qt::NoDropShadowWindowHint); setWindowFlags(Qt::FramelessWindowHint | Qt::BypassWindowManagerHint | Qt::Tool | Qt::NoDropShadowWindowHint);
moveToScreen(); moveToScreen();
@ -2628,6 +2628,19 @@ void MediaView::loadBack() {
} }
} }
void MediaView::generateTransparentBrush() {
auto size = st::mediaviewTransparentSize * cIntRetinaFactor();
auto transparent = QImage(2 * size, 2 * size, QImage::Format_ARGB32_Premultiplied);
transparent.fill(st::mediaviewTransparentBg->c);
{
Painter p(&transparent);
p.fillRect(rtlrect(0, size, size, size, 2 * size), st::mediaviewTransparentFg);
p.fillRect(rtlrect(size, 0, size, size, 2 * size), st::mediaviewTransparentFg);
}
transparent.setDevicePixelRatio(cRetinaFactor());
_transparentBrush = QBrush(transparent);
}
MediaView::LastChatPhoto MediaView::computeLastOverviewChatPhoto() { MediaView::LastChatPhoto MediaView::computeLastOverviewChatPhoto() {
LastChatPhoto emptyResult = { nullptr, nullptr }; LastChatPhoto emptyResult = { nullptr, nullptr };
auto lastPhotoInOverview = [&emptyResult](auto history, auto list) -> LastChatPhoto { auto lastPhotoInOverview = [&emptyResult](auto history, auto list) -> LastChatPhoto {

View file

@ -136,6 +136,8 @@ private:
void findCurrent(); void findCurrent();
void loadBack(); void loadBack();
void generateTransparentBrush();
void updateCursor(); void updateCursor();
void setZoomLevel(int newZoom); void setZoomLevel(int newZoom);

View file

@ -20,6 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/ */
using "basic.style"; using "basic.style";
using "history/history.style"; using "history/history.style";
using "media/view/mediaview.style";
OverviewFileLayout { OverviewFileLayout {
maxWidth: pixels; maxWidth: pixels;

View file

@ -34,6 +34,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "application.h" #include "application.h"
#include "overview/overview_layout.h" #include "overview/overview_layout.h"
#include "history/history_media_types.h" #include "history/history_media_types.h"
#include "history/history_service_layout.h"
#include "media/media_audio.h" #include "media/media_audio.h"
// flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html // flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html
@ -778,8 +779,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
Overview::Layout::PaintContext context(ms, _selMode); Overview::Layout::PaintContext context(ms, _selMode);
if (_history->overview[_type].isEmpty() && (!_migrated || !_history->overviewLoaded(_type) || _migrated->overview[_type].isEmpty())) { if (_history->overview[_type].isEmpty() && (!_migrated || !_history->overviewLoaded(_type) || _migrated->overview[_type].isEmpty())) {
QPoint dogPos((_width - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); HistoryLayout::paintEmpty(p, _width, height());
p.drawPixmap(dogPos, Window::chatBackground()->dog());
return; return;
} else if (_inSearch && _searchResults.isEmpty() && _searchFull && (!_migrated || _searchFullMigrated) && !_searchTimer.isActive()) { } else if (_inSearch && _searchResults.isEmpty() && _searchFull && (!_migrated || _searchFullMigrated) && !_searchTimer.isActive()) {
p.setFont(st::noContactsFont->f); p.setFont(st::noContactsFont->f);

View file

@ -20,6 +20,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/ */
using "basic.style"; using "basic.style";
using "boxes/boxes.style";
featuredStickersHeader: 45px; featuredStickersHeader: 45px;
featuredStickersSkip: 15px; featuredStickersSkip: 15px;

View file

@ -31,6 +31,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "media/player/media_player_title_button.h" #include "media/player/media_player_title_button.h"
#include "media/player/media_player_panel.h" #include "media/player/media_player_panel.h"
#include "media/player/media_player_instance.h" #include "media/player/media_player_instance.h"
#include "styles/style_window.h"
class TitleWidget::Hider : public TWidget { class TitleWidget::Hider : public TWidget {
public: public:
@ -126,9 +127,9 @@ void TitleWidget::paintEvent(QPaintEvent *e) {
auto chooseText = lang(inlineSwitchChoose ? lng_inline_switch_choose : lng_forward_choose); auto chooseText = lang(inlineSwitchChoose ? lng_inline_switch_choose : lng_forward_choose);
p.drawText(st::titleMenuOffset - st::titleTextButton.width / 2, st::titleTextButton.textTop + st::titleTextButton.font->ascent, chooseText); p.drawText(st::titleMenuOffset - st::titleTextButton.width / 2, st::titleTextButton.textTop + st::titleTextButton.font->ascent, chooseText);
} }
p.drawSprite(st::titleIconPos, st::titleIconImg); st::titleIcon.paint(p, st::titleIconPosition, width());
if (Adaptive::OneColumn() && !_counter.isNull() && App::main()) { if (Adaptive::OneColumn() && !_counter.isNull() && App::main()) {
p.drawPixmap(st::titleIconPos.x() + st::titleIconImg.pxWidth() - (_counter.width() / cIntRetinaFactor()), st::titleIconPos.y() + st::titleIconImg.pxHeight() - (_counter.height() / cIntRetinaFactor()), _counter); p.drawPixmap(st::titleCounterPosition, _counter);
} }
} }
@ -335,11 +336,11 @@ void TitleWidget::updateCounter() {
} }
_counter = App::pixmapFromImageInPlace(App::wnd()->iconWithCounter(size, counter, bg, false)); _counter = App::pixmapFromImageInPlace(App::wnd()->iconWithCounter(size, counter, bg, false));
_counter.setDevicePixelRatio(cRetinaFactor()); _counter.setDevicePixelRatio(cRetinaFactor());
update(QRect(st::titleIconPos, st::titleIconImg.pxSize())); update(QRect(st::titleCounterPosition, _counter.size() / cIntRetinaFactor()));
} else { } else {
if (!_counter.isNull()) { if (!_counter.isNull()) {
update(QRect(st::titleCounterPosition, _counter.size() / cIntRetinaFactor()));
_counter = QPixmap(); _counter = QPixmap();
update(QRect(st::titleIconPos, st::titleIconImg.pxSize()));
} }
} }
} }
@ -395,7 +396,7 @@ HitTestType TitleWidget::hitTest(const QPoint &p) {
int x(p.x()), y(p.y()), w(width()), h(height()); int x(p.x()), y(p.y()), w(width()), h(height());
if (!Adaptive::OneColumn() && _hider && x >= App::main()->dlgsWidth()) return HitTestType::None; if (!Adaptive::OneColumn() && _hider && x >= App::main()->dlgsWidth()) return HitTestType::None;
if (x >= st::titleIconPos.x() && y >= st::titleIconPos.y() && x < st::titleIconPos.x() + st::titleIconImg.pxWidth() && y < st::titleIconPos.y() + st::titleIconImg.pxHeight()) { if (x >= st::titleIconPosition.x() && y >= st::titleIconPosition.y() && x < st::titleIconPosition.x() + st::titleIcon.width() && y < st::titleIconPosition.y() + st::titleIcon.height()) {
return HitTestType::Icon; return HitTestType::Icon;
} else if (false } else if (false
|| (_player && _player->geometry().contains(p)) || (_player && _player->geometry().contains(p))
@ -420,3 +421,7 @@ HitTestType TitleWidget::hitTest(const QPoint &p) {
} }
return HitTestType::None; return HitTestType::None;
} }
QRect TitleWidget::iconRect() const {
return myrtlrect(QRect(st::titleIconPosition, st::titleIcon.size()));
}

View file

@ -42,6 +42,7 @@ public:
void maximizedChanged(bool maximized, bool force = false); void maximizedChanged(bool maximized, bool force = false);
HitTestType hitTest(const QPoint &p); HitTestType hitTest(const QPoint &p);
QRect iconRect() const;
void setHideLevel(float64 level); void setHideLevel(float64 level);

View file

@ -134,7 +134,7 @@ void MonoIcon::ensureLoaded() const {
if (size > sizeTag.size() && !memcmp(data, sizeTag.data(), sizeTag.size())) { if (size > sizeTag.size() && !memcmp(data, sizeTag.data(), sizeTag.size())) {
size -= sizeTag.size(); size -= sizeTag.size();
data += sizeTag.size(); data += sizeTag.size();
QByteArray baForStream(reinterpret_cast<const char*>(data), size); auto baForStream = QByteArray::fromRawData(reinterpret_cast<const char*>(data), size);
QBuffer buffer(&baForStream); QBuffer buffer(&baForStream);
buffer.open(QIODevice::ReadOnly); buffer.open(QIODevice::ReadOnly);
@ -207,7 +207,7 @@ int Icon::width() const {
int Icon::height() const { int Icon::height() const {
if (_height < 0) { if (_height < 0) {
_height = 0; _height = 0;
for_const (const auto &part, _parts) { for_const (auto &part, _parts) {
accumulate_max(_height, part.offset().x() + part.height()); accumulate_max(_height, part.offset().x() + part.height());
} }
} }

View file

@ -118,6 +118,9 @@ public:
void fill(QPainter &p, const QRect &rect) const; void fill(QPainter &p, const QRect &rect) const;
int width() const; int width() const;
int height() const; int height() const;
QSize size() const {
return QSize(width(), height());
}
private: private:
struct ColoredCopy { struct ColoredCopy {

View file

@ -41,10 +41,9 @@ void ChatBackground::initIfEmpty() {
} }
} }
void ChatBackground::init(int32 id, QPixmap &&image, QPixmap &&dog) { void ChatBackground::init(int32 id, QPixmap &&image) {
_id = id; _id = id;
_image = std_::move(image); _image = std_::move(image);
_dog = std_::move(dog);
notify(ChatBackgroundUpdate(ChatBackgroundUpdate::Type::New, _tile)); notify(ChatBackgroundUpdate(ChatBackgroundUpdate::Type::New, _tile));
} }
@ -52,7 +51,6 @@ void ChatBackground::init(int32 id, QPixmap &&image, QPixmap &&dog) {
void ChatBackground::reset() { void ChatBackground::reset() {
_id = 0; _id = 0;
_image = QPixmap(); _image = QPixmap();
_dog = QPixmap();
_tile = false; _tile = false;
notify(ChatBackgroundUpdate(ChatBackgroundUpdate::Type::New, _tile)); notify(ChatBackgroundUpdate(ChatBackgroundUpdate::Type::New, _tile));
@ -66,10 +64,6 @@ const QPixmap &ChatBackground::image() const {
return _image; return _image;
} }
const QPixmap &ChatBackground::dog() const {
return _dog;
}
bool ChatBackground::tile() const { bool ChatBackground::tile() const {
return _tile; return _tile;
} }

View file

@ -39,19 +39,17 @@ class ChatBackground : public base::Observable<ChatBackgroundUpdate> {
public: public:
bool empty() const; bool empty() const;
void initIfEmpty(); void initIfEmpty();
void init(int32 id, QPixmap &&image, QPixmap &&dog); void init(int32 id, QPixmap &&image);
void reset(); void reset();
int32 id() const; int32 id() const;
const QPixmap &image() const; const QPixmap &image() const;
const QPixmap &dog() const;
bool tile() const; bool tile() const;
void setTile(bool tile); void setTile(bool tile);
private: private:
int32 _id = 0; int32 _id = 0;
QPixmap _image; QPixmap _image;
QPixmap _dog;
bool _tile = false; bool _tile = false;
}; };

View file

@ -21,6 +21,13 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
using "basic.style"; using "basic.style";
titleIconPosition: point(9px, 9px);
titleIcon: icon {
{ "title_icon_bg", #49708f },
{ "title_icon", #ffffff, point(4px, 4px) }
};
titleCounterPosition: point(17px, 17px);
notifyBg: white; notifyBg: white;
notifyBorder: #f1f1f1; notifyBorder: #f1f1f1;
notifyBorderWidth: 1px; notifyBorderWidth: 1px;