61 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 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/controls/peer_list_dummy.h"
 | |
| 
 | |
| #include "ui/painter.h"
 | |
| #include "styles/style_widgets.h"
 | |
| 
 | |
| PeerListDummy::PeerListDummy(
 | |
| 	QWidget *parent,
 | |
| 	int count,
 | |
| 	const style::PeerList &st)
 | |
| : _st(st)
 | |
| , _count(count) {
 | |
| 	resize(width(), _count * _st.item.height);
 | |
| }
 | |
| 
 | |
| void PeerListDummy::paintEvent(QPaintEvent *e) {
 | |
| 	QPainter p(this);
 | |
| 
 | |
| 	PainterHighQualityEnabler hq(p);
 | |
| 
 | |
| 	const auto fill = e->rect();
 | |
| 	const auto bottom = fill.top() + fill.height();
 | |
| 	const auto from = std::clamp(fill.top() / _st.item.height, 0, _count);
 | |
| 	const auto till = std::clamp(
 | |
| 		(bottom + _st.item.height - 1) / _st.item.height,
 | |
| 		0,
 | |
| 		_count);
 | |
| 	p.translate(0, _st.item.height * from);
 | |
| 	p.setPen(Qt::NoPen);
 | |
| 	for (auto i = from; i != till; ++i) {
 | |
| 		p.setBrush(st::windowBgOver);
 | |
| 		p.drawEllipse(
 | |
| 			_st.item.photoPosition.x(),
 | |
| 			_st.item.photoPosition.y(),
 | |
| 			_st.item.photoSize,
 | |
| 			_st.item.photoSize);
 | |
| 
 | |
| 		const auto small = int(1.5 * _st.item.photoSize);
 | |
| 		const auto large = 2 * small;
 | |
| 		const auto second = (i % 2) ? large : small;
 | |
| 		const auto height = _st.item.nameStyle.font->height / 2;
 | |
| 		const auto radius = height / 2;
 | |
| 		const auto left = _st.item.namePosition.x();
 | |
| 		const auto top = _st.item.namePosition.y()
 | |
| 			+ (_st.item.nameStyle.font->height - height) / 2;
 | |
| 		const auto skip = _st.item.namePosition.x()
 | |
| 			- _st.item.photoPosition.x()
 | |
| 			- _st.item.photoSize;
 | |
| 		const auto next = left + small + skip;
 | |
| 		p.drawRoundedRect(left, top, small, height, radius, radius);
 | |
| 		p.drawRoundedRect(next, top, second, height, radius, radius);
 | |
| 
 | |
| 		p.translate(0, _st.item.height);
 | |
| 	}
 | |
| }
 | 
