1 #include "SurgeBitmaps.h"
2 #include "UserInteractions.h"
3
4 #include "UIInstrumentation.h"
5 #include "CScalableBitmap.h"
6 #include <iostream>
7 #include <cassert>
8
9 using namespace VSTGUI;
10
11 std::atomic<int> SurgeBitmaps::instances(0);
SurgeBitmaps()12 SurgeBitmaps::SurgeBitmaps()
13 {
14 instances++;
15 #ifdef INSTRUMENT_UI
16 Surge::Debug::record("SurgeBitmaps::SurgeBitmaps");
17 #endif
18
19 // std::cout << "Constructing a SurgeBitmaps; Instances is " << instances << std::endl;
20 }
21
~SurgeBitmaps()22 SurgeBitmaps::~SurgeBitmaps()
23 {
24 #ifdef INSTRUMENT_UI
25 Surge::Debug::record("SurgeBitmaps::~SurgeBitmaps");
26 #endif
27 clearAllLoadedBitmaps();
28 instances--;
29 // std::cout << "Destroying a SurgeBitmaps; Instances is " << instances << std::endl;
30 }
31
clearAllLoadedBitmaps()32 void SurgeBitmaps::clearAllLoadedBitmaps()
33 {
34 for (auto pair : bitmap_registry)
35 {
36 pair.second->forget();
37 }
38 for (auto pair : bitmap_file_registry)
39 {
40 pair.second->forget();
41 }
42 for (auto pair : bitmap_stringid_registry)
43 {
44 pair.second->forget();
45 }
46 bitmap_registry.clear();
47 bitmap_file_registry.clear();
48 bitmap_stringid_registry.clear();
49 }
50
clearAllBitmapOffscreenCaches()51 void SurgeBitmaps::clearAllBitmapOffscreenCaches()
52 {
53 for (auto pair : bitmap_registry)
54 {
55 pair.second->clearOffscreenCaches();
56 }
57 for (auto pair : bitmap_file_registry)
58 {
59 pair.second->clearOffscreenCaches();
60 }
61 for (auto pair : bitmap_stringid_registry)
62 {
63 pair.second->clearOffscreenCaches();
64 }
65 }
66
setupBitmapsForFrame(VSTGUI::CFrame * f)67 void SurgeBitmaps::setupBitmapsForFrame(VSTGUI::CFrame *f)
68 {
69 frame = f;
70 addEntry(IDB_MAIN_BG, f);
71 addEntry(IDB_FILTER_SUBTYPE, f);
72 addEntry(IDB_FILTER2_OFFSET, f);
73 addEntry(IDB_OSC_SELECT, f);
74 addEntry(IDB_FILTER_CONFIG, f);
75 addEntry(IDB_SCENE_SELECT, f);
76 addEntry(IDB_SCENE_MODE, f);
77 addEntry(IDB_OSC_OCTAVE, f);
78 addEntry(IDB_SCENE_OCTAVE, f);
79 addEntry(IDB_WAVESHAPER_MODE, f);
80 addEntry(IDB_PLAY_MODE, f);
81 addEntry(IDB_OSC_RETRIGGER, f);
82 addEntry(IDB_OSC_KEYTRACK, f);
83 addEntry(IDB_MIXER_MUTE, f);
84 addEntry(IDB_MIXER_SOLO, f);
85 addEntry(IDB_OSC_FM_ROUTING, f);
86 addEntry(IDB_FILTER2_RESONANCE_LINK, f);
87 addEntry(IDB_MIXER_OSC_ROUTING, f);
88 addEntry(IDB_ENV_SHAPE, f);
89 addEntry(IDB_FX_GLOBAL_BYPASS, f);
90 addEntry(IDB_LFO_TRIGGER_MODE, f);
91 addEntry(IDB_PREVNEXT_JOG, f);
92 addEntry(IDB_LFO_UNIPOLAR, f);
93 addEntry(IDB_OSC_CHARACTER, f);
94 addEntry(IDB_STORE_PATCH, f);
95 addEntry(IDB_MODSOURCE_BG, f);
96 addEntry(IDB_FX_GRID, f);
97 addEntry(IDB_FX_TYPE_ICONS, f);
98 addEntry(IDB_OSC_MENU, f);
99 addEntry(IDB_SLIDER_HORIZ_BG, f);
100 addEntry(IDB_SLIDER_VERT_BG, f);
101 addEntry(IDB_SLIDER_HORIZ_HANDLE, f);
102 addEntry(IDB_SLIDER_VERT_HANDLE, f);
103 addEntry(IDB_ENV_MODE, f);
104 addEntry(IDB_MAIN_MENU, f);
105 addEntry(IDB_LFO_TYPE, f);
106 addEntry(IDB_MENU_AS_SLIDER, f);
107 addEntry(IDB_FILTER_MENU, f);
108 addEntry(IDB_FILTER_ICONS, f);
109 addEntry(IDB_MIDI_LEARN, f);
110
111 // == SVG == Do not remove this comment - it indicates the start of the automated SVG adding
112 // block
113 addEntry(IDB_MSEG_NODES, f);
114 addEntry(IDB_MSEG_MOVEMENT_MODE, f);
115 addEntry(IDB_SURGE_ICON, f);
116 addEntry(IDB_MSEG_VERTICAL_SNAP, f);
117 addEntry(IDB_MSEG_HORIZONTAL_SNAP, f);
118 addEntry(IDB_MPE_BUTTON, f);
119 addEntry(IDB_ZOOM_BUTTON, f);
120 addEntry(IDB_TUNE_BUTTON, f);
121 addEntry(IDB_NUMFIELD_POLY_SPLIT, f);
122 addEntry(IDB_NUMFIELD_PITCHBEND, f);
123 addEntry(IDB_NUMFIELD_KEYTRACK_ROOT, f);
124 addEntry(IDB_MSEG_LOOP_MODE, f);
125 addEntry(IDB_LFO_MSEG_EDIT, f);
126 addEntry(IDB_LFO_PRESET_MENU, f);
127 addEntry(IDB_MSEG_SNAPVALUE_NUMFIELD, f);
128 addEntry(IDB_MODSOURCE_SHOW_LFO, f);
129 addEntry(IDB_MSEG_EDIT_MODE, f);
130 addEntry(IDB_ABOUT_LOGOS, f);
131 addEntry(IDB_ABOUT_BG, f);
132 addEntry(IDB_VUMETER_BARS, f);
133 // == /SVG == Do not remove this comment
134 }
135
addEntry(int id,VSTGUI::CFrame * f)136 void SurgeBitmaps::addEntry(int id, VSTGUI::CFrame *f)
137 {
138 assert(bitmap_registry.find(id) == bitmap_registry.end());
139
140 CScalableBitmap *bitmap = new CScalableBitmap(VSTGUI::CResourceDescription(id), f);
141
142 bitmap_registry[id] = bitmap;
143 }
144
getBitmap(int id)145 CScalableBitmap *SurgeBitmaps::getBitmap(int id) { return bitmap_registry.at(id); }
146
getBitmapByPath(std::string path)147 CScalableBitmap *SurgeBitmaps::getBitmapByPath(std::string path)
148 {
149 if (bitmap_file_registry.find(path) == bitmap_file_registry.end())
150 return nullptr;
151 return bitmap_file_registry.at(path);
152 }
153
getBitmapByStringID(std::string id)154 CScalableBitmap *SurgeBitmaps::getBitmapByStringID(std::string id)
155 {
156 if (bitmap_stringid_registry.find(id) == bitmap_stringid_registry.end())
157 return nullptr;
158 return bitmap_stringid_registry[id];
159 }
160
loadBitmapByPath(std::string path)161 CScalableBitmap *SurgeBitmaps::loadBitmapByPath(std::string path)
162 {
163 if (bitmap_file_registry.find(path) != bitmap_file_registry.end())
164 {
165 bitmap_file_registry[path]->forget();
166 }
167 bitmap_file_registry[path] = new CScalableBitmap(path, frame);
168 return bitmap_file_registry[path];
169 }
170
loadBitmapByPathForID(std::string path,int id)171 CScalableBitmap *SurgeBitmaps::loadBitmapByPathForID(std::string path, int id)
172 {
173 if (bitmap_registry.find(id) != bitmap_registry.end())
174 {
175 bitmap_registry[id]->forget();
176 }
177 bitmap_registry[id] = new CScalableBitmap(path, frame);
178 return bitmap_registry[id];
179 }
180
loadBitmapByPathForStringID(std::string path,std::string id)181 CScalableBitmap *SurgeBitmaps::loadBitmapByPathForStringID(std::string path, std::string id)
182 {
183 if (bitmap_stringid_registry.find(id) != bitmap_stringid_registry.end())
184 {
185 bitmap_stringid_registry[id]->forget();
186 }
187 bitmap_stringid_registry[id] = new CScalableBitmap(path, frame);
188 return bitmap_stringid_registry[id];
189 }
190
setPhysicalZoomFactor(int pzf)191 void SurgeBitmaps::setPhysicalZoomFactor(int pzf)
192 {
193 for (auto pair : bitmap_registry)
194 pair.second->setPhysicalZoomFactor(pzf);
195 for (auto pair : bitmap_file_registry)
196 pair.second->setPhysicalZoomFactor(pzf);
197 for (auto pair : bitmap_stringid_registry)
198 pair.second->setPhysicalZoomFactor(pzf);
199 }
200