@@ -1 +1 @@ | |||||
Subproject commit e66caf0f9d3266a79c513dcc73b57b6b3eb38120 | |||||
Subproject commit 952d72f925ea5e9086067d47a9d31516878fcaac |
@@ -121,12 +121,8 @@ struct Panel : TransparentWidget { | |||||
void draw(NVGcontext *vg); | void draw(NVGcontext *vg); | ||||
}; | }; | ||||
struct PanelBorder : TransparentWidget { | |||||
void draw(NVGcontext *vg); | |||||
}; | |||||
struct SVGPanel : FramebufferWidget { | struct SVGPanel : FramebufferWidget { | ||||
void addBackground(std::shared_ptr<SVG> svg); | |||||
void setBackground(std::shared_ptr<SVG> svg); | |||||
}; | }; | ||||
//////////////////// | //////////////////// | ||||
@@ -1,20 +0,0 @@ | |||||
#include "app.hpp" | |||||
namespace rack { | |||||
void PanelBorder::draw(NVGcontext *vg) { | |||||
nvgBeginPath(vg); | |||||
nvgRect(vg, 0.0, 0.0, box.size.x, box.size.y); | |||||
NVGcolor borderColor = nvgRGB(0xac, 0xac, 0xac); | |||||
// Border | |||||
nvgBeginPath(vg); | |||||
nvgRect(vg, 0.5, 0.5, box.size.x - 1, box.size.y - 1); | |||||
nvgStrokeColor(vg, borderColor); | |||||
nvgStrokeWidth(vg, 1.0); | |||||
nvgStroke(vg); | |||||
} | |||||
} // namespace rack |
@@ -4,14 +4,30 @@ | |||||
namespace rack { | namespace rack { | ||||
void SVGPanel::addBackground(std::shared_ptr<SVG> svg) { | |||||
struct PanelBorder : TransparentWidget { | |||||
void draw(NVGcontext *vg) { | |||||
nvgBeginPath(vg); | |||||
nvgRect(vg, 0.0, 0.0, box.size.x, box.size.y); | |||||
NVGcolor borderColor = nvgRGBAf(0.5, 0.5, 0.5, 0.5); | |||||
nvgBeginPath(vg); | |||||
nvgRect(vg, 0.5, 0.5, box.size.x - 1.0, box.size.y - 1.0); | |||||
nvgStrokeColor(vg, borderColor); | |||||
nvgStrokeWidth(vg, 1.0); | |||||
nvgStroke(vg); | |||||
} | |||||
}; | |||||
void SVGPanel::setBackground(std::shared_ptr<SVG> svg) { | |||||
SVGWidget *sw = new SVGWidget(); | SVGWidget *sw = new SVGWidget(); | ||||
sw->wrap(); | sw->wrap(); | ||||
sw->svg = svg; | sw->svg = svg; | ||||
addChild(sw); | addChild(sw); | ||||
PanelBorder *pb = new PanelBorder(); | PanelBorder *pb = new PanelBorder(); | ||||
sw->box.size = box.size; | |||||
pb->box.size = box.size; | |||||
addChild(pb); | addChild(pb); | ||||
} | } | ||||
@@ -3,6 +3,7 @@ | |||||
#include "gui.hpp" | #include "gui.hpp" | ||||
#include "app.hpp" | #include "app.hpp" | ||||
#include "settings.hpp" | #include "settings.hpp" | ||||
#include "../ext/osdialog/osdialog.h" | |||||
#define NANOVG_GL2_IMPLEMENTATION | #define NANOVG_GL2_IMPLEMENTATION | ||||
// #define NANOVG_GL3_IMPLEMENTATION | // #define NANOVG_GL3_IMPLEMENTATION | ||||
@@ -216,7 +217,11 @@ void guiInit() { | |||||
glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE); | glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE); | ||||
std::string title = gApplicationName + " " + gApplicationVersion; | std::string title = gApplicationName + " " + gApplicationVersion; | ||||
gWindow = glfwCreateWindow(1000, 750, title.c_str(), NULL, NULL); | gWindow = glfwCreateWindow(1000, 750, title.c_str(), NULL, NULL); | ||||
assert(gWindow); | |||||
if (!gWindow) { | |||||
osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Cannot open window with OpenGL 2.0 renderer. Does your graphics card support OpenGL 2.0? If so, are the latest drivers installed?"); | |||||
exit(1); | |||||
} | |||||
glfwMakeContextCurrent(gWindow); | glfwMakeContextCurrent(gWindow); | ||||
glfwSwapInterval(1); | glfwSwapInterval(1); | ||||
@@ -42,6 +42,7 @@ void FramebufferWidget::step() { | |||||
Vec fbSize = internal->box.size.mult(gPixelRatio * oversample); | Vec fbSize = internal->box.size.mult(gPixelRatio * oversample); | ||||
// assert(fbSize.isFinite()); | // assert(fbSize.isFinite()); | ||||
// Delete old one first to free up GPU memory | |||||
internal->setFramebuffer(NULL); | internal->setFramebuffer(NULL); | ||||
NVGLUframebuffer *fb = nvgluCreateFramebuffer(gVg, fbSize.x, fbSize.y, NVG_IMAGE_REPEATX | NVG_IMAGE_REPEATY); | NVGLUframebuffer *fb = nvgluCreateFramebuffer(gVg, fbSize.x, fbSize.y, NVG_IMAGE_REPEATX | NVG_IMAGE_REPEATY); | ||||
if (!fb) | if (!fb) | ||||