1
0

ラインエディタでカーソル移動が可能になった

This commit is contained in:
otya128
2016-09-04 14:33:06 +09:00
parent 25894bd009
commit 5b4160f1b7

View File

@@ -1052,12 +1052,14 @@ class PetitComputer
case SDL_QUIT:
return;
case SDL_KEYUP:
synchronized (buttonLock)
{
auto key = event.key.keysym.sym;
button &= ~buttonTable[event.key.keysym.scancode];
}
break;
case SDL_KEYDOWN:
synchronized (buttonLock)
{
auto key = event.key.keysym.sym;
button |= buttonTable[event.key.keysym.scancode];
@@ -1134,10 +1136,12 @@ class PetitComputer
if(currentProject.length) printConsole("[", currentProject, "]");
printConsole("OK\n");
}
Object buttonLock;
Slot[] slot;
bool isRunningDirectMode = false;
void run(bool nodirectmode = false, string inputfile = "")
{
buttonLock = new Object();
slot = new Slot[5];
keybuffer = new Key[128];
init();
@@ -1433,12 +1437,41 @@ class PetitComputer
showCursor = true;
int oldCSRX = this.CSRX;
int oldCSRY = this.CSRY;
int pos;
void left()
{
pos--;
CSRX--;
}
void right()
{
CSRX++;
}
while(!quit)
{
auto oldpos = keybufferpos;
while(oldpos == keybufferpos && !quit)
{
SDL_Delay(8);//適当 ストレスを感じないくらい
Button old;
synchronized(buttonLock)
{
old = button;
}
SDL_Delay(16);//適当 ストレスを感じないくらい
Button button;
synchronized(buttonLock)
{
button = this.button;
}
button = button ^ old & button;
if (button & Button.LEFT)
{
left();
}
if (button & Button.RIGHT)
{
right();
}
}
auto kbp = keybufferpos;
auto len = kbp - oldpos;
@@ -1454,16 +1487,27 @@ class PetitComputer
{
wchar key = key1.key;
wstring ks;
wstring obf = buffer;
if(key1.op == KeyOp.KEY)
{
if(key == 8)
{
k = key;
if(!buffer.length) continue;
buffer = buffer[0..$ - 1];
CSRX--;
printConsoleString(" ");
CSRX--;
left();
auto odcsrx = CSRX;
auto odcsry = CSRY;
buffer = (pos ? buffer[0..pos] : "");
auto ocsrx = CSRX;
auto ocsry = CSRY;
if (obf.length > pos + 1)
{
buffer ~= obf[pos + 1..$];
printConsole(obf[pos + 1..$]);
}
printConsole(" ");
CSRX = odcsrx;
CSRY = odcsry;
continue;
}
if(key == '\r')
@@ -1485,7 +1529,17 @@ class PetitComputer
}
}
printConsole(ks);
buffer ~= ks;
buffer = (pos ? buffer[0..pos] : "") ~ ks;
auto ocsrx = CSRX;
auto ocsry = CSRY;
if (obf.length > pos)
{
buffer ~= obf[pos..$];
printConsole(obf[pos..$]);
}
CSRX = ocsrx;
CSRY = ocsry;
pos += ks.length;
}
clearKeyBuffer();
if(k == '\r')