#include #include #include #include namespace rack { namespace app { void LedDisplay::draw(const DrawArgs& args) { nvgBeginPath(args.vg); nvgRoundedRect(args.vg, 0, 0, box.size.x, box.size.y, 5.0); nvgFillColor(args.vg, nvgRGB(0x00, 0x00, 0x00)); nvgFill(args.vg); nvgScissor(args.vg, RECT_ARGS(args.clipBox)); Widget::draw(args); nvgResetScissor(args.vg); } LedDisplaySeparator::LedDisplaySeparator() { box.size = math::Vec(); } void LedDisplaySeparator::draw(const DrawArgs& args) { nvgBeginPath(args.vg); nvgMoveTo(args.vg, 0, 0); nvgLineTo(args.vg, box.size.x, box.size.y); nvgStrokeWidth(args.vg, 1.0); nvgStrokeColor(args.vg, nvgRGB(0x33, 0x33, 0x33)); nvgStroke(args.vg); } LedDisplayChoice::LedDisplayChoice() { box.size = mm2px(math::Vec(0, 28.0 / 3)); font = APP->window->loadFont(asset::system("res/fonts/ShareTechMono-Regular.ttf")); color = nvgRGB(0xff, 0xd7, 0x14); bgColor = nvgRGBAf(0, 0, 0, 0); textOffset = math::Vec(10, 18); } void LedDisplayChoice::draw(const DrawArgs& args) { nvgScissor(args.vg, RECT_ARGS(args.clipBox)); if (bgColor.a > 0.0) { nvgBeginPath(args.vg); nvgRect(args.vg, 0, 0, box.size.x, box.size.y); nvgFillColor(args.vg, bgColor); nvgFill(args.vg); } if (font->handle >= 0) { nvgFillColor(args.vg, color); nvgFontFaceId(args.vg, font->handle); nvgTextLetterSpacing(args.vg, 0.0); nvgFontSize(args.vg, 12); nvgText(args.vg, textOffset.x, textOffset.y, text.c_str(), NULL); } nvgResetScissor(args.vg); } void LedDisplayChoice::onButton(const event::Button& e) { OpaqueWidget::onButton(e); if (e.action == GLFW_PRESS && (e.button == GLFW_MOUSE_BUTTON_LEFT || e.button == GLFW_MOUSE_BUTTON_RIGHT)) { event::Action eAction; onAction(eAction); e.consume(this); } } LedDisplayTextField::LedDisplayTextField() { font = APP->window->loadFont(asset::system("res/fonts/ShareTechMono-Regular.ttf")); color = nvgRGB(0xff, 0xd7, 0x14); textOffset = math::Vec(5, 5); } void LedDisplayTextField::draw(const DrawArgs& args) { nvgScissor(args.vg, RECT_ARGS(args.clipBox)); // Background nvgBeginPath(args.vg); nvgRoundedRect(args.vg, 0, 0, box.size.x, box.size.y, 5.0); nvgFillColor(args.vg, nvgRGB(0x00, 0x00, 0x00)); nvgFill(args.vg); // Text if (font->handle >= 0) { bndSetFont(font->handle); NVGcolor highlightColor = color; highlightColor.a = 0.5; int begin = std::min(cursor, selection); int end = (this == APP->event->selectedWidget) ? std::max(cursor, selection) : -1; bndIconLabelCaret(args.vg, textOffset.x, textOffset.y, box.size.x - 2 * textOffset.x, box.size.y - 2 * textOffset.y, -1, color, 12, text.c_str(), highlightColor, begin, end); bndSetFont(APP->window->uiFont->handle); } nvgResetScissor(args.vg); } int LedDisplayTextField::getTextPosition(math::Vec mousePos) { bndSetFont(font->handle); int textPos = bndIconLabelTextPosition(APP->window->vg, textOffset.x, textOffset.y, box.size.x - 2 * textOffset.x, box.size.y - 2 * textOffset.y, -1, 12, text.c_str(), mousePos.x, mousePos.y); bndSetFont(APP->window->uiFont->handle); return textPos; } } // namespace app } // namespace rack