// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2011 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Gordon Allott */ #ifndef OVERLAYRENDERER_H #define OVERLAYRENDERER_H #include #include #include namespace unity { class OverlayRendererImpl; class OverlayRenderer { public: // We only ever want one OverlayRenderer per view, so if you must take a pointer, take this unique one that will die // when it goes out of scope typedef std::unique_ptr Ptr; nux::Property x_offset; nux::Property y_offset; nux::Property scale; OverlayRenderer(); ~OverlayRenderer(); /* * Call when we are about to show, gets the blur ready for rendering */ void AboutToShow(); /* * Call when the interface is hiding, saves on resources */ void AboutToHide(); /* * Disables the blur, if you need it disabled. can not re-enable it. */ void DisableBlur(); /* * Needed internally, should be called with yourself as the owner as soon as possible */ void SetOwner(nux::View *owner); /* * Call this whenever the interface size changes: it should be called before the drawing loop happens. */ void UpdateBlurBackgroundSize(nux::Geometry const& content_geo, nux::Geometry const& absolute_geo, bool force_edges=false); /* * Draws the entire stack of visuals using direct rendering, use in the Draw() call, not DrawContent() * * content_geo: the geometry of the content we are renderering, should be smaller than geo * absolute_geo: your views GetAbsoluteGeometry() * geo: your views GetGeometry() */ void DrawFull(nux::GraphicsEngine& gfx_context, nux::Geometry const& content_geo, nux::Geometry const& absolute_geo, nux::Geometry const& geo, bool force_edges=false); /* * Draws just the stack that is overlay behind the inner_geometry using push/pop layers, call in DrawContent() before drawing your content */ void DrawInner(nux::GraphicsEngine& gfx_context, nux::Geometry const& content_geo, nux::Geometry const& absolute_geo, nux::Geometry const& geo); /* * Call after calling DrawInner and drawing your own content */ void DrawInnerCleanup(nux::GraphicsEngine& gfx_context, nux::Geometry const& content_geo, nux::Geometry const& absolute_geo, nux::Geometry const& geo); sigc::signal need_redraw; private: friend class OverlayRendererImpl; OverlayRendererImpl *pimpl_; }; } #endif // OVERLAYRENDERER_H