| 394 | } |
| 395 | |
| 396 | void Row::PaintCornerBadgeFrame( |
| 397 | not_null<CornerBadgeUserpic*> data, |
| 398 | int framePadding, |
| 399 | not_null<Entry*> entry, |
| 400 | PeerData *peer, |
| 401 | Ui::VideoUserpic *videoUserpic, |
| 402 | Ui::PeerUserpicView &view, |
| 403 | const Ui::PaintContext &context, |
| 404 | bool subscribed) { |
| 405 | data->frame.fill(Qt::transparent); |
| 406 | |
| 407 | Painter q(&data->frame); |
| 408 | q.translate(framePadding, framePadding); |
| 409 | auto hq = std::optional<PainterHighQualityEnabler>(); |
| 410 | const auto photoSize = context.st->photoSize; |
| 411 | const auto storiesCount = data->storiesCount; |
| 412 | if (storiesCount) { |
| 413 | hq.emplace(q); |
| 414 | const auto line = st::dialogsStoriesFull.lineTwice / 2.; |
| 415 | const auto skip = line * 3 / 2.; |
| 416 | const auto scale = 1. - (2 * skip / photoSize); |
| 417 | const auto center = photoSize / 2.; |
| 418 | q.save(); |
| 419 | q.translate(center, center); |
| 420 | q.scale(scale, scale); |
| 421 | q.translate(-center, -center); |
| 422 | } |
| 423 | q.translate(-context.st->padding.left(), -context.st->padding.top()); |
| 424 | PaintUserpic( |
| 425 | q, |
| 426 | entry, |
| 427 | peer, |
| 428 | videoUserpic, |
| 429 | view, |
| 430 | context); |
| 431 | q.translate(context.st->padding.left(), context.st->padding.top()); |
| 432 | if (storiesCount) { |
| 433 | q.restore(); |
| 434 | |
| 435 | const auto outline = QRectF(0, 0, photoSize, photoSize); |
| 436 | const auto storiesUnread = st::dialogsStoriesFull.lineTwice / 2.; |
| 437 | const auto storiesLine = st::dialogsStoriesFull.lineReadTwice / 2.; |
| 438 | auto segments = std::vector<Ui::OutlineSegment>(); |
| 439 | if (data->storiesHasVideoStream) { |
| 440 | const auto storiesVideoStreamBrush = st::attentionButtonFg->b; |
| 441 | segments.push_back({ storiesVideoStreamBrush, storiesUnread }); |
| 442 | } else { |
| 443 | const auto storiesUnreadCount = data->storiesUnreadCount; |
| 444 | const auto storiesUnreadBrush = [&] { |
| 445 | if (context.active || !storiesUnreadCount) { |
| 446 | return st::dialogsUnreadBgMutedActive->b; |
| 447 | } |
| 448 | auto gradient = Ui::UnreadStoryOutlineGradient(outline); |
| 449 | return QBrush(gradient); |
| 450 | }(); |
| 451 | const auto storiesBrush = context.active |
| 452 | ? st::dialogsUnreadBgMutedActive->b |
| 453 | : st::dialogsUnreadBgMuted->b; |
nothing calls this directly
no test coverage detected