Custom welcome message for wasm
Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
4c326f5f39
commit
b6522a0b66
1 changed files with 91 additions and 8 deletions
|
|
@ -30,6 +30,13 @@
|
||||||
#include <ui/MenuSeparator.hpp>
|
#include <ui/MenuSeparator.hpp>
|
||||||
#include <window/Window.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
|
#ifdef NDEBUG
|
||||||
# undef DEBUG
|
# undef DEBUG
|
||||||
#endif
|
#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,
|
class CardinalUI : public CardinalBaseUI,
|
||||||
public WindowParametersCallback
|
public WindowParametersCallback
|
||||||
{
|
{
|
||||||
|
|
@ -183,14 +273,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DISTRHO_OS_WASM
|
#ifdef DISTRHO_OS_WASM
|
||||||
asyncDialog::create("Welcome!\n"
|
new WasmWelcomeDialog();
|
||||||
"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!");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
context->window->step();
|
context->window->step();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue