@@ -12,6 +12,7 @@ namespace app { | |||||
struct PortWidget : widget::OpaqueWidget { | struct PortWidget : widget::OpaqueWidget { | ||||
engine::Module *module = NULL; | engine::Module *module = NULL; | ||||
int portId; | int portId; | ||||
bool hovered = false; | |||||
enum Type { | enum Type { | ||||
OUTPUT, | OUTPUT, | ||||
@@ -27,6 +28,8 @@ struct PortWidget : widget::OpaqueWidget { | |||||
void draw(const widget::DrawContext &ctx) override; | void draw(const widget::DrawContext &ctx) override; | ||||
void onButton(const event::Button &e) override; | void onButton(const event::Button &e) override; | ||||
void onEnter(const event::Enter &e) override; | |||||
void onLeave(const event::Leave &e) override; | |||||
void onDragStart(const event::DragStart &e) override; | void onDragStart(const event::DragStart &e) override; | ||||
void onDragEnd(const event::DragEnd &e) override; | void onDragEnd(const event::DragEnd &e) override; | ||||
void onDragDrop(const event::DragDrop &e) override; | void onDragDrop(const event::DragDrop &e) override; | ||||
@@ -110,6 +110,7 @@ struct HoverScroll : Event, Position { | |||||
/** Occurs when a Widget begins consuming the Hover event. | /** Occurs when a Widget begins consuming the Hover event. | ||||
Must consume to set the widget as hovered. | |||||
*/ | */ | ||||
struct Enter : Event { | struct Enter : Event { | ||||
}; | }; | ||||
@@ -122,6 +123,7 @@ struct Leave : Event { | |||||
/** Occurs when a Widget begins consuming the Button press event. | /** Occurs when a Widget begins consuming the Button press event. | ||||
Must consume to set the widget as selected. | |||||
*/ | */ | ||||
struct Select : Event { | struct Select : Event { | ||||
}; | }; | ||||
@@ -141,12 +143,14 @@ struct SelectKey : Event, Key { | |||||
/** Occurs when text is typed while a Widget is selected. | /** Occurs when text is typed while a Widget is selected. | ||||
If consumed, a HoverText event will not be triggered. | |||||
*/ | */ | ||||
struct SelectText : Event, Text { | struct SelectText : Event, Text { | ||||
}; | }; | ||||
/** Occurs when a Widget begins being dragged. | /** Occurs when a Widget begins being dragged. | ||||
Must consume to set the widget as dragged. | |||||
*/ | */ | ||||
struct DragStart : Event { | struct DragStart : Event { | ||||
}; | }; | ||||
@@ -177,6 +181,7 @@ struct DragHover : Event, Position { | |||||
}; | }; | ||||
/** Occurs when the mouse enters a Widget while dragging. | /** Occurs when the mouse enters a Widget while dragging. | ||||
Must consume to set the widget as drag-hovered. | |||||
*/ | */ | ||||
struct DragEnter : Event { | struct DragEnter : Event { | ||||
/** The dragged widget */ | /** The dragged widget */ | ||||
@@ -21,6 +21,7 @@ struct MenuItem : MenuEntry { | |||||
void draw(const widget::DrawContext &ctx) override; | void draw(const widget::DrawContext &ctx) override; | ||||
void step() override; | void step() override; | ||||
void onEnter(const event::Enter &e) override; | void onEnter(const event::Enter &e) override; | ||||
void onDragStart(const event::DragStart &e) override; | |||||
void onDragDrop(const event::DragDrop &e) override; | void onDragDrop(const event::DragDrop &e) override; | ||||
void doAction(); | void doAction(); | ||||
virtual Menu *createChildMenu() {return NULL;} | virtual Menu *createChildMenu() {return NULL;} | ||||
@@ -25,6 +25,7 @@ struct TextField : widget::OpaqueWidget { | |||||
void onButton(const event::Button &e) override; | void onButton(const event::Button &e) override; | ||||
void onHover(const event::Hover &e) override; | void onHover(const event::Hover &e) override; | ||||
void onEnter(const event::Enter &e) override; | void onEnter(const event::Enter &e) override; | ||||
void onSelect(const event::Select &e) override; | |||||
void onSelectText(const event::SelectText &e) override; | void onSelectText(const event::SelectText &e) override; | ||||
void onSelectKey(const event::SelectKey &e) override; | void onSelectKey(const event::SelectKey &e) override; | ||||
@@ -30,19 +30,24 @@ struct ModuleResizeHandle : Widget { | |||||
bool right = false; | bool right = false; | ||||
float dragX; | float dragX; | ||||
Rect originalBox; | Rect originalBox; | ||||
ModuleResizeHandle() { | ModuleResizeHandle() { | ||||
box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT); | box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT); | ||||
} | } | ||||
void onButton(const event::Button &e) override { | void onButton(const event::Button &e) override { | ||||
if (e.button == GLFW_MOUSE_BUTTON_LEFT) { | if (e.button == GLFW_MOUSE_BUTTON_LEFT) { | ||||
e.consume(this); | e.consume(this); | ||||
} | } | ||||
} | } | ||||
void onDragStart(const event::DragStart &e) override { | void onDragStart(const event::DragStart &e) override { | ||||
dragX = APP->scene->rackWidget->mousePos.x; | dragX = APP->scene->rackWidget->mousePos.x; | ||||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | ||||
originalBox = m->box; | originalBox = m->box; | ||||
e.consume(this); | |||||
} | } | ||||
void onDragMove(const event::DragMove &e) override { | void onDragMove(const event::DragMove &e) override { | ||||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | ||||
@@ -64,6 +69,7 @@ struct ModuleResizeHandle : Widget { | |||||
} | } | ||||
APP->scene->rackWidget->requestModuleBox(m, newBox); | APP->scene->rackWidget->requestModuleBox(m, newBox); | ||||
} | } | ||||
void draw(const DrawContext &ctx) override { | void draw(const DrawContext &ctx) override { | ||||
for (float x = 5.0; x <= 10.0; x += 5.0) { | for (float x = 5.0; x <= 10.0; x += 5.0) { | ||||
nvgBeginPath(ctx.vg); | nvgBeginPath(ctx.vg); | ||||
@@ -88,10 +88,8 @@ struct CcChoice : LedDisplayChoice { | |||||
} | } | ||||
void step() override { | void step() override { | ||||
if (!module) { | |||||
text = ""; | |||||
if (!module) | |||||
return; | return; | ||||
} | |||||
if (module->learningId == id) { | if (module->learningId == id) { | ||||
if (0 <= focusCc) | if (0 <= focusCc) | ||||
text = string::f("%d", focusCc); | text = string::f("%d", focusCc); | ||||
@@ -103,25 +101,27 @@ struct CcChoice : LedDisplayChoice { | |||||
text = string::f("%d", module->learnedCcs[id]); | text = string::f("%d", module->learnedCcs[id]); | ||||
color.a = 1.0; | color.a = 1.0; | ||||
if (APP->event->selectedWidget == this) | if (APP->event->selectedWidget == this) | ||||
APP->event->selectedWidget = NULL; | |||||
APP->event->setSelected(NULL); | |||||
} | } | ||||
} | } | ||||
void onSelect(const event::Select &e) override { | void onSelect(const event::Select &e) override { | ||||
e.consume(this); | |||||
if (!module) | if (!module) | ||||
return; | return; | ||||
module->learningId = id; | module->learningId = id; | ||||
focusCc = -1; | focusCc = -1; | ||||
e.consume(this); | |||||
} | } | ||||
void onDeselect(const event::Deselect &e) override { | void onDeselect(const event::Deselect &e) override { | ||||
if (!module) | if (!module) | ||||
return; | return; | ||||
if (0 <= focusCc && focusCc < 128) { | |||||
module->learnedCcs[id] = focusCc; | |||||
if (module->learningId == id) { | |||||
if (0 <= focusCc && focusCc < 128) { | |||||
module->learnedCcs[id] = focusCc; | |||||
} | |||||
module->learningId = -1; | |||||
} | } | ||||
module->learningId = -1; | |||||
} | } | ||||
void onSelectText(const event::SelectText &e) override { | void onSelectText(const event::SelectText &e) override { | ||||
@@ -180,20 +180,22 @@ struct NoteChoice : LedDisplayChoice { | |||||
color.a = 1.0; | color.a = 1.0; | ||||
if (APP->event->selectedWidget == this) | if (APP->event->selectedWidget == this) | ||||
APP->event->selectedWidget = NULL; | |||||
APP->event->setSelected(NULL); | |||||
} | } | ||||
} | } | ||||
void onSelect(const event::Select &e) override { | void onSelect(const event::Select &e) override { | ||||
e.consume(this); | |||||
if (!module) | if (!module) | ||||
return; | return; | ||||
module->learningId = id; | module->learningId = id; | ||||
e.consume(this); | |||||
} | } | ||||
void onDeselect(const event::Deselect &e) override { | void onDeselect(const event::Deselect &e) override { | ||||
if (!module) | if (!module) | ||||
return; | return; | ||||
module->learningId = -1; | |||||
if (module->learningId == id) { | |||||
module->learningId = -1; | |||||
} | |||||
} | } | ||||
}; | }; |
@@ -216,8 +216,7 @@ void CableWidget::draw(const widget::DrawContext &ctx) { | |||||
} | } | ||||
else { | else { | ||||
// Draw opaque if mouse is hovering over a connected port | // Draw opaque if mouse is hovering over a connected port | ||||
PortWidget *hoveredPort = dynamic_cast<PortWidget*>(APP->event->hoveredWidget); | |||||
if (hoveredPort && (hoveredPort == outputPort || hoveredPort == inputPort)) | |||||
if (outputPort->hovered || inputPort->hovered) | |||||
opacity = 1.0; | opacity = 1.0; | ||||
} | } | ||||
@@ -36,6 +36,7 @@ void Knob::onDragStart(const event::DragStart &e) { | |||||
} | } | ||||
APP->window->cursorLock(); | APP->window->cursorLock(); | ||||
e.consume(this); | |||||
} | } | ||||
void Knob::onDragEnd(const event::DragEnd &e) { | void Knob::onDragEnd(const event::DragEnd &e) { | ||||
@@ -62,6 +62,7 @@ struct ModuleBox : widget::OpaqueWidget { | |||||
widget::Widget *previewWidget = NULL; | widget::Widget *previewWidget = NULL; | ||||
/** Number of frames since draw() has been called */ | /** Number of frames since draw() has been called */ | ||||
int visibleFrames = 0; | int visibleFrames = 0; | ||||
bool selected = false; | |||||
void setModel(plugin::Model *model) { | void setModel(plugin::Model *model) { | ||||
this->model = model; | this->model = model; | ||||
@@ -125,7 +126,7 @@ struct ModuleBox : widget::OpaqueWidget { | |||||
} | } | ||||
widget::OpaqueWidget::draw(ctx); | widget::OpaqueWidget::draw(ctx); | ||||
if (APP->event->hoveredWidget == this) { | |||||
if (selected) { | |||||
nvgBeginPath(ctx.vg); | nvgBeginPath(ctx.vg); | ||||
nvgRect(ctx.vg, 0.0, 0.0, box.size.x, box.size.y); | nvgRect(ctx.vg, 0.0, 0.0, box.size.x, box.size.y); | ||||
nvgFillColor(ctx.vg, nvgRGBAf(1, 1, 1, 0.25)); | nvgFillColor(ctx.vg, nvgRGBAf(1, 1, 1, 0.25)); | ||||
@@ -134,6 +135,15 @@ struct ModuleBox : widget::OpaqueWidget { | |||||
} | } | ||||
void onButton(const event::Button &e) override; | void onButton(const event::Button &e) override; | ||||
void onEnter(const event::Enter &e) override { | |||||
e.consume(this); | |||||
selected = true; | |||||
} | |||||
void onLeave(const event::Leave &e) override { | |||||
selected = false; | |||||
} | |||||
}; | }; | ||||
@@ -193,13 +193,15 @@ void ModuleWidget::drawShadow(const widget::DrawContext &ctx) { | |||||
void ModuleWidget::onHover(const event::Hover &e) { | void ModuleWidget::onHover(const event::Hover &e) { | ||||
widget::OpaqueWidget::onHover(e); | widget::OpaqueWidget::onHover(e); | ||||
// Instead of checking key-down events, delete the module even if key-repeat hasn't fired yet and the cursor is hovering over the widget. | |||||
if ((glfwGetKey(APP->window->win, GLFW_KEY_DELETE) == GLFW_PRESS | |||||
|| glfwGetKey(APP->window->win, GLFW_KEY_BACKSPACE) == GLFW_PRESS) | |||||
&& (APP->window->getMods() & WINDOW_MOD_MASK) == 0) { | |||||
removeAction(); | |||||
e.consume(NULL); | |||||
return; | |||||
if (!APP->event->selectedWidget) { | |||||
// Instead of checking key-down events, delete the module even if key-repeat hasn't fired yet and the cursor is hovering over the widget. | |||||
if ((glfwGetKey(APP->window->win, GLFW_KEY_DELETE) == GLFW_PRESS | |||||
|| glfwGetKey(APP->window->win, GLFW_KEY_BACKSPACE) == GLFW_PRESS) | |||||
&& (APP->window->getMods() & WINDOW_MOD_MASK) == 0) { | |||||
removeAction(); | |||||
e.consume(NULL); | |||||
return; | |||||
} | |||||
} | } | ||||
} | } | ||||
@@ -268,6 +270,7 @@ void ModuleWidget::onHoverKey(const event::HoverKey &e) { | |||||
void ModuleWidget::onDragStart(const event::DragStart &e) { | void ModuleWidget::onDragStart(const event::DragStart &e) { | ||||
oldPos = box.pos; | oldPos = box.pos; | ||||
dragPos = APP->scene->rackWidget->mousePos.minus(box.pos); | dragPos = APP->scene->rackWidget->mousePos.minus(box.pos); | ||||
e.consume(this); | |||||
} | } | ||||
void ModuleWidget::onDragEnd(const event::DragEnd &e) { | void ModuleWidget::onDragEnd(const event::DragEnd &e) { | ||||
@@ -167,6 +167,7 @@ void ParamWidget::onEnter(const event::Enter &e) { | |||||
paramTooltip->paramWidget = this; | paramTooltip->paramWidget = this; | ||||
APP->scene->addChild(paramTooltip); | APP->scene->addChild(paramTooltip); | ||||
tooltip = paramTooltip; | tooltip = paramTooltip; | ||||
e.consume(this); | |||||
} | } | ||||
} | } | ||||
@@ -78,6 +78,15 @@ void PortWidget::onButton(const event::Button &e) { | |||||
e.consume(this); | e.consume(this); | ||||
} | } | ||||
void PortWidget::onEnter(const event::Enter &e) { | |||||
hovered = true; | |||||
e.consume(this); | |||||
} | |||||
void PortWidget::onLeave(const event::Leave &e) { | |||||
hovered = false; | |||||
} | |||||
void PortWidget::onDragStart(const event::DragStart &e) { | void PortWidget::onDragStart(const event::DragStart &e) { | ||||
CableWidget *cw = NULL; | CableWidget *cw = NULL; | ||||
if (type == OUTPUT && (APP->window->getMods() & WINDOW_MOD_MASK) == WINDOW_MOD_CTRL) { | if (type == OUTPUT && (APP->window->getMods() & WINDOW_MOD_MASK) == WINDOW_MOD_CTRL) { | ||||
@@ -110,6 +119,7 @@ void PortWidget::onDragStart(const event::DragStart &e) { | |||||
cw->setInput(this); | cw->setInput(this); | ||||
} | } | ||||
APP->scene->rackWidget->setIncompleteCable(cw); | APP->scene->rackWidget->setIncompleteCable(cw); | ||||
e.consume(this); | |||||
} | } | ||||
void PortWidget::onDragEnd(const event::DragEnd &e) { | void PortWidget::onDragEnd(const event::DragEnd &e) { | ||||
@@ -158,6 +168,7 @@ void PortWidget::onDragEnter(const event::DragEnter &e) { | |||||
else | else | ||||
cw->hoveredInputPort = this; | cw->hoveredInputPort = this; | ||||
} | } | ||||
e.consume(this); | |||||
} | } | ||||
void PortWidget::onDragLeave(const event::DragLeave &e) { | void PortWidget::onDragLeave(const event::DragLeave &e) { | ||||
@@ -28,6 +28,7 @@ void SVGButton::onDragStart(const event::DragStart &e) { | |||||
sw->setSVG(frames[1]); | sw->setSVG(frames[1]); | ||||
fb->dirty = true; | fb->dirty = true; | ||||
} | } | ||||
e.consume(this); | |||||
} | } | ||||
void SVGButton::onDragEnd(const event::DragEnd &e) { | void SVGButton::onDragEnd(const event::DragEnd &e) { | ||||
@@ -55,6 +55,7 @@ void Switch::onDragStart(const event::DragStart &e) { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
e.consume(this); | |||||
} | } | ||||
void Switch::onDragEnd(const event::DragEnd &e) { | void Switch::onDragEnd(const event::DragEnd &e) { | ||||
@@ -415,9 +415,10 @@ struct AccountEmailField : ui::TextField { | |||||
if (e.action == GLFW_PRESS && e.key == GLFW_KEY_TAB) { | if (e.action == GLFW_PRESS && e.key == GLFW_KEY_TAB) { | ||||
APP->event->selectedWidget = passwordField; | APP->event->selectedWidget = passwordField; | ||||
e.consume(this); | e.consume(this); | ||||
return; | |||||
} | } | ||||
ui::TextField::onSelectKey(e); | |||||
if (!e.getConsumed()) | |||||
ui::TextField::onSelectKey(e); | |||||
} | } | ||||
}; | }; | ||||
@@ -431,9 +432,10 @@ struct AccountPasswordField : ui::PasswordField { | |||||
if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { | if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { | ||||
logInItem->doAction(); | logInItem->doAction(); | ||||
e.consume(this); | e.consume(this); | ||||
return; | |||||
} | } | ||||
ui::PasswordField::onSelectKey(e); | |||||
if (!e.getConsumed()) | |||||
ui::PasswordField::onSelectKey(e); | |||||
} | } | ||||
}; | }; | ||||
@@ -14,14 +14,16 @@ void State::setHovered(widget::Widget *w) { | |||||
// event::Leave | // event::Leave | ||||
event::Leave eLeave; | event::Leave eLeave; | ||||
hoveredWidget->onLeave(eLeave); | hoveredWidget->onLeave(eLeave); | ||||
hoveredWidget = NULL; | |||||
} | } | ||||
hoveredWidget = w; | |||||
if (hoveredWidget) { | |||||
if (w) { | |||||
// event::Enter | // event::Enter | ||||
event::Context eEnterContext; | |||||
event::Enter eEnter; | event::Enter eEnter; | ||||
hoveredWidget->onEnter(eEnter); | |||||
eEnter.context = &eEnterContext; | |||||
w->onEnter(eEnter); | |||||
hoveredWidget = eEnterContext.consumed; | |||||
} | } | ||||
} | } | ||||
@@ -33,14 +35,16 @@ void State::setDragged(widget::Widget *w) { | |||||
// event::DragEnd | // event::DragEnd | ||||
event::DragEnd eDragEnd; | event::DragEnd eDragEnd; | ||||
draggedWidget->onDragEnd(eDragEnd); | draggedWidget->onDragEnd(eDragEnd); | ||||
draggedWidget = NULL; | |||||
} | } | ||||
draggedWidget = w; | |||||
if (draggedWidget) { | |||||
if (w) { | |||||
// event::DragStart | // event::DragStart | ||||
event::Context eDragStartContext; | |||||
event::DragStart eDragStart; | event::DragStart eDragStart; | ||||
draggedWidget->onDragStart(eDragStart); | |||||
eDragStart.context = &eDragStartContext; | |||||
w->onDragStart(eDragStart); | |||||
draggedWidget = eDragStartContext.consumed; | |||||
} | } | ||||
} | } | ||||
@@ -53,15 +57,17 @@ void State::setDragHovered(widget::Widget *w) { | |||||
event::DragLeave eDragLeave; | event::DragLeave eDragLeave; | ||||
eDragLeave.origin = draggedWidget; | eDragLeave.origin = draggedWidget; | ||||
dragHoveredWidget->onDragLeave(eDragLeave); | dragHoveredWidget->onDragLeave(eDragLeave); | ||||
dragHoveredWidget = NULL; | |||||
} | } | ||||
dragHoveredWidget = w; | |||||
if (dragHoveredWidget) { | |||||
if (w) { | |||||
// event::DragEnter | // event::DragEnter | ||||
event::Context eDragEnterContext; | |||||
event::DragEnter eDragEnter; | event::DragEnter eDragEnter; | ||||
eDragEnter.context = &eDragEnterContext; | |||||
eDragEnter.origin = draggedWidget; | eDragEnter.origin = draggedWidget; | ||||
dragHoveredWidget->onDragEnter(eDragEnter); | |||||
w->onDragEnter(eDragEnter); | |||||
dragHoveredWidget = eDragEnterContext.consumed; | |||||
} | } | ||||
} | } | ||||
@@ -73,14 +79,16 @@ void State::setSelected(widget::Widget *w) { | |||||
// event::Deselect | // event::Deselect | ||||
event::Deselect eDeselect; | event::Deselect eDeselect; | ||||
selectedWidget->onDeselect(eDeselect); | selectedWidget->onDeselect(eDeselect); | ||||
selectedWidget = NULL; | |||||
} | } | ||||
selectedWidget = w; | |||||
if (selectedWidget) { | |||||
if (w) { | |||||
// event::Select | // event::Select | ||||
event::Context eSelectContext; | |||||
event::Select eSelect; | event::Select eSelect; | ||||
selectedWidget->onSelect(eSelect); | |||||
eSelect.context = &eSelectContext; | |||||
w->onSelect(eSelect); | |||||
selectedWidget = eSelectContext.consumed; | |||||
} | } | ||||
} | } | ||||
@@ -20,6 +20,7 @@ void Button::draw(const widget::DrawContext &ctx) { | |||||
void Button::onEnter(const event::Enter &e) { | void Button::onEnter(const event::Enter &e) { | ||||
state = BND_HOVER; | state = BND_HOVER; | ||||
e.consume(this); | |||||
} | } | ||||
void Button::onLeave(const event::Leave &e) { | void Button::onLeave(const event::Leave &e) { | ||||
@@ -30,6 +31,7 @@ void Button::onDragStart(const event::DragStart &e) { | |||||
state = BND_ACTIVE; | state = BND_ACTIVE; | ||||
if (quantity) | if (quantity) | ||||
quantity->setMax(); | quantity->setMax(); | ||||
e.consume(this); | |||||
} | } | ||||
void Button::onDragEnd(const event::DragEnd &e) { | void Button::onDragEnd(const event::DragEnd &e) { | ||||
@@ -38,6 +38,7 @@ void MenuItem::step() { | |||||
} | } | ||||
void MenuItem::onEnter(const event::Enter &e) { | void MenuItem::onEnter(const event::Enter &e) { | ||||
e.consume(this); | |||||
Menu *parentMenu = dynamic_cast<Menu*>(parent); | Menu *parentMenu = dynamic_cast<Menu*>(parent); | ||||
if (!parentMenu) | if (!parentMenu) | ||||
return; | return; | ||||
@@ -53,6 +54,10 @@ void MenuItem::onEnter(const event::Enter &e) { | |||||
parentMenu->setChildMenu(childMenu); | parentMenu->setChildMenu(childMenu); | ||||
} | } | ||||
void MenuItem::onDragStart(const event::DragStart &e) { | |||||
e.consume(this); | |||||
} | |||||
void MenuItem::onDragDrop(const event::DragDrop &e) { | void MenuItem::onDragDrop(const event::DragDrop &e) { | ||||
if (e.origin != this) | if (e.origin != this) | ||||
return; | return; | ||||
@@ -24,6 +24,7 @@ void RadioButton::draw(const widget::DrawContext &ctx) { | |||||
void RadioButton::onEnter(const event::Enter &e) { | void RadioButton::onEnter(const event::Enter &e) { | ||||
if (state != BND_ACTIVE) | if (state != BND_ACTIVE) | ||||
state = BND_HOVER; | state = BND_HOVER; | ||||
e.consume(this); | |||||
} | } | ||||
void RadioButton::onLeave(const event::Leave &e) { | void RadioButton::onLeave(const event::Leave &e) { | ||||
@@ -22,6 +22,7 @@ void ScrollBar::draw(const widget::DrawContext &ctx) { | |||||
void ScrollBar::onDragStart(const event::DragStart &e) { | void ScrollBar::onDragStart(const event::DragStart &e) { | ||||
state = BND_ACTIVE; | state = BND_ACTIVE; | ||||
APP->window->cursorLock(); | APP->window->cursorLock(); | ||||
e.consume(this); | |||||
} | } | ||||
void ScrollBar::onDragMove(const event::DragMove &e) { | void ScrollBar::onDragMove(const event::DragMove &e) { | ||||
@@ -26,6 +26,7 @@ void Slider::draw(const widget::DrawContext &ctx) { | |||||
void Slider::onDragStart(const event::DragStart &e) { | void Slider::onDragStart(const event::DragStart &e) { | ||||
state = BND_ACTIVE; | state = BND_ACTIVE; | ||||
APP->window->cursorLock(); | APP->window->cursorLock(); | ||||
e.consume(this); | |||||
} | } | ||||
void Slider::onDragMove(const event::DragMove &e) { | void Slider::onDragMove(const event::DragMove &e) { | ||||
@@ -51,6 +51,10 @@ void TextField::onEnter(const event::Enter &e) { | |||||
e.consume(this); | e.consume(this); | ||||
} | } | ||||
void TextField::onSelect(const event::Select &e) { | |||||
e.consume(this); | |||||
} | |||||
void TextField::onSelectText(const event::SelectText &e) { | void TextField::onSelectText(const event::SelectText &e) { | ||||
if (e.codepoint < 128) { | if (e.codepoint < 128) { | ||||
std::string newText(1, (char) e.codepoint); | std::string newText(1, (char) e.codepoint); | ||||
@@ -120,14 +120,6 @@ void Widget::draw(const DrawContext &ctx) { | |||||
child->draw(childCtx); | child->draw(childCtx); | ||||
// Draw red hitboxes | |||||
// if (APP->event->hoveredWidget == child) { | |||||
// nvgBeginPath(ctx.vg); | |||||
// nvgRect(ctx.vg, 0, 0, child->box.size.x, child->box.size.y); | |||||
// nvgFillColor(ctx.vg, nvgRGBAf(1, 0, 0, 0.5)); | |||||
// nvgFill(ctx.vg); | |||||
// } | |||||
nvgRestore(ctx.vg); | nvgRestore(ctx.vg); | ||||
} | } | ||||
} | } | ||||