Sync CardinalModuleWidget::onButton with Rack
This commit is contained in:
parent
f16b18aa64
commit
4ccd6abc16
1 changed files with 56 additions and 27 deletions
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* DISTRHO Cardinal Plugin
|
||||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com>
|
||||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@ -37,6 +37,7 @@
|
|||
#include <asset.hpp>
|
||||
#include <context.hpp>
|
||||
#include <helpers.hpp>
|
||||
#include <settings.hpp>
|
||||
#include <system.hpp>
|
||||
|
||||
namespace rack {
|
||||
|
@ -299,37 +300,65 @@ static void CardinalModuleWidget__saveSelectionDialog(RackWidget* const w)
|
|||
|
||||
void CardinalModuleWidget::onButton(const ButtonEvent& e)
|
||||
{
|
||||
bool selected = APP->scene->rack->isSelected(this);
|
||||
const bool selected = APP->scene->rack->isSelected(this);
|
||||
|
||||
if (selected) {
|
||||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_RIGHT) {
|
||||
ui::Menu* menu = createMenu();
|
||||
patchUtils::appendSelectionContextMenu(menu);
|
||||
}
|
||||
|
||||
e.consume(this);
|
||||
}
|
||||
|
||||
OpaqueWidget::onButton(e);
|
||||
|
||||
if (e.getTarget() == this) {
|
||||
// Set starting drag position
|
||||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_LEFT) {
|
||||
internal->dragOffset = e.pos;
|
||||
}
|
||||
// Toggle selection on Shift-click
|
||||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_LEFT && (e.mods & RACK_MOD_MASK) == GLFW_MOD_SHIFT) {
|
||||
APP->scene->rack->select(this, !selected);
|
||||
}
|
||||
}
|
||||
|
||||
if (!e.isConsumed() && !selected) {
|
||||
// Open context menu on right-click
|
||||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_RIGHT) {
|
||||
CardinalModuleWidget__createContextMenu(this, model, module);
|
||||
if (e.button == GLFW_MOUSE_BUTTON_RIGHT) {
|
||||
if (e.action == GLFW_PRESS) {
|
||||
ui::Menu* menu = createMenu();
|
||||
patchUtils::appendSelectionContextMenu(menu);
|
||||
}
|
||||
e.consume(this);
|
||||
}
|
||||
|
||||
if (e.button == GLFW_MOUSE_BUTTON_LEFT) {
|
||||
if (e.action == GLFW_PRESS) {
|
||||
// Toggle selection on Shift-click
|
||||
if ((e.mods & RACK_MOD_MASK) == GLFW_MOD_SHIFT) {
|
||||
APP->scene->rack->select(this, false);
|
||||
e.consume(NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
internal->dragOffset = e.pos;
|
||||
}
|
||||
|
||||
e.consume(this);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Dispatch event to children
|
||||
Widget::onButton(e);
|
||||
e.stopPropagating();
|
||||
if (e.isConsumed())
|
||||
return;
|
||||
|
||||
if (e.button == GLFW_MOUSE_BUTTON_LEFT) {
|
||||
if (e.action == GLFW_PRESS) {
|
||||
// Toggle selection on Shift-click
|
||||
if ((e.mods & RACK_MOD_MASK) == GLFW_MOD_SHIFT) {
|
||||
APP->scene->rack->select(this, true);
|
||||
e.consume(NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
// If module positions are locked, don't consume left-click
|
||||
if (settings::lockModules) {
|
||||
return;
|
||||
}
|
||||
|
||||
internal->dragOffset = e.pos;
|
||||
}
|
||||
e.consume(this);
|
||||
}
|
||||
|
||||
// Open context menu on right-click
|
||||
if (e.button == GLFW_MOUSE_BUTTON_RIGHT && e.action == GLFW_PRESS) {
|
||||
CardinalModuleWidget__createContextMenu(this, model, module);
|
||||
e.consume(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue