mirror of
https://github.com/mumble-voip/mumble.git
synced 2025-10-26 11:19:16 +00:00
Speed up rendering slightly
This commit is contained in:
parent
b7d97dd25e
commit
b658561ec1
@ -1080,6 +1080,10 @@ OverlayClient::~OverlayClient() {
|
||||
}
|
||||
|
||||
bool OverlayClient::eventFilter(QObject *o, QEvent *e) {
|
||||
if (e->type() == QEvent::Paint) {
|
||||
e->accept();
|
||||
return true;
|
||||
}
|
||||
return QObject::eventFilter(o, e);
|
||||
}
|
||||
|
||||
@ -1513,6 +1517,9 @@ bool OverlayClient::setTexts(const QList<OverlayTextLine> &lines) {
|
||||
}
|
||||
|
||||
void OverlayClient::changed(const QList<QRectF> ®ion) {
|
||||
if (region.isEmpty())
|
||||
return;
|
||||
|
||||
qlDirty.append(region);
|
||||
QMetaObject::invokeMethod(this, "render", Qt::QueuedConnection);
|
||||
}
|
||||
@ -1523,7 +1530,7 @@ void OverlayClient::render() {
|
||||
|
||||
if (! uiWidth || ! uiHeight || ! smMem)
|
||||
return;
|
||||
|
||||
|
||||
QRect active;
|
||||
QRectF dirtyf;
|
||||
|
||||
@ -1534,32 +1541,31 @@ void OverlayClient::render() {
|
||||
dirtyf |= r;
|
||||
}
|
||||
|
||||
|
||||
QRect dirty = dirtyf.toAlignedRect();
|
||||
dirty = dirty.intersected(QRect(0,0,uiWidth, uiHeight));
|
||||
|
||||
QRect target = dirty;
|
||||
target.moveTo(0,0);
|
||||
|
||||
QImage img(reinterpret_cast<unsigned char *>(smMem->data()), uiWidth, uiHeight, QImage::Format_ARGB32);
|
||||
QImage qi(target.width(), target.height(), QImage::Format_ARGB32);
|
||||
QImage qi(target.size(), QImage::Format_ARGB32_Premultiplied);
|
||||
qi.fill(0);
|
||||
|
||||
{
|
||||
QPainter p(&qi);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
p.setRenderHint(QPainter::TextAntialiasing);
|
||||
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||
qgs.render(&p, target, dirty, Qt::IgnoreAspectRatio);
|
||||
}
|
||||
|
||||
{
|
||||
QPainter p(&img);
|
||||
p.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
p.drawImage(dirty.x(), dirty.y(), qi);
|
||||
}
|
||||
QPainter p;
|
||||
p.begin(&qi);
|
||||
p.setRenderHints(p.renderHints(), false);
|
||||
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||
qgs.render(&p, target, dirty, Qt::IgnoreAspectRatio);
|
||||
p.end();
|
||||
|
||||
p.begin(&img);
|
||||
p.setRenderHints(p.renderHints(), false);
|
||||
p.setCompositionMode(QPainter::CompositionMode_Source);
|
||||
p.drawImage(dirty.x(), dirty.y(), qi);
|
||||
p.end();
|
||||
|
||||
if (dirty.isValid()) {
|
||||
dirty = dirty.intersected(QRect(0,0,uiWidth, uiHeight));
|
||||
OverlayMsg om;
|
||||
om.omh.uiMagic = OVERLAY_MAGIC_NUMBER;
|
||||
om.omh.uiType = OVERLAY_MSGTYPE_BLIT;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user