Browse Source

Move event creation code to WidgetState

tags/v1.0.0
Andrew Belt 7 years ago
parent
commit
7683299447
4 changed files with 94 additions and 47 deletions
  1. +6
    -0
      include/WidgetState.hpp
  2. +1
    -0
      include/ui/Scene.hpp
  3. +79
    -0
      src/WidgetState.cpp
  4. +8
    -47
      src/window.cpp

+ 6
- 0
include/WidgetState.hpp View File

@@ -15,6 +15,12 @@ struct WidgetState {


WidgetState(); WidgetState();
void handleButton(math::Vec pos, int button, int action, int mods); void handleButton(math::Vec pos, int button, int action, int mods);
void handleHover(math::Vec pos, math::Vec mouseDelta);
void handleLeave();
void handleScroll(math::Vec pos, math::Vec scrollDelta);
void handleChar(math::Vec pos, int codepoint);
void handleKey(math::Vec pos, int key, int scancode, int action, int mods);
void handleDrop(math::Vec pos, std::vector<std::string> paths);
}; };






+ 1
- 0
include/ui/Scene.hpp View File

@@ -1,6 +1,7 @@
#pragma once #pragma once


#include "widgets.hpp" #include "widgets.hpp"
#include "logger.hpp"




namespace rack { namespace rack {


+ 79
- 0
src/WidgetState.cpp View File

@@ -57,6 +57,85 @@ void WidgetState::handleButton(math::Vec pos, int button, int action, int mods)
} }




void WidgetState::handleHover(math::Vec pos, math::Vec mouseDelta) {
// Hover event
event::Hover eHover;
eHover.pos = pos;
eHover.mouseDelta = mouseDelta;
rootWidget->handleEvent(eHover);

// Drag events
if (draggedWidget) {
event::DragMove eDragMove;
eDragMove.mouseDelta = mouseDelta;
draggedWidget->handleEvent(eDragMove);
}
}

void WidgetState::handleLeave() {
if (hoveredWidget) {
// Leave event
event::Leave eLeave;
hoveredWidget->handleEvent(eLeave);
}
hoveredWidget = NULL;
}

void WidgetState::handleScroll(math::Vec pos, math::Vec scrollDelta) {
// HoverScroll event
event::HoverScroll eHoverScroll;
eHoverScroll.pos = pos;
eHoverScroll.scrollDelta = scrollDelta;
rootWidget->handleEvent(eHoverScroll);
}

void WidgetState::handleDrop(math::Vec pos, std::vector<std::string> paths) {
// PathDrop event
event::PathDrop ePathDrop;
ePathDrop.pos = pos;
ePathDrop.paths = paths;
rootWidget->handleEvent(ePathDrop);
}

void WidgetState::handleChar(math::Vec pos, int codepoint) {
if (selectedWidget) {
// SelectText event
event::SelectText eSelectText;
eSelectText.codepoint = codepoint;
selectedWidget->handleEvent(eSelectText);
if (eSelectText.target)
return;
}

// HoverText event
event::HoverText eHoverText;
eHoverText.pos = pos;
eHoverText.codepoint = codepoint;
rootWidget->handleEvent(eHoverText);
}

void WidgetState::handleKey(math::Vec pos, int key, int scancode, int action, int mods) {
if (selectedWidget) {
event::SelectKey eSelectKey;
eSelectKey.key = key;
eSelectKey.scancode = scancode;
eSelectKey.action = action;
eSelectKey.mods = mods;
selectedWidget->handleEvent(eSelectKey);
if (eSelectKey.target)
return;
}

event::HoverKey eHoverKey;
eHoverKey.pos = pos;
eHoverKey.key = key;
eHoverKey.scancode = scancode;
eHoverKey.action = action;
eHoverKey.mods = mods;
rootWidget->handleEvent(eHoverKey);
}


// TODO Move this elsewhere // TODO Move this elsewhere
WidgetState *gWidgetState = NULL; WidgetState *gWidgetState = NULL;




