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 <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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue