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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
// -*- 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: Jason Smith <jason.smith@canonical.com>
*/
#ifndef ABSTRACTICONRENDERER_H
#define ABSTRACTICONRENDERER_H
#include <Nux/Nux.h>
#include "Introspectable.h"
#include "IconTextureSource.h"
namespace unity
{
namespace ui
{
enum PipRenderStyle
{
OUTSIDE_TILE,
OVER_TILE,
};
class RenderArg : public debug::Introspectable
{
public:
RenderArg()
: icon(0)
, colorify(nux::color::White)
, alpha(1.0f)
, saturation(1.0f)
, backlight_intensity(0.0f)
, glow_intensity(0.0f)
, shimmer_progress(0.0f)
, progress(0.0f)
, progress_bias(-1.0f)
, running_arrow(false)
, running_colored(false)
, running_on_viewport(false)
, draw_edge_only(false)
, active_arrow(false)
, active_colored(false)
, skip(false)
, stick_thingy(false)
, keyboard_nav_hl(false)
, draw_shortcut(false)
, system_item(false)
, colorify_background(false)
, window_indicators(0)
, shortcut_label(0)
{
}
IconTextureSource* icon;
nux::Point3 render_center;
nux::Point3 logical_center;
nux::Vector3 rotation;
nux::Color colorify;
float alpha;
float saturation;
float backlight_intensity;
float glow_intensity;
float shimmer_progress;
float progress;
float progress_bias;
bool running_arrow;
bool running_colored;
bool running_on_viewport;
bool draw_edge_only;
bool active_arrow;
bool active_colored;
bool skip;
bool stick_thingy;
bool keyboard_nav_hl;
bool draw_shortcut;
bool system_item;
bool colorify_background;
int window_indicators;
char shortcut_label;
bool operator==(RenderArg const& other) const
{
return (icon == other.icon &&
render_center == other.render_center &&
logical_center == other.logical_center &&
rotation == other.rotation &&
colorify == other.colorify &&
alpha == other.alpha &&
saturation == other.saturation &&
backlight_intensity == other.backlight_intensity &&
glow_intensity == other.glow_intensity &&
shimmer_progress == other.shimmer_progress &&
progress == other.progress &&
progress_bias == other.progress_bias &&
running_arrow == other.running_arrow &&
running_colored == other.running_colored &&
running_on_viewport == other.running_on_viewport &&
draw_edge_only == other.draw_edge_only &&
active_arrow == other.active_arrow &&
active_colored == other.active_colored &&
skip == other.skip &&
stick_thingy == other.stick_thingy &&
keyboard_nav_hl == other.keyboard_nav_hl &&
draw_shortcut == other.draw_shortcut &&
system_item == other.system_item &&
colorify_background == other.colorify_background &&
window_indicators == other.window_indicators &&
shortcut_label == other.shortcut_label);
}
bool operator!=(RenderArg const& other) const
{
return !operator==(other);
}
protected:
// Introspectable methods
std::string GetName() const { return "RenderArgs"; }
void AddProperties(debug::IntrospectionData& introspection)
{
introspection.add("logical_center", logical_center);
}
};
class AbstractIconRenderer
{
public:
typedef std::shared_ptr<AbstractIconRenderer> Ptr;
virtual ~AbstractIconRenderer() {}
nux::Property<PipRenderStyle> pip_style;
nux::Property<int> monitor;
nux::Property<double> scale;
// RenderArgs not const in case processor needs to modify positions to do a perspective correct.
virtual void PreprocessIcons(std::list<RenderArg>& args, nux::Geometry const& target_window) = 0;
virtual void RenderIcon(nux::GraphicsEngine& GfxContext, RenderArg const& arg, nux::Geometry const& anchor_geo, nux::Geometry const& owner_geo) = 0;
virtual void SetTargetSize(int tile_size, int image_size, int spacing) = 0;
};
}
}
#endif // ABSTRACTICONRENDERER_H
|