//***********************************************************************************************
//Impromptu Modular: Modules for VCV Rack by Marc Boulé
//
//See ./LICENSE.md for all licenses
//***********************************************************************************************


#include "../ImpromptuModular/src/comp/PanelTheme.hpp"

NVGcolor SCHEME_RED_IM = SCHEME_RED;
NVGcolor SCHEME_GREEN_IM = SCHEME_GREEN;



void writeThemeAndContrastAsDefault() {}

void saveThemeAndContrastAsDefault(int, float) {}

void loadThemeAndContrastFromDefault(int* panelTheme, float* panelContrast) {
	*panelTheme = rack::settings::preferDarkPanels ? 1 : 0;
	*panelContrast = panelContrastDefault;
}

bool isDark(int*) {
	return rack::settings::preferDarkPanels;
}

void readThemeAndContrastFromDefault() {}

void createPanelThemeMenu(ui::Menu*, int*, float*, SvgPanel*) {}

void PanelBaseWidget::draw(const DrawArgs& args) {
	nvgBeginPath(args.vg);
	NVGcolor baseColor;
	if (panelContrastSrc) {
		baseColor = nvgRGB(*panelContrastSrc, *panelContrastSrc, *panelContrastSrc);
	}
	else {
		baseColor = nvgRGB(panelContrastDefault, panelContrastDefault, panelContrastDefault);
	}
	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 (rack::settings::preferDarkPanels) {
		// 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);
	}
}
