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(); }