ES-DE/src/components/TextEditComponent.cpp

107 lines
2.1 KiB
C++
Raw Normal View History

2013-08-18 14:16:11 +00:00
#include "TextEditComponent.h"
#include "../Log.h"
2013-08-19 15:36:48 +00:00
#include "../Font.h"
#include "../Window.h"
#include "../Renderer.h"
#include "ComponentListComponent.h"
2013-08-18 14:16:11 +00:00
TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window),
mBox(window, 0, 0, 0, 0), mFocused(false), mAllowResize(true)
2013-08-18 14:16:11 +00:00
{
addChild(&mBox);
onFocusLost();
setSize(256, (float)getFont()->getHeight());
2013-08-18 14:16:11 +00:00
}
void TextEditComponent::onFocusGained()
{
mBox.setHorizontalImage(":/glow_hor.png");
mBox.setVerticalImage(":/glow_vert.png");
2013-08-19 15:36:48 +00:00
mBox.setBorderColor(0x51CCFF00 | getOpacity());
SDL_StartTextInput();
2013-08-19 15:36:48 +00:00
mFocused = true;
2013-08-18 14:16:11 +00:00
}
void TextEditComponent::onFocusLost()
{
mBox.setHorizontalImage(":/glow_off_hor.png");
mBox.setVerticalImage(":/glow_off_vert.png");
2013-08-19 15:36:48 +00:00
mBox.setBorderColor(0xFFFFFF00 | getOpacity());
SDL_StopTextInput();
2013-08-19 15:36:48 +00:00
mFocused = false;
2013-08-18 14:16:11 +00:00
}
void TextEditComponent::onSizeChanged()
{
mBox.setSize(mSize);
}
void TextEditComponent::setValue(const std::string& val)
{
mText = val;
onTextChanged();
2013-08-18 14:16:11 +00:00
}
std::string TextEditComponent::getValue() const
{
return mText;
}
2013-08-19 15:36:48 +00:00
void TextEditComponent::textInput(const char* text)
2013-08-18 14:16:11 +00:00
{
2013-08-19 15:36:48 +00:00
if(mFocused)
{
if(text[0] == '\b')
{
if(mText.length() > 0)
mText.erase(mText.end() - 1, mText.end());
}else{
mText += text;
}
}
onTextChanged();
}
void TextEditComponent::onTextChanged()
{
if(mAllowResize)
{
float y = getFont()->sizeWrappedText(mText, mSize.x()).y();
if(y == 0)
y = (float)getFont()->getHeight();
setSize(mSize.x(), y);
}
ComponentListComponent* cmp = dynamic_cast<ComponentListComponent*>(getParent());
if(cmp)
cmp->updateComponent(this);
}
void TextEditComponent::setAllowResize(bool allow)
{
mAllowResize = allow;
onTextChanged();
2013-08-19 15:36:48 +00:00
}
void TextEditComponent::render(const Eigen::Affine3f& parentTrans)
{
Eigen::Affine3f trans = getTransform() * parentTrans;
renderChildren(trans);
Renderer::setMatrix(trans);
std::shared_ptr<Font> f = getFont();
f->drawWrappedText(mText, Eigen::Vector2f(0, 0), mSize.x(), 0x000000 | getOpacity());
2013-08-19 15:36:48 +00:00
}
std::shared_ptr<Font> TextEditComponent::getFont()
{
return Font::get(*mWindow->getResourceManager(), Font::getDefaultPath(), FONT_SIZE_SMALL);
2013-08-18 14:16:11 +00:00
}