mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 15:13:57 +02:00
Green badges for commissions.
This commit is contained in:
parent
c137e577dc
commit
64dbbd7d09
2 changed files with 87 additions and 10 deletions
|
@ -39,6 +39,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/wrap/padding_wrap.h"
|
#include "ui/wrap/padding_wrap.h"
|
||||||
#include "ui/wrap/slide_wrap.h"
|
#include "ui/wrap/slide_wrap.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
#include "ui/wrap/vertical_layout.h"
|
||||||
|
#include "ui/painter.h"
|
||||||
#include "ui/ui_utility.h"
|
#include "ui/ui_utility.h"
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
#include "styles/style_info.h"
|
#include "styles/style_info.h"
|
||||||
|
@ -126,6 +127,89 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Row final : public PeerListRow {
|
||||||
|
public:
|
||||||
|
Row(not_null<PeerData*> peer, StarRefProgram program);
|
||||||
|
|
||||||
|
void paintStatusText(
|
||||||
|
Painter &p,
|
||||||
|
const style::PeerListItem &st,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int availableWidth,
|
||||||
|
int outerWidth,
|
||||||
|
bool selected) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void refreshStatus() override;
|
||||||
|
|
||||||
|
StarRefProgram _program;
|
||||||
|
QImage _badge;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Row::Row(not_null<PeerData*> peer, StarRefProgram program)
|
||||||
|
: PeerListRow(peer)
|
||||||
|
, _program(program) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void Row::paintStatusText(
|
||||||
|
Painter &p,
|
||||||
|
const style::PeerListItem &st,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int availableWidth,
|
||||||
|
int outerWidth,
|
||||||
|
bool selected) {
|
||||||
|
const auto top = y
|
||||||
|
+ st::contactsStatusFont->ascent
|
||||||
|
- st::starrefCommissionFont->ascent
|
||||||
|
- st::lineWidth;
|
||||||
|
p.drawImage(x, top, _badge);
|
||||||
|
|
||||||
|
const auto space = st::normalFont->spacew;
|
||||||
|
auto shift = (_badge.width() / _badge.devicePixelRatio()) + space;
|
||||||
|
x += shift;
|
||||||
|
availableWidth -= shift;
|
||||||
|
|
||||||
|
PeerListRow::paintStatusText(
|
||||||
|
p,
|
||||||
|
st,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
availableWidth,
|
||||||
|
outerWidth,
|
||||||
|
selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Row::refreshStatus() {
|
||||||
|
const auto text = FormatCommission(_program.commission);
|
||||||
|
const auto padding = st::starrefCommissionPadding;
|
||||||
|
const auto font = st::starrefCommissionFont;
|
||||||
|
const auto width = font->width(text);
|
||||||
|
const auto inner = QRect(0, 0, width, font->height);
|
||||||
|
const auto outer = inner.marginsAdded(padding);
|
||||||
|
const auto ratio = style::DevicePixelRatio();
|
||||||
|
_badge = QImage(
|
||||||
|
outer.size() * ratio,
|
||||||
|
QImage::Format_ARGB32_Premultiplied);
|
||||||
|
_badge.setDevicePixelRatio(ratio);
|
||||||
|
_badge.fill(Qt::transparent);
|
||||||
|
|
||||||
|
auto p = QPainter(&_badge);
|
||||||
|
p.setBrush(st::historyPeer2UserpicBg2);
|
||||||
|
p.setPen(Qt::NoPen);
|
||||||
|
const auto radius = st::roundRadiusSmall;
|
||||||
|
p.drawRoundedRect(outer.translated(-outer.topLeft()), radius, radius);
|
||||||
|
p.setFont(font);
|
||||||
|
p.setBrush(Qt::NoBrush);
|
||||||
|
p.setPen(st::historyPeerUserpicFg);
|
||||||
|
p.drawText(padding.left(), padding.top() + font->ascent, text);
|
||||||
|
p.end();
|
||||||
|
|
||||||
|
setCustomStatus(FormatProgramDuration(_program.durationMonths));
|
||||||
|
}
|
||||||
|
|
||||||
void Resolve(
|
void Resolve(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
not_null<UserData*> bot,
|
not_null<UserData*> bot,
|
||||||
|
@ -168,16 +252,7 @@ Main::Session &ListController::session() const {
|
||||||
|
|
||||||
std::unique_ptr<PeerListRow> ListController::createRow(ConnectedBot bot) {
|
std::unique_ptr<PeerListRow> ListController::createRow(ConnectedBot bot) {
|
||||||
_states.emplace(bot.bot, bot.state);
|
_states.emplace(bot.bot, bot.state);
|
||||||
auto result = std::make_unique<PeerListRow>(bot.bot);
|
return std::make_unique<Row>(bot.bot, bot.state.program);
|
||||||
const auto program = bot.state.program;
|
|
||||||
if (bot.state.revoked) {
|
|
||||||
result->setCustomStatus(u"Revoked"_q);
|
|
||||||
} else {
|
|
||||||
result->setCustomStatus(u"+%1, %2"_q.arg(
|
|
||||||
FormatCommission(program.commission),
|
|
||||||
FormatProgramDuration(program.durationMonths)));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListController::prepare() {
|
void ListController::prepare() {
|
||||||
|
|
|
@ -478,6 +478,8 @@ starrefLinkCountPadding: margins(2px, 0px, 3px, 1px);
|
||||||
starrefRecipientBg: lightButtonBgOver;
|
starrefRecipientBg: lightButtonBgOver;
|
||||||
starrefRecipientBgDisabled: windowBgOver;
|
starrefRecipientBgDisabled: windowBgOver;
|
||||||
starrefRecipientArrow: icon{{ "intro_country_dropdown", lightButtonFg }};
|
starrefRecipientArrow: icon{{ "intro_country_dropdown", lightButtonFg }};
|
||||||
|
starrefCommissionFont: font(10px semibold);
|
||||||
|
starrefCommissionPadding: margins(3px, 0px, 3px, 0px);
|
||||||
|
|
||||||
starrefAddForBotIcon: icon {{ "menu/bot_add", lightButtonFg }};
|
starrefAddForBotIcon: icon {{ "menu/bot_add", lightButtonFg }};
|
||||||
starrefAddForBotIconPosition: point(23px, 2px);
|
starrefAddForBotIconPosition: point(23px, 2px);
|
||||||
|
|
Loading…
Add table
Reference in a new issue