Remove gcn::TextField::mSelectEndOffset
Instead compute mCaretPosition - mSelectStart where needed. This simplifies the code nicely.
This commit is contained in:
parent
f55a2b0ffa
commit
faabe3a5f8
2 changed files with 15 additions and 50 deletions
guichan
|
@ -167,7 +167,6 @@ namespace gcn
|
|||
int mCaretPosition;
|
||||
int mXScroll;
|
||||
int mSelectStart;
|
||||
int mSelectEndOffset;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue