Beispiel #1
0
void Widget::repaintWidget(PaintEvent* event)
{
	Painter* painter = event->painter();
	painter->save();

	if(parent_)
		painter->translate(pos().x(), pos().y());

	painter->rectangle(rect());
	painter->clip();

	PaintEvent e(*event);
	dispatchEvent(&e);

	painter->restore();

	// Repaint child widgets from bottom to top
	Widget* widget = last_;

	while(widget) {
		Rect<int> r = event->rect().intersected(widget->geometry());
		r.translate(-widget->pos());
		e.setRect(r, {});
		widget->repaintWidget(&e);

		widget = widget->previous_;
	}
}
void PaintInterpolatedIcon(
		Painter &p,
		const style::icon &a,
		const style::icon &b,
		float64 b_ratio,
		QRect rect) {
	PainterHighQualityEnabler hq(p);
	p.save();
	p.translate(rect.center());
	p.setOpacity(b_ratio);
	p.scale(b_ratio, b_ratio);
	b.paintInCenter(p, rect.translated(-rect.center()));
	p.restore();

	p.save();
	p.translate(rect.center());
	p.setOpacity(1. - b_ratio);
	p.scale(1. - b_ratio, 1. - b_ratio);
	a.paintInCenter(p, rect.translated(-rect.center()));
	p.restore();
}