mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-30 19:29:52 +02:00
fix textbox key repeat issue, fix numpad issue (in two ways)
This commit is contained in:
@@ -443,9 +443,16 @@ float currentWidth, currentHeight;
|
|||||||
|
|
||||||
void EventProcess(SDL_Event event)
|
void EventProcess(SDL_Event event)
|
||||||
{
|
{
|
||||||
if(event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
|
if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
|
||||||
if(!(event.key.keysym.mod&KEY_MOD_NUM))
|
if (!(event.key.keysym.mod&KEY_MOD_NUM))
|
||||||
event.key.keysym.sym = MapNumpad(event.key.keysym.sym);
|
{
|
||||||
|
SDLKey newKey = MapNumpad(event.key.keysym.sym);
|
||||||
|
if (newKey != event.key.keysym.sym)
|
||||||
|
{
|
||||||
|
event.key.keysym.sym = newKey;
|
||||||
|
event.key.keysym.unicode = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
switch (event.type)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
@@ -462,7 +469,7 @@ void EventProcess(SDL_Event event)
|
|||||||
engine->onMouseMove(event.motion.x*inputScale, event.motion.y*inputScale);
|
engine->onMouseMove(event.motion.x*inputScale, event.motion.y*inputScale);
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
if(event.button.button == SDL_BUTTON_WHEELUP)
|
if (event.button.button == SDL_BUTTON_WHEELUP)
|
||||||
{
|
{
|
||||||
engine->onMouseWheel(event.motion.x*inputScale, event.motion.y*inputScale, 1);
|
engine->onMouseWheel(event.motion.x*inputScale, event.motion.y*inputScale, 1);
|
||||||
}
|
}
|
||||||
@@ -476,7 +483,7 @@ void EventProcess(SDL_Event event)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
if(event.button.button != SDL_BUTTON_WHEELUP && event.button.button != SDL_BUTTON_WHEELDOWN)
|
if (event.button.button != SDL_BUTTON_WHEELUP && event.button.button != SDL_BUTTON_WHEELDOWN)
|
||||||
engine->onMouseUnclick(event.motion.x*inputScale, event.motion.y*inputScale, event.button.button);
|
engine->onMouseUnclick(event.motion.x*inputScale, event.motion.y*inputScale, event.button.button);
|
||||||
break;
|
break;
|
||||||
#ifdef OGLI
|
#ifdef OGLI
|
||||||
|
@@ -302,8 +302,11 @@ void Textbox::Tick(float dt)
|
|||||||
|
|
||||||
void Textbox::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
void Textbox::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
||||||
{
|
{
|
||||||
keyDown = 0;
|
if (keyDown == key)
|
||||||
characterDown = 0;
|
{
|
||||||
|
keyDown = 0;
|
||||||
|
characterDown = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
||||||
@@ -408,36 +411,38 @@ void Textbox::OnVKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
|||||||
}
|
}
|
||||||
ClearSelection();
|
ClearSelection();
|
||||||
break;
|
break;
|
||||||
}
|
default:
|
||||||
if(CharacterValid(character) && !ReadOnly)
|
if(CharacterValid(character) && !ReadOnly)
|
||||||
{
|
|
||||||
if(HasSelection())
|
|
||||||
{
|
{
|
||||||
if(getLowerSelectionBound() < 0 || getHigherSelectionBound() > backingText.length())
|
if(HasSelection())
|
||||||
return;
|
{
|
||||||
backingText.erase(backingText.begin()+getLowerSelectionBound(), backingText.begin()+getHigherSelectionBound());
|
if(getLowerSelectionBound() < 0 || getHigherSelectionBound() > backingText.length())
|
||||||
cursor = getLowerSelectionBound();
|
return;
|
||||||
}
|
backingText.erase(backingText.begin()+getLowerSelectionBound(), backingText.begin()+getHigherSelectionBound());
|
||||||
|
cursor = getLowerSelectionBound();
|
||||||
|
}
|
||||||
|
|
||||||
int regionWidth = Size.X;
|
int regionWidth = Size.X;
|
||||||
if(Appearance.icon)
|
if(Appearance.icon)
|
||||||
regionWidth -= 13;
|
regionWidth -= 13;
|
||||||
regionWidth -= Appearance.Margin.Left;
|
regionWidth -= Appearance.Margin.Left;
|
||||||
regionWidth -= Appearance.Margin.Right;
|
regionWidth -= Appearance.Margin.Right;
|
||||||
if((limit==std::string::npos || backingText.length() < limit) && (Graphics::textwidth((char*)std::string(backingText+char(character)).c_str()) <= regionWidth || multiline || limit!=std::string::npos))
|
if((limit==std::string::npos || backingText.length() < limit) && (Graphics::textwidth((char*)std::string(backingText+char(character)).c_str()) <= regionWidth || multiline || limit!=std::string::npos))
|
||||||
{
|
|
||||||
if(cursor == backingText.length())
|
|
||||||
{
|
{
|
||||||
backingText += character;
|
if(cursor == backingText.length())
|
||||||
|
{
|
||||||
|
backingText += character;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
backingText.insert(cursor, 1, (char)character);
|
||||||
|
}
|
||||||
|
cursor++;
|
||||||
}
|
}
|
||||||
else
|
changed = true;
|
||||||
{
|
ClearSelection();
|
||||||
backingText.insert(cursor, 1, (char)character);
|
|
||||||
}
|
|
||||||
cursor++;
|
|
||||||
}
|
}
|
||||||
changed = true;
|
break;
|
||||||
ClearSelection();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(std::out_of_range &e)
|
catch(std::out_of_range &e)
|
||||||
|
Reference in New Issue
Block a user