Merge lp:~3v1n0/unity/launchericon-sized into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Brandon Schaefer
Approved revision: no longer in the source branch.
Merged at revision: 3554
Proposed branch: lp:~3v1n0/unity/launchericon-sized
Merge into: lp:unity
Prerequisite: lp:~3v1n0/unity/ql-tooltip-fader
Diff against target: 540 lines (+86/-110)
14 files modified
launcher/AbstractLauncherIcon.cpp (+2/-0)
launcher/AbstractLauncherIcon.h (+2/-1)
launcher/ApplicationLauncherIcon.cpp (+3/-8)
launcher/DeviceNotificationDisplayImp.cpp (+5/-1)
launcher/Launcher.cpp (+5/-4)
launcher/LauncherIcon.cpp (+49/-72)
launcher/LauncherIcon.h (+2/-5)
launcher/MockLauncherIcon.h (+1/-3)
tests/test_launcher.cpp (+3/-3)
tests/test_software_center_launcher_icon.cpp (+1/-1)
unity-shared/BamfApplicationManager.cpp (+2/-1)
unity-shared/IconRenderer.cpp (+2/-2)
unity-shared/IconTextureSource.cpp (+6/-6)
unity-shared/IconTextureSource.h (+3/-3)
To merge this branch: bzr merge lp:~3v1n0/unity/launchericon-sized
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Brandon Schaefer (community) Approve
Review via email: mp+189199@code.launchpad.net

Commit message

AbstractLauncherIcon: add static icon_size property

Description of the change

Added a static property to AbstractLauncherIcon to save the icon size value, this allows each icon to know the size that it will have on the launcher, and allows us to use this to correctly position the tooltips and quicklists and also to correctly set the WindowIcon geometry in compiz (for minimize animation). This allows us also to remove the parent geometry data from the Icon itself.
Improved some highly used codepaths to reduce computation.

Also fixed a bug in IconTextureSource that caused emblems not being shown in other monitors without making the icon to redraw.

To post a comment you must log in.
Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

LGTM

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'launcher/AbstractLauncherIcon.cpp'
2--- launcher/AbstractLauncherIcon.cpp 2012-05-07 19:52:54 +0000
3+++ launcher/AbstractLauncherIcon.cpp 2013-10-04 00:58:07 +0000
4@@ -21,6 +21,8 @@
5
6 namespace unity {
7 namespace launcher {
8+ nux::Property<unsigned> AbstractLauncherIcon::icon_size(48);
9+
10 // needed for ungodly stupid reasons
11 NUX_IMPLEMENT_OBJECT_TYPE(AbstractLauncherIcon);
12 }
13
14=== modified file 'launcher/AbstractLauncherIcon.h'
15--- launcher/AbstractLauncherIcon.h 2013-08-06 09:43:16 +0000
16+++ launcher/AbstractLauncherIcon.h 2013-10-04 00:58:07 +0000
17@@ -135,6 +135,7 @@
18
19 virtual ~AbstractLauncherIcon() = default;
20
21+ static nux::Property<unsigned> icon_size;
22 nux::Property<std::string> tooltip_text;
23 nux::Property<bool> tooltip_enabled;
24 nux::Property<Position> position;
25@@ -152,7 +153,7 @@
26 virtual bool OpenQuicklist(bool select_first_item = false, int monitor = -1) = 0;
27 virtual void CloseQuicklist() = 0;
28
29- virtual void SetCenter(nux::Point3 const& center, int monitor, nux::Geometry const& parent_geo) = 0;
30+ virtual void SetCenter(nux::Point3 const& center, int monitor) = 0;
31
32 virtual nux::Point3 GetCenter(int monitor) = 0;
33
34
35=== modified file 'launcher/ApplicationLauncherIcon.cpp'
36--- launcher/ApplicationLauncherIcon.cpp 2013-10-02 12:36:46 +0000
37+++ launcher/ApplicationLauncherIcon.cpp 2013-10-04 00:58:07 +0000
38@@ -1074,11 +1074,7 @@
39 if (app_->type() == "webapp")
40 return;
41
42- nux::Geometry geo;
43-
44- // TODO: replace 48 with icon_size;
45- geo.width = 48;
46- geo.height = 48;
47+ nux::Geometry geo(0, 0, icon_size, icon_size);
48
49 for (auto& window : app_->GetWindows())
50 {
51@@ -1086,9 +1082,8 @@
52 int monitor = window->monitor();
53 monitor = std::max<int>(0, std::min<int>(center.size() - 1, monitor));
54
55- // TODO: replace 24 with icon_size / 2;
56- geo.x = center[monitor].x - 24;
57- geo.y = center[monitor].y - 24;
58+ geo.x = center[monitor].x - icon_size / 2;
59+ geo.y = center[monitor].y - icon_size / 2;
60 WindowManager::Default().SetWindowIconGeometry(xid, geo);
61 }
62 }
63
64=== modified file 'launcher/DeviceNotificationDisplayImp.cpp'
65--- launcher/DeviceNotificationDisplayImp.cpp 2012-10-18 11:45:32 +0000
66+++ launcher/DeviceNotificationDisplayImp.cpp 2013-10-04 00:58:07 +0000
67@@ -32,6 +32,11 @@
68 namespace launcher
69 {
70
71+namespace
72+{
73+const unsigned icon_size = 48;
74+}
75+
76 //
77 // Start private implementation
78 //
79@@ -40,7 +45,6 @@
80 public:
81 void Show(std::string const& icon_name, std::string const& volume_name)
82 {
83- int icon_size = 48;
84 IconLoader::GetDefault().LoadFromGIconString(icon_name, -1, icon_size,
85 sigc::bind(sigc::mem_fun(this, &Impl::ShowNotificationWhenIconIsReady), volume_name));
86 }
87
88=== modified file 'launcher/Launcher.cpp'
89--- launcher/Launcher.cpp 2013-10-02 23:36:48 +0000
90+++ launcher/Launcher.cpp 2013-10-04 00:58:07 +0000
91@@ -876,12 +876,12 @@
92 arg.render_center = nux::Point3(roundf(center.x + icon_hide_offset), roundf(center.y + centerOffset.y), roundf(center.z));
93 arg.logical_center = nux::Point3(roundf(center.x + icon_hide_offset), roundf(center.y), roundf(center.z));
94
95- icon->SetCenter(nux::Point3(roundf(center.x), roundf(center.y), roundf(center.z)), monitor, parent_abs_geo);
96+ nux::Point3 icon_center(parent_abs_geo.x + roundf(center.x), parent_abs_geo.y + roundf(center.y), roundf(center.z));
97+ icon->SetCenter(icon_center, monitor);
98
99 // FIXME: this is a hack, to avoid that we set the target to the end of the icon
100 if (!initial_drag_animation_ && icon == drag_icon_ && drag_window_ && drag_window_->Animating())
101 {
102- auto const& icon_center = drag_icon_->GetCenter(monitor);
103 drag_window_->SetAnimationTarget(icon_center.x, icon_center.y);
104 }
105
106@@ -897,9 +897,9 @@
107 return -result;
108 }
109
110-nux::Color FullySaturateColor (nux::Color color)
111+nux::Color FullySaturateColor(nux::Color color)
112 {
113- float max = std::max<float>(color.red, std::max<float>(color.green, color.blue));
114+ float max = std::max<float>({color.red, color.green, color.blue});
115
116 if (max > 0.0f)
117 color = color * (1.0f / max);
118@@ -1608,6 +1608,7 @@
119
120 icon_size_ = tile_size;
121 icon_renderer_->SetTargetSize(icon_size_, icon_size, SPACE_BETWEEN_ICONS);
122+ AbstractLauncherIcon::icon_size = icon_size_;
123
124 nux::Geometry const& parent_geo = parent_->GetGeometry();
125 Resize(nux::Point(parent_geo.x, parent_geo.y), parent_geo.height);
126
127=== modified file 'launcher/LauncherIcon.cpp'
128--- launcher/LauncherIcon.cpp 2013-10-04 00:58:06 +0000
129+++ launcher/LauncherIcon.cpp 2013-10-04 00:58:07 +0000
130@@ -79,7 +79,6 @@
131 , _has_visible_window(monitors::MAX, false)
132 , _is_visible_on_monitor(monitors::MAX, true)
133 , _last_stable(monitors::MAX)
134- , _parent_geo(monitors::MAX)
135 , _saved_center(monitors::MAX)
136 , _allow_quicklist_to_show(true)
137 {
138@@ -274,18 +273,15 @@
139 /* static */
140 bool LauncherIcon::IsMonoDefaultTheme()
141 {
142-
143 if (_current_theme_is_mono != -1)
144 return (bool)_current_theme_is_mono;
145
146 GtkIconTheme* default_theme;
147 gtk::IconInfo info;
148- int size = 48;
149-
150 default_theme = gtk_icon_theme_get_default();
151
152 _current_theme_is_mono = (int)false;
153- info = gtk_icon_theme_lookup_icon(default_theme, MONO_TEST_ICON.c_str(), size, (GtkIconLookupFlags)0);
154+ info = gtk_icon_theme_lookup_icon(default_theme, MONO_TEST_ICON.c_str(), icon_size(), (GtkIconLookupFlags)0);
155
156 if (!info)
157 return (bool)_current_theme_is_mono;
158@@ -441,8 +437,7 @@
159 HideTooltip();
160 }
161
162-void
163-LauncherIcon::SetShortcut(guint64 shortcut)
164+void LauncherIcon::SetShortcut(guint64 shortcut)
165 {
166 // only relocate a digit with a digit (don't overwrite other shortcuts)
167 if ((!_shortcut || (g_ascii_isdigit((gchar)_shortcut)))
168@@ -450,37 +445,31 @@
169 _shortcut = shortcut;
170 }
171
172-guint64
173-LauncherIcon::GetShortcut()
174+guint64 LauncherIcon::GetShortcut()
175 {
176 return _shortcut;
177 }
178
179-void
180-LauncherIcon::ShowTooltip()
181+nux::Point LauncherIcon::GetTipPosition() const
182+{
183+ return nux::Point(_center[_last_monitor].x + icon_size()/2 + 1, _center[_last_monitor].y);
184+}
185+
186+void LauncherIcon::ShowTooltip()
187 {
188 if (!tooltip_enabled || tooltip_text().empty() || (_quicklist && _quicklist->IsVisible()))
189 return;
190
191- int tip_x = 100;
192- int tip_y = 100;
193- if (_last_monitor >= 0)
194- {
195- nux::Geometry geo = _parent_geo[_last_monitor];
196- tip_x = geo.x + geo.width - 4 * geo.width / 48;
197- tip_y = _center[_last_monitor].y;
198- }
199-
200 if (!_tooltip)
201 LoadTooltip();
202
203+ auto const& pos = GetTipPosition();
204 _tooltip->text = tooltip_text();
205- _tooltip->ShowTooltipWithTipAt(tip_x, tip_y);
206+ _tooltip->ShowTooltipWithTipAt(pos.x, pos.y);
207 tooltip_visible.emit(_tooltip);
208 }
209
210-void
211-LauncherIcon::RecvMouseEnter(int monitor)
212+void LauncherIcon::RecvMouseEnter(int monitor)
213 {
214 _last_monitor = monitor;
215 }
216@@ -552,28 +541,26 @@
217 monitor = 0;
218 }
219
220- nux::Geometry const& geo = _parent_geo[monitor];
221- int tip_x = geo.x + geo.width - 4 * geo.width / 48;
222- int tip_y = _center[monitor].y;
223-
224 WindowManager& win_manager = WindowManager::Default();
225
226 if (win_manager.IsScaleActive())
227 win_manager.TerminateScale();
228
229+ auto const& pos = GetTipPosition();
230+
231 /* If the expo plugin is active, we need to wait it to be terminated, before
232 * showing the icon quicklist. */
233 if (win_manager.IsExpoActive())
234 {
235 auto conn = std::make_shared<sigc::connection>();
236- *conn = win_manager.terminate_expo.connect([this, conn, tip_x, tip_y] {
237- QuicklistManager::Default()->ShowQuicklist(_quicklist, tip_x, tip_y);
238+ *conn = win_manager.terminate_expo.connect([this, conn, pos] {
239+ QuicklistManager::Default()->ShowQuicklist(_quicklist, pos.x, pos.y);
240 conn->disconnect();
241 });
242 }
243 else
244 {
245- QuicklistManager::Default()->ShowQuicklist(_quicklist, tip_x, tip_y);
246+ QuicklistManager::Default()->ShowQuicklist(_quicklist, pos.x, pos.y);
247 }
248
249 return true;
250@@ -632,42 +619,38 @@
251 tooltip_visible.emit(nux::ObjectPtr<nux::View>());
252 }
253
254-bool
255-LauncherIcon::OnCenterStabilizeTimeout()
256-{
257- if (!std::equal(_center.begin(), _center.end(), _last_stable.begin()))
258- {
259- OnCenterStabilized(_center);
260- _last_stable = _center;
261- }
262-
263- return false;
264-}
265-
266-void
267-LauncherIcon::SetCenter(nux::Point3 const& center, int monitor, nux::Geometry const& geo)
268-{
269- _parent_geo[monitor] = geo;
270-
271- nux::Point3& new_center = _center[monitor];
272- new_center.x = center.x + geo.x;
273- new_center.y = center.y + geo.y;
274- new_center.z = center.z;
275+void LauncherIcon::SetCenter(nux::Point3 const& new_center, int monitor)
276+{
277+ nux::Point3& center = _center[monitor];
278+
279+ if (center == new_center)
280+ return;
281+
282+ center = new_center;
283
284 if (monitor == _last_monitor)
285 {
286- int tip_x, tip_y;
287- tip_x = geo.x + geo.width - 4 * geo.width / 48;
288- tip_y = new_center.y;
289-
290 if (_quicklist && _quicklist->IsVisible())
291- QuicklistManager::Default()->MoveQuicklist(_quicklist, tip_x, tip_y);
292+ {
293+ auto const& pos = GetTipPosition();
294+ QuicklistManager::Default()->MoveQuicklist(_quicklist, pos.x, pos.y);
295+ }
296 else if (_tooltip && _tooltip->IsVisible())
297- _tooltip->SetTooltipPosition(tip_x, tip_y);
298+ {
299+ auto const& pos = GetTipPosition();
300+ _tooltip->SetTooltipPosition(pos.x, pos.y);
301+ }
302 }
303
304- auto const& cb_func = sigc::mem_fun(this, &LauncherIcon::OnCenterStabilizeTimeout);
305- _source_manager.AddTimeout(500, cb_func, CENTER_STABILIZE_TIMEOUT);
306+ _source_manager.AddTimeout(500, [this] {
307+ if (!std::equal(_center.begin(), _center.end(), _last_stable.begin()))
308+ {
309+ OnCenterStabilized(_center);
310+ _last_stable = _center;
311+ }
312+
313+ return false;
314+ }, CENTER_STABILIZE_TIMEOUT);
315 }
316
317 nux::Point3
318@@ -720,17 +703,6 @@
319 return _is_visible_on_monitor[monitor];
320 }
321
322-bool
323-LauncherIcon::OnPresentTimeout()
324-{
325- if (!GetQuirk(Quirk::PRESENTED))
326- return false;
327-
328- Unpresent();
329-
330- return false;
331-}
332-
333 float LauncherIcon::PresentUrgency()
334 {
335 return _present_urgency;
336@@ -744,8 +716,13 @@
337
338 if (length >= 0)
339 {
340- auto cb_func = sigc::mem_fun(this, &LauncherIcon::OnPresentTimeout);
341- _source_manager.AddTimeout(length, cb_func, PRESENT_TIMEOUT);
342+ _source_manager.AddTimeout(length, [this] {
343+ if (!GetQuirk(Quirk::PRESENTED))
344+ return false;
345+
346+ Unpresent();
347+ return false;
348+ }, PRESENT_TIMEOUT);
349 }
350
351 _present_urgency = CLAMP(present_urgency, 0.0f, 1.0f);
352
353=== modified file 'launcher/LauncherIcon.h'
354--- launcher/LauncherIcon.h 2013-09-30 15:08:09 +0000
355+++ launcher/LauncherIcon.h 2013-10-04 00:58:07 +0000
356@@ -74,7 +74,7 @@
357 bool OpenQuicklist(bool select_first_item = false, int monitor = -1);
358 void CloseQuicklist();
359
360- void SetCenter(nux::Point3 const& center, int parent_monitor, nux::Geometry const& parent_geo);
361+ void SetCenter(nux::Point3 const& center, int parent_monitor);
362
363 nux::Point3 GetCenter(int monitor);
364
365@@ -295,10 +295,8 @@
366
367 static void ChildRealized(DbusmenuMenuitem* newitem, QuicklistView* quicklist);
368 static void RootChanged(DbusmenuClient* client, DbusmenuMenuitem* newroot, QuicklistView* quicklist);
369- bool OnPresentTimeout();
370- bool OnCenterStabilizeTimeout();
371-
372 void ColorForIcon(GdkPixbuf* pixbuf, nux::Color& background, nux::Color& glow);
373+ nux::Point GetTipPosition() const;
374
375 void LoadTooltip();
376 void LoadQuicklist();
377@@ -320,7 +318,6 @@
378 std::vector<bool> _has_visible_window;
379 std::vector<bool> _is_visible_on_monitor;
380 std::vector<nux::Point3> _last_stable;
381- std::vector<nux::Geometry> _parent_geo;
382 std::vector<nux::Point3> _saved_center;
383
384 static glib::Object<GtkIconTheme> _unity_theme;
385
386=== modified file 'launcher/MockLauncherIcon.h'
387--- launcher/MockLauncherIcon.h 2013-08-05 13:59:08 +0000
388+++ launcher/MockLauncherIcon.h 2013-10-04 00:58:07 +0000
389@@ -153,11 +153,9 @@
390 {
391 }
392
393- void SetCenter(nux::Point3 const& center, int monitor, nux::Geometry const& geo)
394+ void SetCenter(nux::Point3 const& center, int monitor)
395 {
396 center_[monitor] = center;
397- center_[monitor].x += geo.x;
398- center_[monitor].y += geo.y;
399 }
400
401 nux::Point3 GetCenter(int monitor)
402
403=== modified file 'tests/test_launcher.cpp'
404--- tests/test_launcher.cpp 2013-09-13 04:52:56 +0000
405+++ tests/test_launcher.cpp 2013-10-04 00:58:07 +0000
406@@ -160,7 +160,7 @@
407 for (unsigned i = 0; i < number; ++i)
408 {
409 MockMockLauncherIcon::Ptr icon(new MockMockLauncherIcon);
410- icon->SetCenter(nux::Point3(icon_size/2.0f, icon_size/2.0f * (i+1) + 1, 0), monitor, launcher_geo);
411+ icon->SetCenter(nux::Point3(launcher_geo.x + icon_size/2.0f, launcher_geo.y + icon_size/2.0f * (i+1) + 1, 0), monitor);
412
413 icons.push_back(icon);
414 model_->AddIcon(icon);
415@@ -391,8 +391,8 @@
416 launcher_->UpdateDragWindowPosition(center3.x, center3.y);
417
418 // Swapping the centers
419- icon3->SetCenter(icon2->GetCenter(launcher_->monitor()), launcher_->monitor(), launcher_->GetGeometry());
420- icon2->SetCenter(center3, launcher_->monitor(), launcher_->GetGeometry());
421+ icon3->SetCenter(icon2->GetCenter(launcher_->monitor()), launcher_->monitor());
422+ icon2->SetCenter(center3, launcher_->monitor());
423
424 // Moving icon2 back to the middle
425 center3 = icon3->GetCenter(launcher_->monitor());
426
427=== modified file 'tests/test_software_center_launcher_icon.cpp'
428--- tests/test_software_center_launcher_icon.cpp 2013-09-11 09:09:27 +0000
429+++ tests/test_software_center_launcher_icon.cpp 2013-10-04 00:58:07 +0000
430@@ -226,7 +226,7 @@
431 {
432 auto launcher = CreateLauncher();
433 launcher->monitor = GetParam();
434- icon.SetCenter({1, 1, 0}, launcher->monitor(), nux::Geometry());
435+ icon.SetCenter({1, 1, 0}, launcher->monitor());
436 EXPECT_TRUE(icon.Animate(launcher, 2, 2));
437 EXPECT_TRUE(icon.IsVisible());
438 EXPECT_EQ("", icon.icon_name());
439
440=== modified file 'unity-shared/BamfApplicationManager.cpp'
441--- unity-shared/BamfApplicationManager.cpp 2013-09-05 15:43:48 +0000
442+++ unity-shared/BamfApplicationManager.cpp 2013-10-04 00:58:07 +0000
443@@ -22,6 +22,7 @@
444
445 #include <NuxCore/Logger.h>
446 #include <NuxGraphics/XInputWindow.h>
447+#include <UnityCore/DesktopUtilities.h>
448
449
450 DECLARE_LOGGER(logger, "unity.appmanager.desktop.bamf");
451@@ -552,7 +553,7 @@
452 }
453 }
454
455- return nullptr;
456+ return GetApplicationForDesktopFile(DesktopUtilities::GetDesktopPathById("compiz.desktop"));
457 }
458
459 ApplicationWindowPtr Manager::GetActiveWindow() const
460
461=== modified file 'unity-shared/IconRenderer.cpp'
462--- unity-shared/IconRenderer.cpp 2013-07-29 16:23:15 +0000
463+++ unity-shared/IconRenderer.cpp 2013-10-04 00:58:07 +0000
464@@ -302,7 +302,7 @@
465 it->logical_center == launcher_icon->LastLogicalCenter(monitor) &&
466 it->rotation == launcher_icon->LastRotation(monitor) &&
467 it->skip == launcher_icon->WasSkipping(monitor) &&
468- (launcher_icon->Emblem() != nullptr) == launcher_icon->HadEmblem())
469+ (launcher_icon->Emblem() != nullptr) == launcher_icon->HadEmblem(monitor))
470 {
471 continue;
472 }
473@@ -310,7 +310,7 @@
474 launcher_icon->RememberCenters(monitor, it->render_center, it->logical_center);
475 launcher_icon->RememberRotation(monitor, it->rotation);
476 launcher_icon->RememberSkip(monitor, it->skip);
477- launcher_icon->RememberEmblem(launcher_icon->Emblem() != nullptr);
478+ launcher_icon->RememberEmblem(monitor, launcher_icon->Emblem() != nullptr);
479
480 float w = icon_size;
481 float h = icon_size;
482
483=== modified file 'unity-shared/IconTextureSource.cpp'
484--- unity-shared/IconTextureSource.cpp 2013-07-29 17:17:43 +0000
485+++ unity-shared/IconTextureSource.cpp 2013-10-04 00:58:07 +0000
486@@ -32,8 +32,8 @@
487 }
488
489 IconTextureSource::IconTextureSource()
490- : had_emblem_(false)
491- , skip_(RENDERERS_SIZE, false)
492+ : skip_(RENDERERS_SIZE, false)
493+ , had_emblem_(RENDERERS_SIZE, false)
494 , last_render_center_(RENDERERS_SIZE)
495 , last_logical_center_(RENDERERS_SIZE)
496 , last_rotation_(RENDERERS_SIZE)
497@@ -81,14 +81,14 @@
498 return skip_[monitor];
499 }
500
501-void IconTextureSource::RememberEmblem(bool has_emblem)
502+void IconTextureSource::RememberEmblem(int monitor, bool has_emblem)
503 {
504- had_emblem_ = has_emblem;
505+ had_emblem_[monitor] = has_emblem;
506 }
507
508-bool IconTextureSource::HadEmblem() const
509+bool IconTextureSource::HadEmblem(int monitor) const
510 {
511- return had_emblem_;
512+ return had_emblem_[monitor];
513 }
514
515 }
516
517=== modified file 'unity-shared/IconTextureSource.h'
518--- unity-shared/IconTextureSource.h 2013-04-23 00:48:47 +0000
519+++ unity-shared/IconTextureSource.h 2013-10-04 00:58:07 +0000
520@@ -58,8 +58,8 @@
521 void RememberSkip(int monitor, bool skip);
522 bool WasSkipping(int monitor) const;
523
524- void RememberEmblem(bool has_emblem);
525- bool HadEmblem() const;
526+ void RememberEmblem(int monitor, bool has_emblem);
527+ bool HadEmblem(int monitor) const;
528
529 virtual nux::Color BackgroundColor() const = 0;
530
531@@ -70,8 +70,8 @@
532 virtual nux::BaseTexture* Emblem() = 0;
533
534 private:
535- bool had_emblem_;
536 std::vector<bool> skip_;
537+ std::vector<bool> had_emblem_;
538 std::vector<nux::Point3> last_render_center_;
539 std::vector<nux::Point3> last_logical_center_;
540 std::vector<nux::Vector3> last_rotation_;