(svn r24519) -Codechange [FS#5203]: Refactor character removal code of text edit

This commit is contained in:
zuu 2012-09-10 18:42:34 +00:00
parent ae28432e62
commit bacad1478a
2 changed files with 27 additions and 9 deletions

View File

@ -27,11 +27,27 @@ bool GetClipboardContents(char *buffer, size_t buff_len);
int _caret_timer; int _caret_timer;
/* Delete a character at the caret position in a text buf. /**
* If backspace is set, delete the character before the caret, * Checks if it is possible to delete a character.
* else delete the character after it. */ * @param backspace if set, delete the character before the caret,
* otherwise, delete the character after it.
* @return true if a character can be deleted in the given direction.
*/
bool Textbuf::CanDelChar(bool backspace)
{
return backspace ? this->caretpos != 0 : this->caretpos < this->bytes - 1;
}
/**
* Delete a character at the caret position in a text buf.
* @param backspace if set, delete the character before the caret,
* else delete the character after it.
* @warning You should ensure Textbuf::CanDelChar returns true before calling this function.
*/
void Textbuf::DelChar(bool backspace) void Textbuf::DelChar(bool backspace)
{ {
assert(this->CanDelChar(backspace));
WChar c; WChar c;
char *s = this->buf + this->caretpos; char *s = this->buf + this->caretpos;
@ -60,12 +76,13 @@ void Textbuf::DelChar(bool backspace)
*/ */
bool Textbuf::DeleteChar(int delmode) bool Textbuf::DeleteChar(int delmode)
{ {
if (delmode == WKC_BACKSPACE && this->caretpos != 0) { if (delmode == WKC_BACKSPACE || delmode == WKC_DELETE) {
this->DelChar(true); bool backspace = delmode == WKC_BACKSPACE;
return true; if (CanDelChar(backspace)) {
} else if (delmode == WKC_DELETE && this->caretpos < this->bytes - 1) { this->DelChar(backspace);
this->DelChar(false); return true;
return true; }
return false;
} }
return false; return false;

View File

@ -39,6 +39,7 @@ struct Textbuf {
void UpdateSize(); void UpdateSize();
private: private:
bool CanDelChar(bool backspace);
void DelChar(bool backspace); void DelChar(bool backspace);
bool CanMoveCaretLeft(); bool CanMoveCaretLeft();
WChar MoveCaretLeft(); WChar MoveCaretLeft();