Skip to content

Commit

Permalink
fix textbox key repeat issue, fix numpad issue (in two ways)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacob1 committed Mar 11, 2014
1 parent 3f65b47 commit 7ce9907
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 31 deletions.
17 changes: 12 additions & 5 deletions src/PowderToySDL.cpp
Expand Up @@ -443,9 +443,16 @@ float currentWidth, currentHeight;

void EventProcess(SDL_Event event)
{
if(event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
if(!(event.key.keysym.mod&KEY_MOD_NUM))
event.key.keysym.sym = MapNumpad(event.key.keysym.sym);
if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
if (!(event.key.keysym.mod&KEY_MOD_NUM))
{
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)
{
case SDL_QUIT:
Expand All @@ -462,7 +469,7 @@ void EventProcess(SDL_Event event)
engine->onMouseMove(event.motion.x*inputScale, event.motion.y*inputScale);
break;
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);
}
Expand All @@ -476,7 +483,7 @@ void EventProcess(SDL_Event event)
}
break;
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);
break;
#ifdef OGLI
Expand Down
57 changes: 31 additions & 26 deletions src/gui/interface/Textbox.cpp
Expand Up @@ -302,8 +302,11 @@ void Textbox::Tick(float dt)

void Textbox::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
{
keyDown = 0;
characterDown = 0;
if (keyDown == key)
{
keyDown = 0;
characterDown = 0;
}
}

void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
Expand Down Expand Up @@ -408,36 +411,38 @@ void Textbox::OnVKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
}
ClearSelection();
break;
}
if(CharacterValid(character) && !ReadOnly)
{
if(HasSelection())
{
if(getLowerSelectionBound() < 0 || getHigherSelectionBound() > backingText.length())
return;
backingText.erase(backingText.begin()+getLowerSelectionBound(), backingText.begin()+getHigherSelectionBound());
cursor = getLowerSelectionBound();
}

int regionWidth = Size.X;
if(Appearance.icon)
regionWidth -= 13;
regionWidth -= Appearance.Margin.Left;
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))
default:
if(CharacterValid(character) && !ReadOnly)
{
if(cursor == backingText.length())
if(HasSelection())
{
backingText += character;
if(getLowerSelectionBound() < 0 || getHigherSelectionBound() > backingText.length())
return;
backingText.erase(backingText.begin()+getLowerSelectionBound(), backingText.begin()+getHigherSelectionBound());
cursor = getLowerSelectionBound();
}
else

int regionWidth = Size.X;
if(Appearance.icon)
regionWidth -= 13;
regionWidth -= Appearance.Margin.Left;
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))
{
backingText.insert(cursor, 1, (char)character);
if(cursor == backingText.length())
{
backingText += character;
}
else
{
backingText.insert(cursor, 1, (char)character);
}
cursor++;
}
cursor++;
changed = true;
ClearSelection();
}
changed = true;
ClearSelection();
break;
}
}
catch(std::out_of_range &e)
Expand Down

0 comments on commit 7ce9907

Please sign in to comment.