From 3d12d3a832462309cca084b87a89d008ae50d5e9 Mon Sep 17 00:00:00 2001 From: Julian Harnath Date: Mon, 3 Aug 2015 18:50:58 +0200 Subject: [PATCH] app_server: special handling for opaque/invisible layers * Opaque layers (opacity = 255) don't need to use an intermediate bitmap (and everything that comes with it) for drawing at all, they can just directly draw onto the underlying canvas or layer. (WebKit likes to use plenty of opaque layers) * Invisible layers (opacity = 0) can simply be ignored. --- src/servers/app/Canvas.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/servers/app/Canvas.cpp b/src/servers/app/Canvas.cpp index e79b1527a2..3c53676e62 100644 --- a/src/servers/app/Canvas.cpp +++ b/src/servers/app/Canvas.cpp @@ -223,6 +223,15 @@ Canvas::ScreenToPenTransform() const GCC_2_NRV(transform) void Canvas::BlendLayer(Layer* layer) { + if (layer->Opacity() == 255) { + layer->Play(this); + layer->ReleaseReference(); + return; + } else if (layer->Opacity() == 0) { + layer->ReleaseReference(); + return; + } + UtilityBitmap* layerBitmap = layer->RenderToBitmap(this); if (layerBitmap == NULL) return;