TextInput.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <iostream>
  2. #include <utility>
  3. #include <GLFW/glfw3.h>
  4. #include "input/TextInput.h"
  5. TextInput::TextInput() : limit(256), active(false) {
  6. }
  7. void TextInput::setLimit(int limit) {
  8. TextInput::limit = limit;
  9. while(input.getLength() > limit) {
  10. input.removeBySwap(limit);
  11. }
  12. }
  13. void TextInput::reset() {
  14. input.clear();
  15. cursor = 0;
  16. }
  17. void TextInput::setActive(bool b) {
  18. active = b;
  19. }
  20. void TextInput::onKeyEvent(int key, int scancode, int action, int mods) {
  21. if(!active || action == GLFW_RELEASE) {
  22. return;
  23. }
  24. (void)scancode;
  25. (void)mods;
  26. switch(key) {
  27. case GLFW_KEY_BACKSPACE:
  28. if(input.getLength() > cursor - 1 && cursor > 0) {
  29. input.remove(cursor - 1);
  30. cursor--;
  31. }
  32. break;
  33. case GLFW_KEY_LEFT:
  34. if(cursor > 0) {
  35. cursor--;
  36. }
  37. break;
  38. case GLFW_KEY_RIGHT:
  39. if(cursor < input.getLength()) {
  40. cursor++;
  41. }
  42. break;
  43. }
  44. }
  45. void TextInput::onCharEvent(unsigned int codepoint) {
  46. if(!active || input.getLength() >= limit) {
  47. return;
  48. }
  49. input.add(codepoint);
  50. for(int i = input.getLength() - 1; i > cursor; i--) {
  51. std::swap(input[i], input[i - 1]);
  52. }
  53. cursor++;
  54. }
  55. int TextInput::getCursor() const {
  56. return cursor;
  57. }