mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-22 06:05:38 +00:00
Fixed an issue where the cursor would end up outside text fields for long strings.
This commit is contained in:
parent
14e2ede448
commit
f4e24bdd56
|
@ -1,4 +1,6 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// TextEditComponent.cpp
|
||||
//
|
||||
// Component for editing text fields in menus.
|
||||
|
@ -68,12 +70,12 @@ void TextEditComponent::textInput(const char* text)
|
|||
if (mCursor > 0) {
|
||||
size_t newCursor = Utils::String::prevCursor(mText, mCursor);
|
||||
mText.erase(mText.begin() + newCursor, mText.begin() + mCursor);
|
||||
mCursor = (unsigned int)newCursor;
|
||||
mCursor = static_cast<unsigned int>(newCursor);
|
||||
}
|
||||
}
|
||||
else {
|
||||
mText.insert(mCursor, text);
|
||||
mCursor += (unsigned int)strlen(text);
|
||||
mCursor += static_cast<unsigned int>(strlen(text));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,6 +85,8 @@ void TextEditComponent::textInput(const char* text)
|
|||
|
||||
void TextEditComponent::startEditing()
|
||||
{
|
||||
if (!isMultiline())
|
||||
setCursor(mText.size());
|
||||
SDL_StartTextInput();
|
||||
mEditing = true;
|
||||
updateHelpPrompts();
|
||||
|
@ -219,16 +223,16 @@ void TextEditComponent::updateCursorRepeat(int deltaTime)
|
|||
|
||||
void TextEditComponent::moveCursor(int amt)
|
||||
{
|
||||
mCursor = (unsigned int)Utils::String::moveCursor(mText, mCursor, amt);
|
||||
mCursor = static_cast<unsigned int>(Utils::String::moveCursor(mText, mCursor, amt));
|
||||
onCursorChanged();
|
||||
}
|
||||
|
||||
void TextEditComponent::setCursor(size_t pos)
|
||||
{
|
||||
if (pos == std::string::npos)
|
||||
mCursor = (unsigned int)mText.length();
|
||||
mCursor = static_cast<unsigned int>(mText.length());
|
||||
else
|
||||
mCursor = (int)pos;
|
||||
mCursor = static_cast<int>(pos);
|
||||
|
||||
moveCursor(0);
|
||||
}
|
||||
|
@ -240,8 +244,8 @@ void TextEditComponent::onTextChanged()
|
|||
mTextCache = std::unique_ptr<TextCache>
|
||||
(mFont->buildTextCache(wrappedText, 0, 0, 0x77777700 | getOpacity()));
|
||||
|
||||
if (mCursor > (int)mText.length())
|
||||
mCursor = (unsigned int)mText.length();
|
||||
if (mCursor > static_cast<int>(mText.length()))
|
||||
mCursor = static_cast<unsigned int>(mText.length());
|
||||
}
|
||||
|
||||
void TextEditComponent::onCursorChanged()
|
||||
|
@ -275,11 +279,12 @@ void TextEditComponent::render(const Transform4x4f& parentTrans)
|
|||
// Offset into our "text area" (padding).
|
||||
trans.translation() += Vector3f(getTextAreaPos().x(), getTextAreaPos().y(), 0);
|
||||
|
||||
Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y());
|
||||
Vector2i clipPos(static_cast<int>(trans.translation().x()),
|
||||
static_cast<int>(trans.translation().y()));
|
||||
// Use "text area" size for clipping.
|
||||
Vector3f dimScaled = trans * Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0);
|
||||
Vector2i clipDim((int)(dimScaled.x() - trans.translation().x()), (int)(dimScaled.y() -
|
||||
trans.translation().y()));
|
||||
Vector2i clipDim(static_cast<int>((dimScaled.x()) - trans.translation().x()),
|
||||
static_cast<int>((dimScaled.y()) - trans.translation().y()));
|
||||
Renderer::pushClipRect(clipPos, clipDim);
|
||||
|
||||
trans.translate(Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0));
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// TextEditComponent.h
|
||||
//
|
||||
// Component for editing text fields in menus.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#ifndef ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H
|
||||
#define ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// GuiComplexTextEditPopup.cpp
|
||||
//
|
||||
// Text edit popup with a title, two text strings, a text input box and buttons
|
||||
|
@ -7,11 +9,11 @@
|
|||
//
|
||||
|
||||
#include "guis/GuiComplexTextEditPopup.h"
|
||||
#include "guis/GuiMsgBox.h"
|
||||
|
||||
#include "components/ButtonComponent.h"
|
||||
#include "components/MenuComponent.h"
|
||||
#include "components/TextEditComponent.h"
|
||||
#include "guis/GuiMsgBox.h"
|
||||
#include "Window.h"
|
||||
|
||||
GuiComplexTextEditPopup::GuiComplexTextEditPopup(
|
||||
|
@ -53,15 +55,12 @@ GuiComplexTextEditPopup::GuiComplexTextEditPopup(
|
|||
mText = std::make_shared<TextEditComponent>(mWindow);
|
||||
mText->setValue(initValue);
|
||||
|
||||
if (!multiLine)
|
||||
mText->setCursor(initValue.size());
|
||||
|
||||
std::vector< std::shared_ptr<ButtonComponent> > buttons;
|
||||
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, acceptBtnText, acceptBtnText,
|
||||
[this, okCallback] { okCallback(mText->getValue()); delete this; }));
|
||||
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, loadBtnText, loadBtnHelpText,
|
||||
[this, infoString2] {
|
||||
mText->setValue(infoString2); mText->setCursor(infoString2.size()); }));
|
||||
mText->setValue(infoString2); mText->setCursor(infoString2.size()); }));
|
||||
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, clearBtnText, clearBtnHelpText,
|
||||
[this] { mText->setValue(""); }));
|
||||
if (!mHideCancelButton)
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// GuiComplexTextEditPopup.h
|
||||
//
|
||||
// Text edit popup with a title, two text strings, a text input box and buttons
|
||||
|
@ -6,7 +8,6 @@
|
|||
// Intended for updating settings for configuration files and similar.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#ifndef ES_CORE_GUIS_GUI_COMPLEX_TEXT_EDIT_POPUP_H
|
||||
#define ES_CORE_GUIS_GUI_COMPLEX_TEXT_EDIT_POPUP_H
|
||||
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// GuiTextEditPopup.cpp
|
||||
//
|
||||
// Simple text edit popup with a title, a text input box and OK and Cancel buttons.
|
||||
//
|
||||
|
||||
#include "guis/GuiTextEditPopup.h"
|
||||
#include "guis/GuiMsgBox.h"
|
||||
|
||||
#include "components/ButtonComponent.h"
|
||||
#include "components/MenuComponent.h"
|
||||
#include "components/TextEditComponent.h"
|
||||
#include "guis/GuiMsgBox.h"
|
||||
#include "Window.h"
|
||||
|
||||
GuiTextEditPopup::GuiTextEditPopup(
|
||||
|
@ -39,9 +41,6 @@ GuiTextEditPopup::GuiTextEditPopup(
|
|||
mText = std::make_shared<TextEditComponent>(mWindow);
|
||||
mText->setValue(initValue);
|
||||
|
||||
if (!multiLine)
|
||||
mText->setCursor(initValue.size());
|
||||
|
||||
std::vector< std::shared_ptr<ButtonComponent> > buttons;
|
||||
buttons.push_back(std::make_shared<ButtonComponent>(mWindow, acceptBtnText, acceptBtnText,
|
||||
[this, okCallback] { okCallback(mText->getValue()); delete this; }));
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// EmulationStation Desktop Edition
|
||||
// GuiTextEditPopup.h
|
||||
//
|
||||
// Simple text edit popup with a title, a text input box and OK and Cancel buttons.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#ifndef ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H
|
||||
#define ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H
|
||||
|
||||
|
|
Loading…
Reference in a new issue