@@ -0,0 +1 @@ | |||
<div>Icons made by <a href="https://www.flaticon.com/authors/egor-rumyantsev" title="Egor Rumyantsev">Egor Rumyantsev</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></div> |
@@ -0,0 +1,78 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
x="0px" | |||
y="0px" | |||
viewBox="-7074.5 3413.5 16 16" | |||
enable-background="new -7074.5 3413.5 24 24" | |||
xml:space="preserve" | |||
id="svg12" | |||
sodipodi:docname="settings_icon_cc.svg" | |||
width="16" | |||
height="16" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata | |||
id="metadata18"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs16"> | |||
</defs><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1137" | |||
id="namedview14" | |||
showgrid="false" | |||
inkscape:zoom="22.250293" | |||
inkscape:cx="1.4996926" | |||
inkscape:cy="9.1190487" | |||
inkscape:window-x="-8" | |||
inkscape:window-y="-8" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="svg12" /><g | |||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" | |||
id="text1044" /><g | |||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" | |||
id="text1056" /><g | |||
transform="matrix(0.04483133,0,0,0.04483133,-7072.6113,3415.4306)" | |||
id="Settings" | |||
style="fill:#b4b4b4;fill-opacity:1"><g | |||
id="g4" | |||
style="fill:#b4b4b4;fill-opacity:1"><path | |||
style="clip-rule:evenodd;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd" | |||
d="M 267.92,119.461 C 259.7639,108.37353 237.60907,113.69022 232.38746,96.479699 224.2718,82.390868 233.00438,67.286235 241.3705,56.29375 237.43425,44.426372 225.91606,35.523227 215.98352,28.244359 203.37196,32.005085 190.10946,46.088799 174.769,37.92 157.82363,32.983341 158.89813,13.404545 152.74813,1.7591562 140.59107,-0.17972483 126.1677,-2.1756684 114.95288,3.357125 112.96944,17.007361 108.38383,33.860528 92.63896,37.926967 77.775408,44.414555 65.997604,30.615672 53.839531,27.462953 43.772588,34.725084 31.977464,43.546698 27.964375,55.510625 c 8.49164,11.040709 17.354156,26.326968 8.991024,40.499701 -5.867916,15.344484 -24.485634,13.358994 -35.2431959,20.053284 -1.60577119,12.17834 -4.4742822,27.30556 2.2519219,37.97214 12.880627,2.23194 28.500004,5.84589 33.341875,20.29625 8.393178,15.26924 -5.888965,28.31876 -9.629844,40.84962 7.224375,9.96863 15.9554,21.67539 27.825594,25.64263 11.099937,-8.35246 26.446117,-17.06929 40.584732,-8.98545 15.634258,5.69547 13.544408,24.27779 19.933428,35.16712 12.15272,1.92903 26.57763,3.94093 37.78909,-1.60092 1.97214,-13.65237 6.56399,-30.5044 22.31039,-34.56583 14.86512,-6.50972 26.63511,7.31696 38.79786,10.45844 10.07865,-7.24787 21.85234,-16.08992 25.88513,-28.04249 -8.48485,-11.03294 -17.36567,-26.29404 -9.02937,-40.47181 5.58844,-11.68796 18.70272,-16.89286 31.01071,-16.51756 9.97767,-7.68663 4.90088,-25.51607 5.13628,-36.80475 z m -133.325,60.03 c -26.4812,0.83488 -49.170092,-25.58413 -44.306628,-51.64133 3.22607,-26.2257 32.618568,-44.652523 57.621488,-35.988163 25.41298,7.086788 39.29929,38.784143 27.08161,62.222153 -7.20502,15.27134 -23.48006,25.59801 -40.39647,25.40734 z" | |||
id="path2" | |||
inkscape:connector-curvature="0" /></g></g></svg> |
@@ -0,0 +1,27 @@ | |||
<?xml version="1.0" encoding="iso-8859-1"?> | |||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="0 0 268.765 268.765" style="enable-background:new 0 0 268.765 268.765;" xml:space="preserve" | |||
> | |||
<g id="Settings"> | |||
<g> | |||
<path style="fill-rule:evenodd;clip-rule:evenodd;" d="M267.92,119.461c-0.425-3.778-4.83-6.617-8.639-6.617 | |||
c-12.315,0-23.243-7.231-27.826-18.414c-4.682-11.454-1.663-24.812,7.515-33.231c2.889-2.641,3.24-7.062,0.817-10.133 | |||
c-6.303-8.004-13.467-15.234-21.289-21.5c-3.063-2.458-7.557-2.116-10.213,0.825c-8.01,8.871-22.398,12.168-33.516,7.529 | |||
c-11.57-4.867-18.866-16.591-18.152-29.176c0.235-3.953-2.654-7.39-6.595-7.849c-10.038-1.161-20.164-1.197-30.232-0.08 | |||
c-3.896,0.43-6.785,3.786-6.654,7.689c0.438,12.461-6.946,23.98-18.401,28.672c-10.985,4.487-25.272,1.218-33.266-7.574 | |||
c-2.642-2.896-7.063-3.252-10.141-0.853c-8.054,6.319-15.379,13.555-21.74,21.493c-2.481,3.086-2.116,7.559,0.802,10.214 | |||
c9.353,8.47,12.373,21.944,7.514,33.53c-4.639,11.046-16.109,18.165-29.24,18.165c-4.261-0.137-7.296,2.723-7.762,6.597 | |||
c-1.182,10.096-1.196,20.383-0.058,30.561c0.422,3.794,4.961,6.608,8.812,6.608c11.702-0.299,22.937,6.946,27.65,18.415 | |||
c4.698,11.454,1.678,24.804-7.514,33.23c-2.875,2.641-3.24,7.055-0.817,10.126c6.244,7.953,13.409,15.19,21.259,21.508 | |||
c3.079,2.481,7.559,2.131,10.228-0.81c8.04-8.893,22.427-12.184,33.501-7.536c11.599,4.852,18.895,16.575,18.181,29.167 | |||
c-0.233,3.955,2.67,7.398,6.595,7.85c5.135,0.599,10.301,0.898,15.481,0.898c4.917,0,9.835-0.27,14.752-0.817 | |||
c3.897-0.43,6.784-3.786,6.653-7.696c-0.451-12.454,6.946-23.973,18.386-28.657c11.059-4.517,25.286-1.211,33.281,7.572 | |||
c2.657,2.89,7.047,3.239,10.142,0.848c8.039-6.304,15.349-13.534,21.74-21.494c2.48-3.079,2.13-7.559-0.803-10.213 | |||
c-9.353-8.47-12.388-21.946-7.529-33.524c4.568-10.899,15.612-18.217,27.491-18.217l1.662,0.043 | |||
c3.853,0.313,7.398-2.655,7.865-6.588C269.044,139.917,269.058,129.639,267.92,119.461z M134.595,179.491 | |||
c-24.718,0-44.824-20.106-44.824-44.824c0-24.717,20.106-44.824,44.824-44.824c24.717,0,44.823,20.107,44.823,44.824 | |||
C179.418,159.385,159.312,179.491,134.595,179.491z"/> | |||
</g> | |||
</g> | |||
</svg> |
@@ -3,6 +3,7 @@ | |||
#include "window.hpp" | |||
#include "engine.hpp" | |||
#include "asset.hpp" | |||
#include "settings.hpp" | |||
#include "global.hpp" | |||
#include "global_ui.hpp" | |||
@@ -14,6 +15,9 @@ extern void vst2_oversample_channels_set (int _numIn, int _numOut); | |||
extern void vst2_oversample_channels_get (int *_numIn, int *_numOut); | |||
extern void vst2_idle_detect_mode_set (int _mode); | |||
extern void vst2_idle_detect_mode_get (int *_mode); | |||
extern void vst2_refresh_rate_set (float _hz); | |||
extern float vst2_refresh_rate_get (void); | |||
extern void vst2_window_size_set (int _width, int _height); | |||
#endif // RACK_HOST | |||
namespace rack { | |||
@@ -320,6 +324,125 @@ struct IdleModeButton : TooltipIconButton { | |||
} | |||
}; | |||
struct settings_win_size_entry_t { | |||
int w; | |||
int h; | |||
}; | |||
static settings_win_size_entry_t loc_settings_win_sizes[] = { | |||
{ 1002, 600 }, | |||
{ 1272, 820 }, | |||
{ 1408, 850 }, | |||
{ 1588, 1100 }, | |||
{ 1902, 1100 }, | |||
{ 2500, 1980 }, | |||
{ 3000, 1980 }, | |||
}; | |||
#define NUM_SETTINGS_WIN_SIZE (sizeof(loc_settings_win_sizes) / sizeof(settings_win_size_entry_t)) | |||
struct SettingsWinSizeItem : MenuItem { | |||
const settings_win_size_entry_t *setting; | |||
void onAction(EventAction &e) override { | |||
#ifdef RACK_HOST | |||
global_ui->window.windowWidth = setting->w; | |||
global_ui->window.windowHeight = setting->h; | |||
vst2_window_size_set(setting->w, setting->h); | |||
#endif // RACK_HOST | |||
} | |||
}; | |||
struct settings_refresh_rate_entry_t { | |||
int rate; | |||
const char *caption; | |||
}; | |||
static settings_refresh_rate_entry_t loc_settings_refresh_rates[] = { | |||
{ 0, "<host fps>" }, | |||
{ 15, "15 fps" }, | |||
{ 30, "30 fps" }, | |||
{ 60, "60 fps" }, | |||
{ 75, "75 fps" }, | |||
{ 100, "100 fps" }, | |||
}; | |||
#define NUM_SETTINGS_REFRESH_RATE (sizeof(loc_settings_refresh_rates) / sizeof(settings_refresh_rate_entry_t)) | |||
struct SettingsRefreshRateItem : MenuItem { | |||
const settings_refresh_rate_entry_t *setting; | |||
void onAction(EventAction &e) override { | |||
#ifdef RACK_HOST | |||
vst2_refresh_rate_set(float(setting->rate)); | |||
#endif // RACK_HOST | |||
} | |||
}; | |||
struct SettingsVsyncItem : MenuItem { | |||
void onAction(EventAction &e) override { | |||
lglw_swap_interval_set(global_ui->window.lglw, lglw_swap_interval_get(global_ui->window.lglw) ^ 1); | |||
} | |||
}; | |||
struct SettingsSaveItem : MenuItem { | |||
void onAction(EventAction &e) override { | |||
settingsSave(assetLocal("settings.json")); | |||
} | |||
}; | |||
struct SettingsButton : TooltipIconButton { | |||
SettingsButton() { | |||
setSVG(SVG::load(assetGlobal("res/icons/settings_icon_cc.svg"))); | |||
tooltipText = "Global Settings"; | |||
} | |||
void onAction(EventAction &e) override { | |||
Menu *menu = global_ui->ui.gScene->createMenu(); | |||
menu->box.pos = getAbsoluteOffset(Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
menu->addChild(MenuLabel::create("Global Settings")); | |||
#ifdef RACK_HOST | |||
int cWinW = int(global_ui->window.windowWidth); | |||
int cWinH = int(global_ui->window.windowHeight); | |||
for(int i = 0; i < NUM_SETTINGS_WIN_SIZE; i++) | |||
{ | |||
const settings_win_size_entry_t *en = &loc_settings_win_sizes[i]; | |||
SettingsWinSizeItem *winSizeItem = new SettingsWinSizeItem(); | |||
char buf[256]; | |||
sprintf(buf, "%dx%d", en->w, en->h); | |||
winSizeItem->text = buf; | |||
winSizeItem->setting = en; | |||
winSizeItem->rightText = CHECKMARK( (cWinW == en->w) && (cWinH == en->h) ); | |||
menu->addChild(winSizeItem); | |||
} | |||
int cRate = int(vst2_refresh_rate_get()); | |||
for(int i = 0; i < NUM_SETTINGS_REFRESH_RATE; i++) | |||
{ | |||
const settings_refresh_rate_entry_t *en = &loc_settings_refresh_rates[i]; | |||
SettingsRefreshRateItem *rateItem = new SettingsRefreshRateItem(); | |||
rateItem->text = en->caption; | |||
rateItem->setting = en; | |||
rateItem->rightText = CHECKMARK( (cRate == en->rate) ); | |||
menu->addChild(rateItem); | |||
} | |||
SettingsVsyncItem *vsyncItem = new SettingsVsyncItem(); | |||
vsyncItem->text = "Vsync"; | |||
vsyncItem->rightText = CHECKMARK( (0 != lglw_swap_interval_get(global_ui->window.lglw)) ); | |||
menu->addChild(vsyncItem); | |||
SettingsSaveItem *saveItem = new SettingsSaveItem(); | |||
saveItem->text = "Save Settings (+Favourites)"; | |||
menu->addChild(saveItem); | |||
#endif // RACK_HOST | |||
} | |||
}; | |||
struct ZoomSlider : Slider { | |||
void onAction(EventAction &e) override { | |||
Slider::onAction(e); | |||
@@ -347,6 +470,7 @@ Toolbar::Toolbar() { | |||
layout->addChild(new PowerMeterButton()); | |||
layout->addChild(new RackLockButton()); | |||
layout->addChild(new IdleModeButton()); | |||
layout->addChild(new SettingsButton()); | |||
wireOpacitySlider = new Slider(); | |||
wireOpacitySlider->box.size.x = 150; | |||
@@ -9,16 +9,22 @@ | |||
#include "global_ui.hpp" | |||
#ifdef RACK_HOST | |||
extern void vst2_window_size_set (int _width, int _height); | |||
extern void vst2_refresh_rate_set (float _hz); | |||
#ifdef RACK_HOST | |||
extern float vst2_refresh_rate_get (void); | |||
extern void vst2_oversample_realtime_set (float _factor, int _quality); | |||
extern void vst2_oversample_realtime_get (float *_factor, int *_quality); | |||
extern void vst2_oversample_offline_set (float _factor, int _quality); | |||
extern void vst2_oversample_offline_get (float *_factor, int *_quality); | |||
extern void vst2_oversample_offline_check_set (int _bEnable); | |||
extern int32_t vst2_oversample_offline_check_get (void); | |||
extern void vst2_oversample_channels_set (int _numIn, int _numOut); | |||
extern void vst2_oversample_channels_get (int *_numIn, int *_numOut); | |||
extern void vst2_idle_detect_mode_fx_set (int _mode); | |||
extern int vst2_idle_detect_mode_fx_get (void); | |||
extern void vst2_idle_detect_mode_instr_set (int _mode); | |||
extern int vst2_idle_detect_mode_instr_get (void); | |||
#endif // RACK_HOST | |||
namespace rack { | |||
@@ -30,11 +36,16 @@ static json_t *settingsToJson() { | |||
// root | |||
json_t *rootJ = json_object(); | |||
#ifdef RACK_HOST | |||
// token | |||
json_t *tokenJ = json_string(global->plugin.gToken.c_str()); | |||
json_object_set_new(rootJ, "token", tokenJ); | |||
if (!windowIsMaximized()) { | |||
#if 0 | |||
if (!windowIsMaximized()) | |||
#endif | |||
{ | |||
// windowSize | |||
Vec windowSize = windowGetWindowSize(); | |||
json_t *windowSizeJ = json_pack("[f, f]", windowSize.x, windowSize.y); | |||
@@ -61,6 +72,86 @@ static json_t *settingsToJson() { | |||
json_t *zoomJ = json_real(zoom); | |||
json_object_set_new(rootJ, "zoom", zoomJ); | |||
// refresh rate (Hz) | |||
float refreshRate = vst2_refresh_rate_get(); | |||
json_t *refreshRateJ = json_integer(int(refreshRate)); | |||
json_object_set_new(rootJ, "refreshRate", refreshRateJ); | |||
// vsync | |||
int vsync = lglw_swap_interval_get(global_ui->window.lglw); | |||
json_t *vsyncJ = json_boolean(vsync); | |||
json_object_set_new(rootJ, "vsync", vsyncJ); | |||
// touchInput | |||
int touchInput = lglw_touchinput_get(global_ui->window.lglw); | |||
json_t *touchInputJ = json_boolean(touchInput); | |||
json_object_set_new(rootJ, "touchInput", touchInputJ); | |||
// touchKbd | |||
int touchKbd = b_touchkeyboard_enable; | |||
json_t *touchKbdJ = json_boolean(touchKbd); | |||
json_object_set_new(rootJ, "touchKbd", touchKbdJ); | |||
// (realtime) oversampleFactor, oversampleQuality | |||
{ | |||
float factor; | |||
int quality; | |||
vst2_oversample_realtime_get(&factor, &quality); | |||
json_t *factorJ = json_real(factor); | |||
json_object_set_new(rootJ, "oversampleFactor", factorJ); | |||
json_t *qualityJ = json_integer(quality); | |||
json_object_set_new(rootJ, "oversampleQuality", qualityJ); | |||
} | |||
// oversampleOfflineFactor, oversampleOfflineQuality | |||
{ | |||
float factor; | |||
int quality; | |||
vst2_oversample_offline_get(&factor, &quality); | |||
json_t *factorJ = json_real(factor); | |||
json_object_set_new(rootJ, "oversampleOfflineFactor", factorJ); | |||
json_t *qualityJ = json_integer(quality); | |||
json_object_set_new(rootJ, "oversampleOfflineQuality", qualityJ); | |||
} | |||
// oversample offline check (oversampleOffline) | |||
json_t *offlineJ = json_boolean(vst2_oversample_offline_check_get()); | |||
json_object_set_new(rootJ, "oversampleOffline", offlineJ); | |||
// oversample input channel limit (oversampleNumIn) | |||
// oversample output channel limit (oversampleNumOut) | |||
{ | |||
int numIn; | |||
int numOut; | |||
vst2_oversample_channels_get(&numIn, &numOut); | |||
json_t *numInJ = json_real(numIn); | |||
json_object_set_new(rootJ, "oversampleNumIn", numInJ); | |||
json_t *numOutJ = json_real(numOut); | |||
json_object_set_new(rootJ, "oversampleNumOut", numOutJ); | |||
} | |||
// idleDetectInstr | |||
{ | |||
int idleMode = vst2_idle_detect_mode_instr_get(); | |||
json_t *idleJ = json_integer(idleMode); | |||
json_object_set_new(rootJ, "idleDetectInstr", idleJ); | |||
} | |||
// idleDetectFx | |||
{ | |||
int idleMode = vst2_idle_detect_mode_fx_get(); | |||
json_t *idleJ = json_integer(idleMode); | |||
json_object_set_new(rootJ, "idleDetectFx", idleJ); | |||
} | |||
// allowCursorLock | |||
json_t *allowCursorLockJ = json_boolean(global_ui->window.gAllowCursorLock); | |||
json_object_set_new(rootJ, "allowCursorLock", allowCursorLockJ); | |||
@@ -87,6 +178,8 @@ static json_t *settingsToJson() { | |||
// checkVersion | |||
json_object_set_new(rootJ, "checkVersion", json_boolean(global_ui->app.gCheckVersion)); | |||
#endif // RACK_HOST | |||
return rootJ; | |||
} | |||
@@ -107,7 +200,9 @@ static void settingsFromJson(json_t *rootJ, bool bWindowSizeOnly) { | |||
{ | |||
global_ui->window.windowWidth = int(width); | |||
global_ui->window.windowHeight = int(height); | |||
#ifdef RACK_HOST | |||
vst2_window_size_set((int)width, (int)height); | |||
#endif // RACK_HOST | |||
return; | |||
} | |||
#else | |||
@@ -146,7 +241,9 @@ static void settingsFromJson(json_t *rootJ, bool bWindowSizeOnly) { | |||
// (note) <15: use DAW timer (effEditIdle) | |||
json_t *refreshJ = json_object_get(rootJ, "refreshRate"); | |||
if (refreshJ) { | |||
#ifdef RACK_HOST | |||
vst2_refresh_rate_set(clamp((float) json_number_value(refreshJ), 0.0f, 200.0f)); | |||
#endif // RACK_HOST | |||
} | |||
// vsync | |||
@@ -156,7 +253,7 @@ static void settingsFromJson(json_t *rootJ, bool bWindowSizeOnly) { | |||
if (vsyncJ) | |||
{ | |||
lglw_glcontext_push(global_ui->window.lglw); | |||
lglw_swap_interval(global_ui->window.lglw, json_is_true(vsyncJ)); | |||
lglw_swap_interval_set(global_ui->window.lglw, json_is_true(vsyncJ)); | |||
lglw_glcontext_pop(global_ui->window.lglw); | |||
} | |||
} | |||
@@ -18,7 +18,7 @@ | |||
/// created: 25Jun2018 | |||
/// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018 | |||
/// 26Jul2018, 04Aug2018, 05Aug2018, 06Aug2018, 07Aug2018, 09Aug2018, 11Aug2018 | |||
/// 18Aug2018, 19Aug2018 | |||
/// 18Aug2018, 19Aug2018, 05Sep2018 | |||
/// | |||
/// | |||
@@ -458,6 +458,8 @@ public: | |||
bool b_check_offline; // true=ask host if it's in offline rendering mode | |||
sUI idle_detect_mode; | |||
sUI idle_detect_mode_fx; | |||
sUI idle_detect_mode_instr; | |||
sF32 idle_input_level_threshold; | |||
sF32 idle_output_level_threshold; | |||
sF32 idle_output_sec_threshold; | |||
@@ -563,6 +565,8 @@ public: | |||
editor_rect.right = EDITWIN_X + _width; | |||
editor_rect.bottom = EDITWIN_Y + _height; | |||
(void)lglw_window_resize(rack_global_ui.window.lglw, _width, _height); | |||
} | |||
void setRefreshRate(float _hz) { | |||
@@ -570,6 +574,23 @@ public: | |||
redraw_ival_ms = 0u; | |||
else | |||
redraw_ival_ms = sUI(1000.0f / _hz); | |||
if(b_editor_open) | |||
{ | |||
lglw_timer_stop(rack_global_ui.window.lglw); | |||
if(0u != redraw_ival_ms) | |||
{ | |||
lglw_timer_start(rack_global_ui.window.lglw, redraw_ival_ms); | |||
} | |||
} | |||
} | |||
float getRefreshRate(void) { | |||
if(redraw_ival_ms > 0u) | |||
return (1000.0f / redraw_ival_ms); | |||
else | |||
return 0.0f; | |||
} | |||
void destroyResamplerStates(void) { | |||
@@ -891,6 +912,20 @@ public: | |||
idle_output_framecount = 0u; | |||
} | |||
void setIdleDetectModeFx(uint32_t _mode) { | |||
idle_detect_mode_fx = _mode; | |||
#ifdef VST2_EFFECT | |||
setIdleDetectMode(uint32_t(_mode)); | |||
#endif // VST2_EFFECT | |||
} | |||
void setIdleDetectModeInstr(uint32_t _mode) { | |||
idle_detect_mode_instr = _mode; | |||
#ifndef VST2_EFFECT | |||
setIdleDetectMode(uint32_t(_mode)); | |||
#endif // VST2_EFFECT | |||
} | |||
sUI getProgramChunk(uint8_t**_addr) { | |||
setGlobals(); | |||
vst2_set_shared_plugin_tls_globals(); | |||
@@ -1719,6 +1754,12 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, | |||
if(NULL != ptr) | |||
{ | |||
// ... | |||
printf("xxx vstrack_plugin: effEditGetRect: (%d; %d; %d; %d)\n", | |||
wrapper->editor_rect.top, | |||
wrapper->editor_rect.left, | |||
wrapper->editor_rect.bottom, | |||
wrapper->editor_rect.right | |||
); | |||
*(void**)ptr = (void*) &wrapper->editor_rect; | |||
r = 1; | |||
} | |||
@@ -1936,6 +1977,8 @@ VSTPluginWrapper::VSTPluginWrapper(audioMasterCallback vstHostCallback, | |||
b_check_offline = false; | |||
idle_detect_mode = IDLE_DETECT_NONE; | |||
idle_detect_mode_fx = IDLE_DETECT_AUDIO; | |||
idle_detect_mode_instr = IDLE_DETECT_MIDI; | |||
b_idle = false; | |||
idle_input_level_threshold = 0.00018f;//0.00007f; | |||
idle_output_level_threshold = 0.00018f;//0.00003f; | |||
@@ -1997,6 +2040,10 @@ void vst2_refresh_rate_set(float _hz) { | |||
rack::global->vst2.wrapper->setRefreshRate(_hz); | |||
} | |||
float vst2_refresh_rate_get(void) { | |||
return rack::global->vst2.wrapper->getRefreshRate(); | |||
} | |||
extern "C" void lglw_timer_cbk(lglw_t _lglw) { | |||
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)lglw_userdata_get(_lglw); | |||
wrapper->queueRedraw(); | |||
@@ -2029,6 +2076,10 @@ void vst2_oversample_offline_check_set(int _bEnable) { | |||
rack::global->vst2.wrapper->b_check_offline = (0 != _bEnable); | |||
} | |||
int32_t vst2_oversample_offline_check_get(void) { | |||
return int32_t(rack::global->vst2.wrapper->b_check_offline); | |||
} | |||
void vst2_oversample_channels_set(int _numIn, int _numOut) { | |||
rack::global->vst2.wrapper->setOversampleChannels(_numIn, _numOut); | |||
} | |||
@@ -2039,15 +2090,19 @@ void vst2_oversample_channels_get(int *_numIn, int *_numOut) { | |||
} | |||
void vst2_idle_detect_mode_fx_set(int _mode) { | |||
#ifdef VST2_EFFECT | |||
rack::global->vst2.wrapper->setIdleDetectMode(uint32_t(_mode)); | |||
#endif // VST2_EFFECT | |||
rack::global->vst2.wrapper->setIdleDetectModeFx(uint32_t(_mode)); | |||
} | |||
int vst2_idle_detect_mode_fx_get(void) { | |||
return rack::global->vst2.wrapper->idle_detect_mode_fx; | |||
} | |||
void vst2_idle_detect_mode_instr_set(int _mode) { | |||
#ifndef VST2_EFFECT | |||
rack::global->vst2.wrapper->setIdleDetectMode(uint32_t(_mode)); | |||
#endif // VST2_EFFECT | |||
rack::global->vst2.wrapper->setIdleDetectModeInstr(uint32_t(_mode)); | |||
} | |||
int vst2_idle_detect_mode_instr_get(void) { | |||
return rack::global->vst2.wrapper->idle_detect_mode_instr; | |||
} | |||
void vst2_idle_detect_mode_set(int _mode) { | |||
@@ -45,7 +45,7 @@ std::string QuantityWidget::getText() { | |||
} | |||
void QuantityWidget::onMouseLeave(EventMouseLeave &e) { | |||
revert_val = INVALID_REVERT_VAL; | |||
// // revert_val = INVALID_REVERT_VAL; | |||
} | |||
} // namespace rack |
@@ -374,7 +374,7 @@ void windowInit() { | |||
global_ui->window.lastWindowTitle = ""; | |||
lglw_glcontext_push(global_ui->window.lglw); | |||
lglw_swap_interval(global_ui->window.lglw, 1); // can be overridden via settings.json:"vsync" property | |||
lglw_swap_interval_set(global_ui->window.lglw, 1); // can be overridden via settings.json:"vsync" property | |||
lglw_mouse_callback_set (global_ui->window.lglw, &lglw_mouse_cbk); | |||
lglw_focus_callback_set (global_ui->window.lglw, &lglw_focus_cbk); | |||
@@ -0,0 +1 @@ | |||
<div>Icons made by <a href="https://www.flaticon.com/authors/egor-rumyantsev" title="Egor Rumyantsev">Egor Rumyantsev</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></div> |
@@ -0,0 +1,78 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
version="1.1" | |||
x="0px" | |||
y="0px" | |||
viewBox="-7074.5 3413.5 16 16" | |||
enable-background="new -7074.5 3413.5 24 24" | |||
xml:space="preserve" | |||
id="svg12" | |||
sodipodi:docname="settings_icon_cc.svg" | |||
width="16" | |||
height="16" | |||
inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata | |||
id="metadata18"><rdf:RDF><cc:Work | |||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs | |||
id="defs16"> | |||
</defs><sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1137" | |||
id="namedview14" | |||
showgrid="false" | |||
inkscape:zoom="22.250293" | |||
inkscape:cx="1.4996926" | |||
inkscape:cy="9.1190487" | |||
inkscape:window-x="-8" | |||
inkscape:window-y="-8" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="svg12" /><g | |||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" | |||
id="text1044" /><g | |||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" | |||
id="text1056" /><g | |||
transform="matrix(0.04483133,0,0,0.04483133,-7072.6113,3415.4306)" | |||
id="Settings" | |||
style="fill:#b4b4b4;fill-opacity:1"><g | |||
id="g4" | |||
style="fill:#b4b4b4;fill-opacity:1"><path | |||
style="clip-rule:evenodd;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd" | |||
d="M 267.92,119.461 C 259.7639,108.37353 237.60907,113.69022 232.38746,96.479699 224.2718,82.390868 233.00438,67.286235 241.3705,56.29375 237.43425,44.426372 225.91606,35.523227 215.98352,28.244359 203.37196,32.005085 190.10946,46.088799 174.769,37.92 157.82363,32.983341 158.89813,13.404545 152.74813,1.7591562 140.59107,-0.17972483 126.1677,-2.1756684 114.95288,3.357125 112.96944,17.007361 108.38383,33.860528 92.63896,37.926967 77.775408,44.414555 65.997604,30.615672 53.839531,27.462953 43.772588,34.725084 31.977464,43.546698 27.964375,55.510625 c 8.49164,11.040709 17.354156,26.326968 8.991024,40.499701 -5.867916,15.344484 -24.485634,13.358994 -35.2431959,20.053284 -1.60577119,12.17834 -4.4742822,27.30556 2.2519219,37.97214 12.880627,2.23194 28.500004,5.84589 33.341875,20.29625 8.393178,15.26924 -5.888965,28.31876 -9.629844,40.84962 7.224375,9.96863 15.9554,21.67539 27.825594,25.64263 11.099937,-8.35246 26.446117,-17.06929 40.584732,-8.98545 15.634258,5.69547 13.544408,24.27779 19.933428,35.16712 12.15272,1.92903 26.57763,3.94093 37.78909,-1.60092 1.97214,-13.65237 6.56399,-30.5044 22.31039,-34.56583 14.86512,-6.50972 26.63511,7.31696 38.79786,10.45844 10.07865,-7.24787 21.85234,-16.08992 25.88513,-28.04249 -8.48485,-11.03294 -17.36567,-26.29404 -9.02937,-40.47181 5.58844,-11.68796 18.70272,-16.89286 31.01071,-16.51756 9.97767,-7.68663 4.90088,-25.51607 5.13628,-36.80475 z m -133.325,60.03 c -26.4812,0.83488 -49.170092,-25.58413 -44.306628,-51.64133 3.22607,-26.2257 32.618568,-44.652523 57.621488,-35.988163 25.41298,7.086788 39.29929,38.784143 27.08161,62.222153 -7.20502,15.27134 -23.48006,25.59801 -40.39647,25.40734 z" | |||
id="path2" | |||
inkscape:connector-curvature="0" /></g></g></svg> |