@@ -7,6 +7,14 @@ | |||||
namespace rack { | namespace rack { | ||||
#ifdef ARCH_MAC | |||||
#define MOD_KEY_NAME "Cmd" | |||||
#else | |||||
#define MOD_KEY_NAME "Ctrl" | |||||
#endif | |||||
extern GLFWwindow *gWindow; | extern GLFWwindow *gWindow; | ||||
extern NVGcontext *gVg; | extern NVGcontext *gVg; | ||||
extern std::shared_ptr<Font> gGuiFont; | extern std::shared_ptr<Font> gGuiFont; | ||||
@@ -264,10 +264,11 @@ struct Menu : OpaqueWidget { | |||||
struct MenuEntry : OpaqueWidget { | struct MenuEntry : OpaqueWidget { | ||||
std::string text; | std::string text; | ||||
std::string rightText; | |||||
MenuEntry() { | MenuEntry() { | ||||
box.size = Vec(0, BND_WIDGET_HEIGHT); | box.size = Vec(0, BND_WIDGET_HEIGHT); | ||||
} | } | ||||
float computeMinWidth(NVGcontext *vg); | |||||
virtual float computeMinWidth(NVGcontext *vg); | |||||
}; | }; | ||||
struct MenuLabel : MenuEntry { | struct MenuLabel : MenuEntry { | ||||
@@ -277,6 +278,7 @@ struct MenuLabel : MenuEntry { | |||||
struct MenuItem : MenuEntry { | struct MenuItem : MenuEntry { | ||||
BNDwidgetState state = BND_DEFAULT; | BNDwidgetState state = BND_DEFAULT; | ||||
float computeMinWidth(NVGcontext *vg); | |||||
void draw(NVGcontext *vg); | void draw(NVGcontext *vg); | ||||
void onMouseEnter(); | void onMouseEnter(); | ||||
@@ -176,7 +176,7 @@ Widget *ModuleWidget::onHoverKey(Vec pos, int key) { | |||||
gRackWidget->cloneModule(this); | gRackWidget->cloneModule(this); | ||||
break; | break; | ||||
} | } | ||||
return NULL; | |||||
return this; | |||||
} | } | ||||
void ModuleWidget::onDragStart() { | void ModuleWidget::onDragStart() { | ||||
@@ -237,11 +237,13 @@ void ModuleWidget::onMouseDown(int button) { | |||||
InitializeMenuItem *resetItem = new InitializeMenuItem(); | InitializeMenuItem *resetItem = new InitializeMenuItem(); | ||||
resetItem->text = "Initialize"; | resetItem->text = "Initialize"; | ||||
resetItem->rightText = MOD_KEY_NAME "+I"; | |||||
resetItem->moduleWidget = this; | resetItem->moduleWidget = this; | ||||
menu->pushChild(resetItem); | menu->pushChild(resetItem); | ||||
RandomizeMenuItem *randomizeItem = new RandomizeMenuItem(); | RandomizeMenuItem *randomizeItem = new RandomizeMenuItem(); | ||||
randomizeItem->text = "Randomize"; | randomizeItem->text = "Randomize"; | ||||
randomizeItem->rightText = MOD_KEY_NAME "+R"; | |||||
randomizeItem->moduleWidget = this; | randomizeItem->moduleWidget = this; | ||||
menu->pushChild(randomizeItem); | menu->pushChild(randomizeItem); | ||||
@@ -252,11 +254,13 @@ void ModuleWidget::onMouseDown(int button) { | |||||
CloneMenuItem *cloneItem = new CloneMenuItem(); | CloneMenuItem *cloneItem = new CloneMenuItem(); | ||||
cloneItem->text = "Duplicate"; | cloneItem->text = "Duplicate"; | ||||
cloneItem->rightText = MOD_KEY_NAME "+D"; | |||||
cloneItem->moduleWidget = this; | cloneItem->moduleWidget = this; | ||||
menu->pushChild(cloneItem); | menu->pushChild(cloneItem); | ||||
DeleteMenuItem *deleteItem = new DeleteMenuItem(); | DeleteMenuItem *deleteItem = new DeleteMenuItem(); | ||||
deleteItem->text = "Delete"; | deleteItem->text = "Delete"; | ||||
deleteItem->rightText = "Backspace/Delete"; | |||||
deleteItem->moduleWidget = this; | deleteItem->moduleWidget = this; | ||||
menu->pushChild(deleteItem); | menu->pushChild(deleteItem); | ||||
} | } | ||||
@@ -337,7 +337,8 @@ void RackWidget::onMouseDown(int button) { | |||||
for (Plugin *plugin : gPlugins) { | for (Plugin *plugin : gPlugins) { | ||||
for (Model *model : plugin->models) { | for (Model *model : plugin->models) { | ||||
AddModuleMenuItem *item = new AddModuleMenuItem(); | AddModuleMenuItem *item = new AddModuleMenuItem(); | ||||
item->text = model->plugin->name + ": " + model->name; | |||||
item->text = model->name; | |||||
item->rightText = model->plugin->name; | |||||
item->model = model; | item->model = model; | ||||
item->modulePos = modulePos; | item->modulePos = modulePos; | ||||
menu->pushChild(item); | menu->pushChild(item); | ||||
@@ -3,6 +3,7 @@ | |||||
namespace rack { | namespace rack { | ||||
float MenuEntry::computeMinWidth(NVGcontext *vg) { | float MenuEntry::computeMinWidth(NVGcontext *vg) { | ||||
return bndLabelWidth(vg, -1, text.c_str()); | return bndLabelWidth(vg, -1, text.c_str()); | ||||
} | } | ||||
@@ -3,8 +3,21 @@ | |||||
namespace rack { | namespace rack { | ||||
#define RIGHT_PADDING 10.0 | |||||
#define BND_LABEL_FONT_SIZE 13 | |||||
float MenuItem::computeMinWidth(NVGcontext *vg) { | |||||
return MenuEntry::computeMinWidth(vg) + RIGHT_PADDING + bndLabelWidth(vg, -1, rightText.c_str()); | |||||
} | |||||
void MenuItem::draw(NVGcontext *vg) { | void MenuItem::draw(NVGcontext *vg) { | ||||
bndMenuItem(vg, 0.0, 0.0, box.size.x, box.size.y, state, -1, text.c_str()); | bndMenuItem(vg, 0.0, 0.0, box.size.x, box.size.y, state, -1, text.c_str()); | ||||
float x = box.size.x - bndLabelWidth(vg, -1, rightText.c_str()); | |||||
NVGcolor rightColor = (state == BND_DEFAULT) ? bndGetTheme()->menuTheme.textColor : bndGetTheme()->menuTheme.textSelectedColor; | |||||
bndIconLabelValue(vg, x, 0.0, box.size.x, box.size.y, -1, | |||||
rightColor, BND_LEFT, BND_LABEL_FONT_SIZE, rightText.c_str(), NULL); | |||||
} | } | ||||
void MenuItem::onMouseEnter() { | void MenuItem::onMouseEnter() { | ||||
@@ -3,6 +3,7 @@ | |||||
namespace rack { | namespace rack { | ||||
void MenuLabel::draw(NVGcontext *vg) { | void MenuLabel::draw(NVGcontext *vg) { | ||||
bndMenuLabel(vg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str()); | bndMenuLabel(vg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str()); | ||||
} | } | ||||