Fix CrossLineAnimation with semi-transparent color.

This commit is contained in:
John Preston 2021-05-11 12:56:28 +04:00
parent b486260559
commit 6bc9586644
2 changed files with 19 additions and 6 deletions

View file

@ -584,8 +584,8 @@ groupCallMenuBgOver: #343940; // group call popup menu with mouse over
groupCallMenuBgRipple: #3a4047; // group call popup menu ripple effect
groupCallLeaveBg: #f75c5c7f; // group call leave button background
groupCallLeaveBgRipple: #f75c5c9e; // group call leave button ripple effect
groupCallVideoTextFg: #ffffffb2; // group call text over video
groupCallVideoSubTextFg: #ffffff66; // group call additional text over video
groupCallVideoTextFg: #ffffffe0; // group call text over video
groupCallVideoSubTextFg: #ffffffc0; // group call additional text over video
callBarBg: dialogsBgActive; // active phone call bar background
callBarMuteRipple: dialogsRippleBgActive; // active phone call bar mute and hangup button ripple effect

View file

@ -88,15 +88,20 @@ void CrossLineAnimation::fillFrame(
Painter q(&_frame);
PainterHighQualityEnabler hq(q);
if (colorOverride) {
_st.icon.paint(q, 0, 0, _st.icon.width(), *colorOverride);
const auto colorize = ((colorOverride && colorOverride->alpha() != 255)
|| (!colorOverride && _st.fg->c.alpha() != 255));
const auto color = colorize
? QColor(255, 255, 255)
: colorOverride;
if (color) {
_st.icon.paint(q, 0, 0, _st.icon.width(), *color);
} else {
_st.icon.paint(q, 0, 0, _st.icon.width());
}
if (colorOverride) {
if (color) {
auto pen = _strokePen;
pen.setColor(*colorOverride);
pen.setColor(*color);
q.setPen(pen);
} else {
q.setPen(_strokePen);
@ -106,6 +111,14 @@ void CrossLineAnimation::fillFrame(
q.setCompositionMode(QPainter::CompositionMode_Source);
q.setPen(_transparentPen);
q.drawLine(_reversed ? bottomLine : topLine);
q.end();
if (colorize) {
style::colorizeImage(
_frame,
colorOverride.value_or(_st.fg->c),
&_frame);
}
}
void CrossLineAnimation::invalidate() {