|
|
@@ -30,6 +30,13 @@ |
|
|
|
#include <ui/MenuSeparator.hpp> |
|
|
|
#include <window/Window.hpp> |
|
|
|
|
|
|
|
#ifdef DISTRHO_OS_WASM |
|
|
|
#include <ui/Button.hpp> |
|
|
|
#include <ui/Label.hpp> |
|
|
|
#include <ui/MenuOverlay.hpp> |
|
|
|
#include <ui/SequentialLayout.hpp> |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef NDEBUG |
|
|
|
# undef DEBUG |
|
|
|
#endif |
|
|
@@ -88,6 +95,89 @@ void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
#ifdef DISTRHO_OS_WASM |
|
|
|
struct WasmWelcomeDialog : rack::widget::OpaqueWidget |
|
|
|
{ |
|
|
|
static const constexpr float margin = 10; |
|
|
|
static const constexpr float buttonWidth = 100; |
|
|
|
|
|
|
|
WasmWelcomeDialog() |
|
|
|
{ |
|
|
|
using rack::ui::Button; |
|
|
|
using rack::ui::Label; |
|
|
|
using rack::ui::MenuOverlay; |
|
|
|
using rack::ui::SequentialLayout; |
|
|
|
|
|
|
|
box.size = rack::math::Vec(550, 280); |
|
|
|
|
|
|
|
SequentialLayout* const layout = new SequentialLayout; |
|
|
|
layout->box.pos = rack::math::Vec(0, 0); |
|
|
|
layout->box.size = box.size; |
|
|
|
layout->orientation = SequentialLayout::VERTICAL_ORIENTATION; |
|
|
|
layout->margin = rack::math::Vec(margin, margin); |
|
|
|
layout->spacing = rack::math::Vec(margin, margin); |
|
|
|
layout->wrap = false; |
|
|
|
addChild(layout); |
|
|
|
|
|
|
|
SequentialLayout* const contentLayout = new SequentialLayout; |
|
|
|
contentLayout->spacing = rack::math::Vec(margin, margin); |
|
|
|
layout->addChild(contentLayout); |
|
|
|
|
|
|
|
SequentialLayout* const buttonLayout = new SequentialLayout; |
|
|
|
buttonLayout->alignment = SequentialLayout::CENTER_ALIGNMENT; |
|
|
|
buttonLayout->box.size = box.size; |
|
|
|
buttonLayout->spacing = rack::math::Vec(margin, margin); |
|
|
|
layout->addChild(buttonLayout); |
|
|
|
|
|
|
|
Label* const label = new Label; |
|
|
|
label->box.size.x = box.size.x - 2*margin; |
|
|
|
label->box.size.y = box.size.y - 2*margin - 40; |
|
|
|
label->fontSize = 20; |
|
|
|
label->text = "" |
|
|
|
"Welcome!\n" |
|
|
|
"This is a special web-assembly version of Cardinal, " |
|
|
|
"allowing you to enjoy eurorack-style modules directly in your browser.\n" |
|
|
|
"\n" |
|
|
|
"This is still very much a work in progress, " |
|
|
|
"minor issues and occasional crashes are expected.\n" |
|
|
|
"\n" |
|
|
|
"Proceed with caution and have fun!"; |
|
|
|
contentLayout->addChild(label); |
|
|
|
|
|
|
|
struct AsyncDismissButton : Button { |
|
|
|
WasmWelcomeDialog* dialog; |
|
|
|
void onAction(const ActionEvent& e) override { |
|
|
|
dialog->getParent()->requestDelete(); |
|
|
|
} |
|
|
|
}; |
|
|
|
AsyncDismissButton* const dismissButton = new AsyncDismissButton; |
|
|
|
dismissButton->box.size.x = buttonWidth; |
|
|
|
dismissButton->text = "Dismiss"; |
|
|
|
dismissButton->dialog = this; |
|
|
|
buttonLayout->addChild(dismissButton); |
|
|
|
|
|
|
|
MenuOverlay* const overlay = new MenuOverlay; |
|
|
|
overlay->bgColor = nvgRGBAf(0, 0, 0, 0.33); |
|
|
|
overlay->addChild(this); |
|
|
|
APP->scene->addChild(overlay); |
|
|
|
} |
|
|
|
|
|
|
|
void step() override |
|
|
|
{ |
|
|
|
OpaqueWidget::step(); |
|
|
|
box.pos = parent->box.size.minus(box.size).div(2).round(); |
|
|
|
} |
|
|
|
|
|
|
|
void draw(const DrawArgs& args) override |
|
|
|
{ |
|
|
|
bndMenuBackground(args.vg, 0.0, 0.0, box.size.x, box.size.y, 0); |
|
|
|
Widget::draw(args); |
|
|
|
} |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
class CardinalUI : public CardinalBaseUI, |
|
|
|
public WindowParametersCallback |
|
|
|
{ |
|
|
@@ -183,14 +273,7 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef DISTRHO_OS_WASM |
|
|
|
asyncDialog::create("Welcome!\n" |
|
|
|
"This is a special web-assembly version of Cardinal, " |
|
|
|
"allowing you to enjoy eurorack-style modules directly in your browser.\n" |
|
|
|
"\n" |
|
|
|
"This is still very much a work in progress, " |
|
|
|
"minor issues and occasional crashes are expected.\n" |
|
|
|
"\n" |
|
|
|
"Proceed with caution and have fun!"); |
|
|
|
new WasmWelcomeDialog(); |
|
|
|
#endif |
|
|
|
|
|
|
|
context->window->step(); |
|
|
|