-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOverlayRenderer.h
92 lines (74 loc) · 2.69 KB
/
OverlayRenderer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// -*- 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 <http://www.gnu.org/licenses/>.
*
* Authored by: Gordon Allott <gord.allott@canonical.com>
*/
#ifndef OVERLAYRENDERER_H
#define OVERLAYRENDERER_H
#include <memory>
#include <Nux/Nux.h>
#include <Nux/View.h>
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<OverlayRenderer> Ptr;
nux::Property<int> x_offset;
nux::Property<int> y_offset;
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);
/*
* 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 content_geo, nux::Geometry absolute_geo, nux::Geometry 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 content_geo, nux::Geometry absolute_geo, nux::Geometry geo);
/*
* Call after calling DrawInner and drawing your own content
*/
void DrawInnerCleanup(nux::GraphicsEngine& gfx_context, nux::Geometry content_geo, nux::Geometry absolute_geo, nux::Geometry geo);
sigc::signal<void> need_redraw;
private:
OverlayRendererImpl *pimpl_;
};
}
#endif // OVERLAYRENDERER_H