From d41fb4db6e4ff58fac59e318da7ab45efc6deda6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 17 May 2006 12:46:56 +0000 Subject: [PATCH] * Overlay::fVisible was not maintained correctly, but already used in ViewLayer. * Overlay::SetView() no longer calls HWInterace::UpdateOverlay() if it's currently hidden. * ViewLayer::UpdateVisibleDeep() now calls _UpdateOverlayView() before showing the overlay. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17489 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ViewLayer.cpp | 8 ++++++-- src/servers/app/drawing/Overlay.cpp | 8 ++++++-- src/servers/app/drawing/Overlay.h | 2 -- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/servers/app/ViewLayer.cpp b/src/servers/app/ViewLayer.cpp index 2bbb1ec913..bb68f85ade 100644 --- a/src/servers/app/ViewLayer.cpp +++ b/src/servers/app/ViewLayer.cpp @@ -522,6 +522,9 @@ ViewLayer::_UpdateOverlayView() const void ViewLayer::UpdateOverlay() { + if (!IsVisible()) + return; + if (_Overlay() != NULL) { _UpdateOverlayView(); } else { @@ -1262,9 +1265,10 @@ ViewLayer::UpdateVisibleDeep(bool parentVisible) if (overlay == NULL) return; - if (fVisible && !overlay->IsVisible()) + if (fVisible && !overlay->IsVisible()) { + _UpdateOverlayView(); overlay->Show(); - else if (!fVisible && overlay->IsVisible()) + } else if (!fVisible && overlay->IsVisible()) overlay->Hide(); } diff --git a/src/servers/app/drawing/Overlay.cpp b/src/servers/app/drawing/Overlay.cpp index 620621b40a..04e499876a 100644 --- a/src/servers/app/drawing/Overlay.cpp +++ b/src/servers/app/drawing/Overlay.cpp @@ -20,7 +20,8 @@ Overlay::Overlay(HWInterface& interface) fHWInterface(interface), fOverlayBuffer(NULL), fClientData(NULL), - fOverlayToken(NULL) + fOverlayToken(NULL), + fVisible(false) { fSemaphore = create_sem(1, "overlay lock"); fColor.SetColor(21, 16, 21, 16); @@ -118,6 +119,7 @@ Overlay::Show() return; } + fVisible = true; fHWInterface.ShowOverlay(this); } @@ -128,6 +130,7 @@ Overlay::Hide() if (fOverlayToken == NULL) return; + fVisible = false; fHWInterface.HideOverlay(this); } @@ -186,6 +189,7 @@ Overlay::SetView(const BRect& source, const BRect& destination) fWindow.width = (uint16)destination.IntegerWidth() + 1; fWindow.height = (uint16)destination.IntegerHeight() + 1; - fHWInterface.UpdateOverlay(this); + if (fVisible) + fHWInterface.UpdateOverlay(this); } diff --git a/src/servers/app/drawing/Overlay.h b/src/servers/app/drawing/Overlay.h index f012d10b60..b95f8224df 100644 --- a/src/servers/app/drawing/Overlay.h +++ b/src/servers/app/drawing/Overlay.h @@ -47,8 +47,6 @@ class Overlay { const RGBColor& Color() const { return fColor; } - void SetVisible(bool visible) - { fVisible = visible; } bool IsVisible() const { return fVisible; }