mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Moved out class for colored ministars to separate file.
This commit is contained in:
parent
56cbde93da
commit
65ad8e6ac1
4 changed files with 115 additions and 71 deletions
|
@ -20,7 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "settings/settings_premium.h"
|
||||
#include "ui/basic_click_handlers.h" // UrlClickHandler::Open.
|
||||
#include "ui/effects/premium_graphics.h"
|
||||
#include "ui/effects/premium_stars.h"
|
||||
#include "ui/effects/premium_stars_colored.h"
|
||||
#include "ui/layers/generic_box.h"
|
||||
#include "ui/special_buttons.h"
|
||||
#include "ui/text/format_values.h"
|
||||
|
@ -90,76 +90,6 @@ GiftOptions GiftOptionFromTL(const MTPDuserFull &data) {
|
|||
return result;
|
||||
}
|
||||
|
||||
class ColoredMiniStars final {
|
||||
public:
|
||||
ColoredMiniStars(not_null<Ui::RpWidget*> parent);
|
||||
|
||||
void setSize(const QSize &size);
|
||||
void setPosition(QPoint position);
|
||||
void paint(Painter &p);
|
||||
|
||||
private:
|
||||
Ui::Premium::MiniStars _ministars;
|
||||
QRectF _ministarsRect;
|
||||
QImage _frame;
|
||||
QImage _mask;
|
||||
QSize _size;
|
||||
QPoint _position;
|
||||
|
||||
};
|
||||
|
||||
ColoredMiniStars::ColoredMiniStars(not_null<Ui::RpWidget*> parent)
|
||||
: _ministars([=](const QRect &r) {
|
||||
parent->update(r.translated(_position));
|
||||
}, true) {
|
||||
}
|
||||
|
||||
void ColoredMiniStars::setSize(const QSize &size) {
|
||||
_frame = QImage(
|
||||
size * style::DevicePixelRatio(),
|
||||
QImage::Format_ARGB32_Premultiplied);
|
||||
_frame.setDevicePixelRatio(style::DevicePixelRatio());
|
||||
|
||||
_mask = _frame;
|
||||
_mask.fill(Qt::transparent);
|
||||
{
|
||||
Painter p(&_mask);
|
||||
auto gradient = QLinearGradient(0, 0, size.width(), 0);
|
||||
gradient.setStops(Ui::Premium::GiftGradientStops());
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(gradient);
|
||||
p.drawRect(0, 0, size.width(), size.height());
|
||||
}
|
||||
|
||||
_size = size;
|
||||
|
||||
{
|
||||
const auto s = _size / Ui::Premium::MiniStars::kSizeFactor;
|
||||
const auto margins = QMarginsF(
|
||||
s.width() / 2.,
|
||||
s.height() / 2.,
|
||||
s.width() / 2.,
|
||||
s.height() / 2.);
|
||||
_ministarsRect = QRectF(QPointF(), _size) - margins;
|
||||
}
|
||||
}
|
||||
|
||||
void ColoredMiniStars::setPosition(QPoint position) {
|
||||
_position = std::move(position);
|
||||
}
|
||||
|
||||
void ColoredMiniStars::paint(Painter &p) {
|
||||
_frame.fill(Qt::transparent);
|
||||
{
|
||||
Painter q(&_frame);
|
||||
_ministars.paint(q, _ministarsRect);
|
||||
q.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||
q.drawImage(0, 0, _mask);
|
||||
}
|
||||
|
||||
p.drawImage(_position, _frame);
|
||||
}
|
||||
|
||||
void GiftBox(
|
||||
not_null<Ui::GenericBox*> box,
|
||||
not_null<Window::SessionController*> controller,
|
||||
|
@ -182,6 +112,7 @@ void GiftBox(
|
|||
+ userpicPadding.bottom()
|
||||
+ st::defaultUserpicButton.size.height()));
|
||||
|
||||
using ColoredMiniStars = Ui::Premium::ColoredMiniStars;
|
||||
const auto stars = box->lifetime().make_state<ColoredMiniStars>(top);
|
||||
|
||||
const auto userpic = Ui::CreateChild<Ui::UserpicButton>(
|
||||
|
|
73
Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp
Normal file
73
Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "ui/effects/premium_stars_colored.h"
|
||||
|
||||
#include "ui/effects/premium_graphics.h" // GiftGradientStops.
|
||||
#include "ui/rp_widget.h"
|
||||
|
||||
namespace Ui {
|
||||
namespace Premium {
|
||||
|
||||
ColoredMiniStars::ColoredMiniStars(not_null<Ui::RpWidget*> parent)
|
||||
: _ministars([=](const QRect &r) {
|
||||
parent->update(r.translated(_position));
|
||||
}, true) {
|
||||
}
|
||||
|
||||
void ColoredMiniStars::setSize(const QSize &size) {
|
||||
_frame = QImage(
|
||||
size * style::DevicePixelRatio(),
|
||||
QImage::Format_ARGB32_Premultiplied);
|
||||
_frame.setDevicePixelRatio(style::DevicePixelRatio());
|
||||
|
||||
_mask = _frame;
|
||||
_mask.fill(Qt::transparent);
|
||||
{
|
||||
Painter p(&_mask);
|
||||
auto gradient = QLinearGradient(0, 0, size.width(), 0);
|
||||
gradient.setStops(Ui::Premium::GiftGradientStops());
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(gradient);
|
||||
p.drawRect(0, 0, size.width(), size.height());
|
||||
}
|
||||
|
||||
_size = size;
|
||||
|
||||
{
|
||||
const auto s = _size / Ui::Premium::MiniStars::kSizeFactor;
|
||||
const auto margins = QMarginsF(
|
||||
s.width() / 2.,
|
||||
s.height() / 2.,
|
||||
s.width() / 2.,
|
||||
s.height() / 2.);
|
||||
_ministarsRect = QRectF(QPointF(), _size) - margins;
|
||||
}
|
||||
}
|
||||
|
||||
void ColoredMiniStars::setPosition(QPoint position) {
|
||||
_position = std::move(position);
|
||||
}
|
||||
|
||||
void ColoredMiniStars::paint(Painter &p) {
|
||||
_frame.fill(Qt::transparent);
|
||||
{
|
||||
Painter q(&_frame);
|
||||
_ministars.paint(q, _ministarsRect);
|
||||
q.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||
q.drawImage(0, 0, _mask);
|
||||
}
|
||||
|
||||
p.drawImage(_position, _frame);
|
||||
}
|
||||
|
||||
void ColoredMiniStars::setPaused(bool paused) {
|
||||
_ministars.setPaused(paused);
|
||||
}
|
||||
|
||||
} // namespace Premium
|
||||
} // namespace Ui
|
38
Telegram/SourceFiles/ui/effects/premium_stars_colored.h
Normal file
38
Telegram/SourceFiles/ui/effects/premium_stars_colored.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "ui/effects/premium_stars.h"
|
||||
|
||||
namespace Ui {
|
||||
class RpWidget;
|
||||
|
||||
namespace Premium {
|
||||
|
||||
class ColoredMiniStars final {
|
||||
public:
|
||||
ColoredMiniStars(not_null<Ui::RpWidget*> parent);
|
||||
|
||||
void setSize(const QSize &size);
|
||||
void setPosition(QPoint position);
|
||||
void paint(Painter &p);
|
||||
|
||||
void setPaused(bool paused);
|
||||
|
||||
private:
|
||||
Ui::Premium::MiniStars _ministars;
|
||||
QRectF _ministarsRect;
|
||||
QImage _frame;
|
||||
QImage _mask;
|
||||
QSize _size;
|
||||
QPoint _position;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Premium
|
||||
} // namespace Ui
|
|
@ -234,6 +234,8 @@ PRIVATE
|
|||
ui/effects/premium_graphics.h
|
||||
ui/effects/premium_stars.cpp
|
||||
ui/effects/premium_stars.h
|
||||
ui/effects/premium_stars_colored.cpp
|
||||
ui/effects/premium_stars_colored.h
|
||||
ui/effects/round_checkbox.cpp
|
||||
ui/effects/round_checkbox.h
|
||||
ui/effects/scroll_content_shadow.cpp
|
||||
|
|
Loading…
Add table
Reference in a new issue