+ 8
- 47
src/window.cpp View File

@@ -167,16 +167,7 @@ void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) {


gMousePos = mousePos; gMousePos = mousePos;


event::Hover eHover;
eHover.pos = mousePos;
eHover.mouseDelta = mouseDelta;
gWidgetState->rootWidget->handleEvent(eHover);

if (gWidgetState->draggedWidget) {
event::DragMove eDragMove;
eDragMove.mouseDelta = mouseDelta;
gWidgetState->draggedWidget->handleEvent(eDragMove);
}
gWidgetState->handleHover(mousePos, mouseDelta);


/* /*
if (gWidgetState->draggedWidget) { if (gWidgetState->draggedWidget) {
@@ -228,11 +219,7 @@ void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) {


void cursorEnterCallback(GLFWwindow* window, int entered) { void cursorEnterCallback(GLFWwindow* window, int entered) {
if (!entered) { if (!entered) {
if (gWidgetState->hoveredWidget) {
event::Leave eLeave;
gWidgetState->hoveredWidget->handleEvent(eLeave);
}
gWidgetState->hoveredWidget = NULL;
gWidgetState->handleLeave();
} }
} }


@@ -244,40 +231,15 @@ void scrollCallback(GLFWwindow *window, double x, double y) {
#endif #endif
scrollDelta = scrollDelta.mult(50.0); scrollDelta = scrollDelta.mult(50.0);


event::HoverScroll eHoverScroll;
eHoverScroll.scrollDelta = scrollDelta;
gWidgetState->rootWidget->handleEvent(eHoverScroll);
gWidgetState->handleScroll(gMousePos, scrollDelta);
} }


void charCallback(GLFWwindow *window, unsigned int codepoint) { void charCallback(GLFWwindow *window, unsigned int codepoint) {
if (gWidgetState->selectedWidget) {
event::SelectText eSelectText;
eSelectText.codepoint = codepoint;
gWidgetState->selectedWidget->handleEvent(eSelectText);
}
gWidgetState->handleChar(gMousePos, codepoint);
} }


void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) { void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) {
if (action == GLFW_PRESS || action == GLFW_REPEAT) {
if (gWidgetState->selectedWidget) {
event::SelectKey eSelectKey;
eSelectKey.key = key;
eSelectKey.scancode = scancode;
eSelectKey.action = action;
eSelectKey.mods = mods;
gWidgetState->selectedWidget->handleEvent(eSelectKey);
if (eSelectKey.target)
return;
}

event::HoverKey eHoverKey;
eHoverKey.key = key;
eHoverKey.scancode = scancode;
eHoverKey.action = action;
eHoverKey.mods = mods;
eHoverKey.pos = gMousePos;
gWidgetState->rootWidget->handleEvent(eHoverKey);
}
gWidgetState->handleKey(gMousePos, key, scancode, action, mods);


// Keyboard MIDI driver // Keyboard MIDI driver
if (!(mods & (GLFW_MOD_SHIFT | GLFW_MOD_CONTROL | GLFW_MOD_ALT | GLFW_MOD_SUPER))) { if (!(mods & (GLFW_MOD_SHIFT | GLFW_MOD_CONTROL | GLFW_MOD_ALT | GLFW_MOD_SUPER))) {
@@ -291,12 +253,11 @@ void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods
} }


void dropCallback(GLFWwindow *window, int count, const char **paths) { void dropCallback(GLFWwindow *window, int count, const char **paths) {
event::PathDrop ePathDrop;
ePathDrop.pos = gMousePos;
std::vector<std::string> pathsVec;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
ePathDrop.paths.push_back(paths[i]);
pathsVec.push_back(paths[i]);
} }
gWidgetState->rootWidget->handleEvent(ePathDrop);
gWidgetState->handleDrop(gMousePos, pathsVec);
} }


void errorCallback(int error, const char *description) { void errorCallback(int error, const char *description) {


Loading…
Cancel
Save