ラインエディタでカーソル移動が可能になった
This commit is contained in:
@@ -1052,12 +1052,14 @@ class PetitComputer
|
|||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
return;
|
return;
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
|
synchronized (buttonLock)
|
||||||
{
|
{
|
||||||
auto key = event.key.keysym.sym;
|
auto key = event.key.keysym.sym;
|
||||||
button &= ~buttonTable[event.key.keysym.scancode];
|
button &= ~buttonTable[event.key.keysym.scancode];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
|
synchronized (buttonLock)
|
||||||
{
|
{
|
||||||
auto key = event.key.keysym.sym;
|
auto key = event.key.keysym.sym;
|
||||||
button |= buttonTable[event.key.keysym.scancode];
|
button |= buttonTable[event.key.keysym.scancode];
|
||||||
@@ -1134,10 +1136,12 @@ class PetitComputer
|
|||||||
if(currentProject.length) printConsole("[", currentProject, "]");
|
if(currentProject.length) printConsole("[", currentProject, "]");
|
||||||
printConsole("OK\n");
|
printConsole("OK\n");
|
||||||
}
|
}
|
||||||
|
Object buttonLock;
|
||||||
Slot[] slot;
|
Slot[] slot;
|
||||||
bool isRunningDirectMode = false;
|
bool isRunningDirectMode = false;
|
||||||
void run(bool nodirectmode = false, string inputfile = "")
|
void run(bool nodirectmode = false, string inputfile = "")
|
||||||
{
|
{
|
||||||
|
buttonLock = new Object();
|
||||||
slot = new Slot[5];
|
slot = new Slot[5];
|
||||||
keybuffer = new Key[128];
|
keybuffer = new Key[128];
|
||||||
init();
|
init();
|
||||||
@@ -1433,12 +1437,41 @@ class PetitComputer
|
|||||||
showCursor = true;
|
showCursor = true;
|
||||||
int oldCSRX = this.CSRX;
|
int oldCSRX = this.CSRX;
|
||||||
int oldCSRY = this.CSRY;
|
int oldCSRY = this.CSRY;
|
||||||
|
int pos;
|
||||||
|
void left()
|
||||||
|
{
|
||||||
|
pos--;
|
||||||
|
CSRX--;
|
||||||
|
}
|
||||||
|
void right()
|
||||||
|
{
|
||||||
|
CSRX++;
|
||||||
|
}
|
||||||
while(!quit)
|
while(!quit)
|
||||||
{
|
{
|
||||||
auto oldpos = keybufferpos;
|
auto oldpos = keybufferpos;
|
||||||
while(oldpos == keybufferpos && !quit)
|
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 kbp = keybufferpos;
|
||||||
auto len = kbp - oldpos;
|
auto len = kbp - oldpos;
|
||||||
@@ -1454,16 +1487,27 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
wchar key = key1.key;
|
wchar key = key1.key;
|
||||||
wstring ks;
|
wstring ks;
|
||||||
|
wstring obf = buffer;
|
||||||
if(key1.op == KeyOp.KEY)
|
if(key1.op == KeyOp.KEY)
|
||||||
{
|
{
|
||||||
if(key == 8)
|
if(key == 8)
|
||||||
{
|
{
|
||||||
k = key;
|
k = key;
|
||||||
if(!buffer.length) continue;
|
if(!buffer.length) continue;
|
||||||
buffer = buffer[0..$ - 1];
|
left();
|
||||||
CSRX--;
|
auto odcsrx = CSRX;
|
||||||
printConsoleString(" ");
|
auto odcsry = CSRY;
|
||||||
CSRX--;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
if(key == '\r')
|
if(key == '\r')
|
||||||
@@ -1485,7 +1529,17 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
printConsole(ks);
|
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();
|
clearKeyBuffer();
|
||||||
if(k == '\r')
|
if(k == '\r')
|
||||||
|
|||||||
Reference in New Issue
Block a user