Initial implementation of line changing when moving left or right to the bounds of the line length. (AKA move down if you try to move right at the end of a line, etc)

This commit is contained in:
Bobby Lucero 2024-10-14 17:38:44 -04:00
parent bbb1b3dfa9
commit a76ba3ccb7
2 changed files with 41 additions and 4 deletions

View File

@ -7,6 +7,7 @@
#include <algorithm> #include <algorithm>
#include <raylib.h> #include <raylib.h>
#include "EditorState.h" #include "EditorState.h"
#include <math.h>
#include "../../Utilities.h" #include "../../Utilities.h"
@ -63,6 +64,8 @@ EditorState::EditorState(pkpy::VM *vm, Graphics *graphics) : m_vm(vm), m_graphic
m_scrollX = 0; m_scrollX = 0;
m_scrollY = 0; m_scrollY = 0;
m_lastFurthestColumn = 0;
m_cursorBlinkTimer = 0; m_cursorBlinkTimer = 0;
m_cursorBlinkInterval = 0.5; m_cursorBlinkInterval = 0.5;
@ -259,12 +262,31 @@ void EditorState::OnExit() {
} }
void EditorState::OnKeyPressed(int key) { void EditorState::OnKeyPressed(int key) {
if(key == KEY_LEFT && m_cursorX > 0){
if (key == KEY_LEFT) {
if (m_cursorX > 0) {
m_cursorX--; m_cursorX--;
m_lastFurthestColumn = m_cursorX;
} else {
m_cursorY--;
m_cursorX = (int)m_text[m_scrollY + m_cursorY].size();
m_lastFurthestColumn = m_cursorX;
} }
if(key == KEY_RIGHT && m_cursorX < m_width - 1){
}
if (key == KEY_RIGHT) {
if (m_cursorX < std::min(m_width - 1, (int) m_text[m_scrollY + m_cursorY].size())) {
m_cursorX++; m_cursorX++;
m_lastFurthestColumn = m_cursorX;
} else {
m_cursorX = 0;
m_lastFurthestColumn = m_cursorX;
m_cursorY++;
// TODO: Implement scroll handling as it's own function so this can scroll and/or move the cursor as well. Behavior should be identical to using the down/up arrow.
} }
}
if(key == KEY_UP){ if(key == KEY_UP){
if(IsKeyDown(KEY_LEFT_SHIFT)){ if(IsKeyDown(KEY_LEFT_SHIFT)){
m_scrollY -= m_height; m_scrollY -= m_height;
@ -312,8 +334,19 @@ void EditorState::OnKeyPressed(int key) {
m_scrollY = 0; m_scrollY = 0;
} }
} }
int currentLineLength = (int)m_text[m_scrollY + m_cursorY].size();
if(currentLineLength <= m_cursorX){
m_cursorX = currentLineLength;
}else{
m_cursorX = std::min(m_lastFurthestColumn, currentLineLength);
};
m_cursorVisible = true; m_cursorVisible = true;
m_cursorBlinkTimer = 0; m_cursorBlinkTimer = 0;
@ -341,6 +374,8 @@ void EditorState::OnMousePressed(int button) {
m_cursorY = std::min((int)m_text.size() - 1, y); m_cursorY = std::min((int)m_text.size() - 1, y);
m_cursorX = std::min((int)m_text[m_cursorY + m_scrollY].size(), x); m_cursorX = std::min((int)m_text[m_cursorY + m_scrollY].size(), x);
m_lastFurthestColumn = m_cursorX;
m_cursorVisible = true; m_cursorVisible = true;

View File

@ -87,6 +87,8 @@ private:
int m_scrollX; int m_scrollX;
int m_scrollY; int m_scrollY;
int m_lastFurthestColumn;
bool m_dirty; bool m_dirty;
bool m_drawShadows; bool m_drawShadows;