Remove gcn::TextField::mSelectEndOffset

Instead compute mCaretPosition - mSelectStart where needed.
This simplifies the code nicely.
This commit is contained in:
kon 2010-05-16 10:54:46 +00:00
parent f55a2b0ffa
commit faabe3a5f8
2 changed files with 15 additions and 50 deletions
guichan
include/guichan/widgets
widgets

View file

@ -167,7 +167,6 @@ namespace gcn
int mCaretPosition;
int mXScroll;
int mSelectStart;
int mSelectEndOffset;
};
}

View file

@ -69,7 +69,6 @@ namespace gcn
mCaretPosition = 0;
mXScroll = 0;
mSelectStart = 0;
mSelectEndOffset = 0;
setFocusable(true);
@ -84,7 +83,6 @@ namespace gcn
mCaretPosition = 0;
mXScroll = 0;
mSelectStart = 0;
mSelectEndOffset = 0;
mText = text;
adjustSize();
@ -104,7 +102,6 @@ namespace gcn
}
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
mText = text;
}
@ -129,7 +126,7 @@ namespace gcn
x = 1 - mXScroll;
y = 1;
if (mSelectEndOffset != 0)
if (mSelectStart != mCaretPosition)
{
unsigned int first;
unsigned int len;
@ -188,7 +185,6 @@ namespace gcn
{
mCaretPosition = getFont()->getStringIndexAt(mText, x + mXScroll);
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
fixScroll();
}
else if (hasMouse() && button == MouseInput::MIDDLE)
@ -207,7 +203,6 @@ namespace gcn
if (isDragged() && mClickButton == MouseInput::LEFT)
{
mCaretPosition = getFont()->getStringIndexAt(mText, x + mXScroll);
mSelectEndOffset = mCaretPosition - mSelectStart;
setDirty(true);
}
}
@ -223,22 +218,13 @@ namespace gcn
if (key.getValue() == Key::LEFT)
{
if (mCaretPosition > 0) {
int oldPosition = mCaretPosition;
mCaretPosition = UTF8GetPrev(mText, mCaretPosition);
if (mCaretPosition < 0) {
throw GCN_EXCEPTION("Invalid UTF8.");
}
if (key.isShiftPressed()) {
mSelectEndOffset -= (oldPosition - mCaretPosition);
} else {
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
}
} else if (!key.isShiftPressed()) {
}
if (!key.isShiftPressed()) {
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
}
ret = true;
@ -247,22 +233,13 @@ namespace gcn
else if (key.getValue() == Key::RIGHT)
{
if (mCaretPosition < (int)mText.size()) {
int oldPosition = mCaretPosition;
mCaretPosition = UTF8GetNext(mText, mCaretPosition);
if (mCaretPosition > (int)mText.size()) {
throw GCN_EXCEPTION("Invalid UTF8.");
}
if (key.isShiftPressed()) {
mSelectEndOffset += (mCaretPosition - oldPosition);
} else {
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
}
} else if (!key.isShiftPressed()) {
}
if (!key.isShiftPressed()) {
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
}
ret = true;
@ -274,7 +251,6 @@ namespace gcn
mText.erase(selFirst, selLen);
mCaretPosition = selFirst;
mSelectStart = selFirst;
mSelectEndOffset = 0;
} else if (mCaretPosition < (int)mText.size()) {
int newpos = UTF8GetNext(mText, mCaretPosition);
if (mCaretPosition > (int)mText.size()) {
@ -291,7 +267,6 @@ namespace gcn
mText.erase(selFirst, selLen);
mCaretPosition = selFirst;
mSelectStart = selFirst;
mSelectEndOffset = 0;
} else if (mCaretPosition > 0) {
int newpos = UTF8GetPrev(mText, mCaretPosition);
if (mCaretPosition < 0) {
@ -312,26 +287,20 @@ namespace gcn
else if (key.getValue() == Key::HOME || key.getValue() == 'a' - 'a' + 1) // ctrl-a
{
if (key.isShiftPressed()) {
mSelectEndOffset -= mCaretPosition;
} else {
mSelectStart = 0;
mSelectEndOffset = 0;
}
mCaretPosition = 0;
if (!key.isShiftPressed()) {
mSelectStart = mCaretPosition;
}
ret = true;
}
else if (key.getValue() == Key::END || key.getValue() == 'e' - 'a' + 1) //ctrl-e
{
if (key.isShiftPressed()) {
mSelectEndOffset += mText.size() - mCaretPosition;
} else {
mSelectStart = mText.size();
mSelectEndOffset = 0;
}
mCaretPosition = mText.size();
if (!key.isShiftPressed()) {
mSelectStart = mCaretPosition;
}
ret = true;
}
@ -350,7 +319,6 @@ namespace gcn
mText.erase(selFirst, selLen);
mCaretPosition = selFirst;
mSelectStart = selFirst;
mSelectEndOffset = 0;
}
if (GetClipboard(str) >= 0) {
@ -367,7 +335,6 @@ namespace gcn
mText.erase(selFirst, selLen);
mCaretPosition = selFirst;
mSelectStart = selFirst;
mSelectEndOffset = 0;
}
mText.insert(mCaretPosition,key.toString());
@ -376,7 +343,6 @@ namespace gcn
throw GCN_EXCEPTION("Invalid UTF8.");
}
mSelectStart = mCaretPosition;
mSelectEndOffset = 0;
ret = true;
}
@ -441,15 +407,15 @@ namespace gcn
void TextField::getTextSelectionPositions(unsigned int* first, unsigned int* len)
{
if (mSelectEndOffset < 0)
if (mCaretPosition < mSelectStart)
{
*first = mSelectStart + mSelectEndOffset;
*len = -mSelectEndOffset;
*first = mCaretPosition;
*len = mSelectStart - mCaretPosition;
}
else
{
*first = mSelectStart;
*len = mSelectEndOffset;
*len = mCaretPosition - mSelectStart;
}
}