Different approach to dark ImpromptuModular
Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
7a483fca89
commit
11182ef544
3 changed files with 137 additions and 16 deletions
131
plugins/ImpromptuModularDark/PanelTheme.cpp
Normal file
131
plugins/ImpromptuModularDark/PanelTheme.cpp
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
//***********************************************************************************************
|
||||||
|
//Impromptu Modular: Modules for VCV Rack by Marc Boulé
|
||||||
|
//
|
||||||
|
//See ./LICENSE.md for all licenses
|
||||||
|
//***********************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
#include "../ImpromptuModular/src/comp/PanelTheme.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void loadThemeAndContrastFromDefault(int* panelTheme, float* panelContrast) {
|
||||||
|
*panelTheme = 1;
|
||||||
|
*panelContrast = panelContrastDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void createPanelThemeMenu(ui::Menu* menu, int* panelTheme, float* panelContrast, SvgPanel* mainPanel) {
|
||||||
|
|
||||||
|
struct PanelThemeItem : MenuItem {
|
||||||
|
int* panelTheme = NULL;
|
||||||
|
float* panelContrast = NULL;
|
||||||
|
SvgPanel* mainPanel;
|
||||||
|
|
||||||
|
Menu *createChildMenu() override {
|
||||||
|
struct PanelThemeDarkItem : MenuItem {
|
||||||
|
int* panelTheme = NULL;
|
||||||
|
SvgPanel* mainPanel;
|
||||||
|
void onAction(const event::Action &e) override {
|
||||||
|
*panelTheme ^= 0x1;
|
||||||
|
mainPanel->fb->dirty = true;
|
||||||
|
e.unconsume();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PanelContrastQuantity : Quantity {
|
||||||
|
float* panelContrast;
|
||||||
|
SvgPanel* mainPanel;
|
||||||
|
|
||||||
|
PanelContrastQuantity(float* _panelContrast, SvgPanel* _mainPanel) {
|
||||||
|
panelContrast = _panelContrast;
|
||||||
|
mainPanel = _mainPanel;
|
||||||
|
}
|
||||||
|
void setValue(float value) override {
|
||||||
|
*panelContrast = math::clamp(value, getMinValue(), getMaxValue());
|
||||||
|
mainPanel->fb->dirty = true;
|
||||||
|
}
|
||||||
|
float getValue() override {
|
||||||
|
return *panelContrast;
|
||||||
|
}
|
||||||
|
float getMinValue() override {return panelContrastMin;}
|
||||||
|
float getMaxValue() override {return panelContrastMax;}
|
||||||
|
float getDefaultValue() override {return panelContrastDefault;}
|
||||||
|
float getDisplayValue() override {return *panelContrast;}
|
||||||
|
std::string getDisplayValueString() override {
|
||||||
|
return string::f("%.1f", rescale(*panelContrast, getMinValue(), getMaxValue(), 0.0f, 100.0f));
|
||||||
|
}
|
||||||
|
void setDisplayValue(float displayValue) override {setValue(displayValue);}
|
||||||
|
std::string getLabel() override {return "Panel contrast";}
|
||||||
|
std::string getUnit() override {return "";}
|
||||||
|
};
|
||||||
|
struct PanelContrastSlider : ui::Slider {
|
||||||
|
PanelContrastSlider(float* panelContrast, SvgPanel* mainPanel) {
|
||||||
|
quantity = new PanelContrastQuantity(panelContrast, mainPanel);
|
||||||
|
}
|
||||||
|
~PanelContrastSlider() {
|
||||||
|
delete quantity;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Menu *menu = new Menu;
|
||||||
|
|
||||||
|
PanelThemeDarkItem *ptdItem = createMenuItem<PanelThemeDarkItem>("Dark", CHECKMARK(*panelTheme));
|
||||||
|
ptdItem->panelTheme = panelTheme;
|
||||||
|
ptdItem->mainPanel = mainPanel;
|
||||||
|
menu->addChild(ptdItem);
|
||||||
|
|
||||||
|
PanelContrastSlider *cSlider = new PanelContrastSlider(panelContrast, mainPanel);
|
||||||
|
cSlider->box.size.x = 200.0f;
|
||||||
|
menu->addChild(cSlider);
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
PanelThemeItem *ptItem = createMenuItem<PanelThemeItem>("Panel theme", RIGHT_ARROW);
|
||||||
|
ptItem->panelTheme = panelTheme;
|
||||||
|
ptItem->panelContrast = panelContrast;
|
||||||
|
ptItem->mainPanel = mainPanel;
|
||||||
|
menu->addChild(ptItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PanelBaseWidget::draw(const DrawArgs& args) {
|
||||||
|
nvgBeginPath(args.vg);
|
||||||
|
NVGcolor baseColor;
|
||||||
|
if (panelContrastSrc) {
|
||||||
|
baseColor = nvgRGB(*panelContrastSrc, *panelContrastSrc, *panelContrastSrc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int themeDefault;
|
||||||
|
float contrastDefault;
|
||||||
|
loadThemeAndContrastFromDefault(&themeDefault, &contrastDefault);
|
||||||
|
baseColor = nvgRGB(contrastDefault, contrastDefault, contrastDefault);
|
||||||
|
}
|
||||||
|
nvgFillColor(args.vg, baseColor);
|
||||||
|
nvgRect(args.vg, 0, 0, box.size.x, box.size.y);
|
||||||
|
nvgFill(args.vg);
|
||||||
|
TransparentWidget::draw(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InverterWidget::draw(const DrawArgs& args) {
|
||||||
|
TransparentWidget::draw(args);
|
||||||
|
if (isDark(panelThemeSrc)) {
|
||||||
|
// nvgSave(args.vg);
|
||||||
|
nvgBeginPath(args.vg);
|
||||||
|
nvgFillColor(args.vg, SCHEME_WHITE);// this is the source, the current framebuffer is the dest
|
||||||
|
nvgRect(args.vg, 0, 0, box.size.x, box.size.y);
|
||||||
|
nvgGlobalCompositeBlendFuncSeparate(args.vg,
|
||||||
|
NVG_ONE_MINUS_DST_COLOR,// srcRGB
|
||||||
|
NVG_ZERO,// dstRGB
|
||||||
|
NVG_ONE_MINUS_DST_COLOR,// srcAlpha
|
||||||
|
NVG_ONE);// dstAlpha
|
||||||
|
// blend factor: https://github.com/memononen/nanovg/blob/master/src/nanovg.h#L86
|
||||||
|
// OpenGL blend doc: https://www.khronos.org/opengl/wiki/Blending
|
||||||
|
nvgFill(args.vg);
|
||||||
|
nvgClosePath(args.vg);
|
||||||
|
// nvgRestore(args.vg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -404,7 +404,8 @@ PLUGIN_FILES += $(filter-out GrandeModular/src/plugin.cpp,$(wildcard GrandeModul
|
||||||
# ImpromptuModular
|
# ImpromptuModular
|
||||||
|
|
||||||
PLUGIN_FILES += $(wildcard ImpromptuModular/src/*.cpp)
|
PLUGIN_FILES += $(wildcard ImpromptuModular/src/*.cpp)
|
||||||
PLUGIN_FILES += $(wildcard ImpromptuModular/src/comp/*.cpp)
|
PLUGIN_FILES += $(filter-out ImpromptuModular/src/comp/PanelTheme.cpp,$(wildcard ImpromptuModular/src/comp/*.cpp))
|
||||||
|
PLUGIN_FILES += ImpromptuModularDark/PanelTheme.cpp
|
||||||
|
|
||||||
# modules/types which are present in other plugins
|
# modules/types which are present in other plugins
|
||||||
IMPROMPTUMODULAR_CUSTOM = RefreshCounter
|
IMPROMPTUMODULAR_CUSTOM = RefreshCounter
|
||||||
|
|
@ -872,27 +873,18 @@ $(BUILD_DIR)/ImpromptuModular/src/Foundr%.cpp.o: ImpromptuModular/src/Foundr%.cp
|
||||||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
|
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
|
||||||
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
|
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
|
||||||
-DpluginInstance=pluginInstance__ImpromptuModular \
|
-DpluginInstance=pluginInstance__ImpromptuModular \
|
||||||
-DStepAttributes=StepAttributesKernel
|
-DStepAttributes=StepAttributesKernel \
|
||||||
|
|
||||||
$(BUILD_DIR)/ImpromptuModular/src/comp/Components.cpp.o: ImpromptuModular/src/comp/Components.cpp
|
|
||||||
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
|
|
||||||
@echo "Compiling $<"
|
|
||||||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
|
|
||||||
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
|
|
||||||
-DpluginInstance=pluginInstance__ImpromptuModular \
|
|
||||||
-DsaveDarkAsDefault=ImpromptuModularIgnore1 \
|
|
||||||
-DloadDarkAsDefault=ImpromptuModularIgonre2
|
|
||||||
|
|
||||||
# FIXME -DsetNextCableColor=isComplete shouldn't be here
|
# FIXME -DsetNextCableColor=isComplete shouldn't be here
|
||||||
$(BUILD_DIR)/ImpromptuModular/%.cpp.o: ImpromptuModular/%.cpp
|
$(BUILD_DIR)/ImpromptuModular%.cpp.o: ImpromptuModular%.cpp
|
||||||
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
|
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
|
||||||
@echo "Compiling $<"
|
@echo "Compiling $<"
|
||||||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
|
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
|
||||||
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
|
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM),$(call custom_module_names,$(m),ImpromptuModular)) \
|
||||||
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ImpromptuModular_$(shell basename $*))) \
|
$(foreach m,$(IMPROMPTUMODULAR_CUSTOM_PER_FILE),$(call custom_per_file_names,$(m),ImpromptuModular_$(shell basename $*))) \
|
||||||
-DpluginInstance=pluginInstance__ImpromptuModular \
|
-DpluginInstance=pluginInstance__ImpromptuModular \
|
||||||
-DsetNextCableColor=isComplete \
|
-Dinit=init__ImpromptuModular \
|
||||||
-Dinit=init__ImpromptuModular
|
-DsetNextCableColor=isComplete
|
||||||
|
|
||||||
$(BUILD_DIR)/JW-Modules/%.cpp.o: JW-Modules/%.cpp
|
$(BUILD_DIR)/JW-Modules/%.cpp.o: JW-Modules/%.cpp
|
||||||
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
|
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
|
||||||
|
|
|
||||||
|
|
@ -295,8 +295,6 @@ extern Model *modelMaude_221;
|
||||||
// stuff that reads config files, we dont want that
|
// stuff that reads config files, we dont want that
|
||||||
int loadConsoleType() { return 0; }
|
int loadConsoleType() { return 0; }
|
||||||
int loadDirectOutMode() { return 0; }
|
int loadDirectOutMode() { return 0; }
|
||||||
bool loadDarkAsDefault() { return true; }
|
|
||||||
bool loadQuality() { return false; }
|
|
||||||
void saveConsoleType(int) {}
|
void saveConsoleType(int) {}
|
||||||
void saveDarkAsDefault(bool) {}
|
void saveDarkAsDefault(bool) {}
|
||||||
void saveDirectOutMode(bool) {}
|
void saveDirectOutMode(bool) {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue