From 17e7ace364ad065bd587a74a6c042295e33f3209 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Sun, 5 Aug 2012 20:10:33 +0100 Subject: [PATCH] Key repeat for text boxes --- src/interface/Textbox.cpp | 28 +++++++++++++++++++++++++++- src/interface/Textbox.h | 6 ++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index 4916c64bd..8444b8594 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "Config.h" #include "interface/Point.h" #include "interface/Textbox.h" @@ -16,7 +17,8 @@ Textbox::Textbox(Point position, Point size, std::string textboxText, std::strin border(true), mouseDown(false), limit(std::string::npos), - inputType(All) + inputType(All), + keyDown(0) { placeHolder = textboxPlaceholder; @@ -231,7 +233,31 @@ bool Textbox::CharacterValid(Uint16 character) return false; } +void Textbox::Tick(float dt) +{ + Label::Tick(dt); + if((keyDown || characterDown) && repeatTime <= clock()) + { + OnVKeyPress(keyDown, characterDown, false, false, false); + repeatTime = clock()+(0.03 * CLOCKS_PER_SEC); + } +} + +void Textbox::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt) +{ + keyDown = 0; + characterDown = 0; +} + void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) +{ + characterDown = character; + keyDown = key; + repeatTime = clock()+(0.3 * CLOCKS_PER_SEC); + OnVKeyPress(key, character, shift, ctrl, alt); +} + +void Textbox::OnVKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) { bool changed = false; if(ctrl && key == 'c' && !masked) diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h index 9f001391e..d9695dd0c 100644 --- a/src/interface/Textbox.h +++ b/src/interface/Textbox.h @@ -44,16 +44,22 @@ public: //Determines if the given character is valid given the input type bool CharacterValid(Uint16 character); + virtual void Tick(float dt); virtual void OnContextMenuAction(int item); virtual void OnMouseClick(int x, int y, unsigned button); virtual void OnMouseUp(int x, int y, unsigned button); virtual void OnMouseMoved(int localx, int localy, int dx, int dy); virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); + virtual void OnVKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); + virtual void OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt); virtual void Draw(const Point& screenPos); protected: ValidInput inputType; size_t limit; + int repeatTime; + int keyDown; + Uint16 characterDown; bool mouseDown; bool masked, border; int cursor, cursorPositionX, cursorPositionY;