diff options
-rw-r--r-- | src/mcompositescene.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mcompositescene.cpp b/src/mcompositescene.cpp index b138c4f..36cb017 100644 --- a/src/mcompositescene.cpp +++ b/src/mcompositescene.cpp @@ -100,11 +100,19 @@ void MCompositeScene::drawItems(QPainter *painter, int numItems, QGraphicsItem * { for (int i = 0; i < numItems; ++i) { MCompositeWindow *window = (MCompositeWindow *) items[i]; - if (window->windowVisible() && !window->isIconified()) { - painter->save(); - painter->setMatrix(items[i]->sceneMatrix(), true); - items[i]->paint(painter, &options[i], widget); - painter->restore(); - } + + // Redraw only textures which don't have opaque textures above it + if (((i < numItems - 1) + && (items[i+1]->sceneMatrix().mapRect(items[i]->boundingRect()) == + items[i]->boundingRect()) + && (!((MCompositeWindow *)items[i+1])->propertyCache()->hasAlpha()) + && (((MCompositeWindow *)items[i+1])->opacity() == 1.0)) + || window->isIconified()) + continue; + + painter->save(); + painter->setMatrix(items[i]->sceneMatrix(), true); + items[i]->paint(painter, &options[i], widget); + painter->restore(); } } |