hide passwords in line edits
This commit is contained in:
parent
9bae47a40c
commit
b6b823aa9c
|
@ -6,3 +6,5 @@ LineEdit < UILineEdit
|
||||||
source: /core_ui/images/panel_flat.png
|
source: /core_ui/images/panel_flat.png
|
||||||
border: 1
|
border: 1
|
||||||
|
|
||||||
|
PasswordLineEdit < LineEdit
|
||||||
|
text hidden: true
|
||||||
|
|
|
@ -27,7 +27,7 @@ MainWindow
|
||||||
anchors.top: prev.bottom
|
anchors.top: prev.bottom
|
||||||
margin.top: 8
|
margin.top: 8
|
||||||
|
|
||||||
LineEdit
|
PasswordLineEdit
|
||||||
id: accountPasswordLineEdit
|
id: accountPasswordLineEdit
|
||||||
text: 123456
|
text: 123456
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|
|
@ -32,6 +32,7 @@ UILineEdit::UILineEdit()
|
||||||
m_cursorPos = 0;
|
m_cursorPos = 0;
|
||||||
m_startRenderPos = 0;
|
m_startRenderPos = 0;
|
||||||
m_textHorizontalMargin = 3;
|
m_textHorizontalMargin = 3;
|
||||||
|
m_textHidden = false;
|
||||||
blinkCursor();
|
blinkCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +70,8 @@ void UILineEdit::render()
|
||||||
|
|
||||||
void UILineEdit::update()
|
void UILineEdit::update()
|
||||||
{
|
{
|
||||||
int textLength = m_text.length();
|
std::string text = getDisplayedText();
|
||||||
|
int textLength = text.length();
|
||||||
|
|
||||||
// prevent glitches
|
// prevent glitches
|
||||||
if(m_rect.isEmpty())
|
if(m_rect.isEmpty())
|
||||||
|
@ -77,7 +79,7 @@ void UILineEdit::update()
|
||||||
|
|
||||||
// map glyphs positions
|
// map glyphs positions
|
||||||
Size textBoxSize;
|
Size textBoxSize;
|
||||||
const std::vector<Point>& glyphsPositions = m_font->calculateGlyphsPositions(m_text, m_align, &textBoxSize);
|
const std::vector<Point>& glyphsPositions = m_font->calculateGlyphsPositions(text, m_align, &textBoxSize);
|
||||||
const Rect *glyphsTextureCoords = m_font->getGlyphsTextureCoords();
|
const Rect *glyphsTextureCoords = m_font->getGlyphsTextureCoords();
|
||||||
const Size *glyphsSize = m_font->getGlyphsSize();
|
const Size *glyphsSize = m_font->getGlyphsSize();
|
||||||
int glyph;
|
int glyph;
|
||||||
|
@ -101,7 +103,7 @@ void UILineEdit::update()
|
||||||
{
|
{
|
||||||
Rect virtualRect(m_startInternalPos, m_rect.size() - Size(2*m_textHorizontalMargin, 0) ); // previous rendered virtual rect
|
Rect virtualRect(m_startInternalPos, m_rect.size() - Size(2*m_textHorizontalMargin, 0) ); // previous rendered virtual rect
|
||||||
int pos = m_cursorPos - 1; // element before cursor
|
int pos = m_cursorPos - 1; // element before cursor
|
||||||
glyph = (uchar)m_text[pos]; // glyph of the element before cursor
|
glyph = (uchar)text[pos]; // glyph of the element before cursor
|
||||||
Rect glyphRect(glyphsPositions[pos], glyphsSize[glyph]);
|
Rect glyphRect(glyphsPositions[pos], glyphsSize[glyph]);
|
||||||
|
|
||||||
// if the cursor is not on the previous rendered virtual rect we need to update it
|
// if the cursor is not on the previous rendered virtual rect we need to update it
|
||||||
|
@ -113,7 +115,7 @@ void UILineEdit::update()
|
||||||
|
|
||||||
// find that glyph
|
// find that glyph
|
||||||
for(pos = 0; pos < textLength; ++pos) {
|
for(pos = 0; pos < textLength; ++pos) {
|
||||||
glyph = (uchar)m_text[pos];
|
glyph = (uchar)text[pos];
|
||||||
glyphRect = Rect(glyphsPositions[pos], glyphsSize[glyph]);
|
glyphRect = Rect(glyphsPositions[pos], glyphsSize[glyph]);
|
||||||
glyphRect.setTop(std::max(glyphRect.top() - m_font->getTopMargin() - m_font->getGlyphSpacing().height(), 0));
|
glyphRect.setTop(std::max(glyphRect.top() - m_font->getTopMargin() - m_font->getGlyphSpacing().height(), 0));
|
||||||
glyphRect.setLeft(std::max(glyphRect.left() - m_font->getGlyphSpacing().width(), 0));
|
glyphRect.setLeft(std::max(glyphRect.left() - m_font->getGlyphSpacing().width(), 0));
|
||||||
|
@ -153,7 +155,7 @@ void UILineEdit::update()
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < textLength; ++i) {
|
for(int i = 0; i < textLength; ++i) {
|
||||||
glyph = (uchar)m_text[i];
|
glyph = (uchar)text[i];
|
||||||
m_glyphsCoords[i].clear();
|
m_glyphsCoords[i].clear();
|
||||||
|
|
||||||
// skip invalid glyphs
|
// skip invalid glyphs
|
||||||
|
@ -239,6 +241,12 @@ void UILineEdit::setText(const std::string& text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UILineEdit::setTextHidden(bool hidden)
|
||||||
|
{
|
||||||
|
m_textHidden = true;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void UILineEdit::setAlign(Fw::AlignmentFlag align)
|
void UILineEdit::setAlign(Fw::AlignmentFlag align)
|
||||||
{
|
{
|
||||||
if(m_align != align) {
|
if(m_align != align) {
|
||||||
|
@ -355,6 +363,14 @@ int UILineEdit::getTextPos(Point pos)
|
||||||
return candidatePos;
|
return candidatePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string UILineEdit::getDisplayedText()
|
||||||
|
{
|
||||||
|
if(m_textHidden)
|
||||||
|
return std::string(m_text.length(), '*');
|
||||||
|
else
|
||||||
|
return m_text;
|
||||||
|
}
|
||||||
|
|
||||||
void UILineEdit::onStyleApply(const OTMLNodePtr& styleNode)
|
void UILineEdit::onStyleApply(const OTMLNodePtr& styleNode)
|
||||||
{
|
{
|
||||||
UIWidget::onStyleApply(styleNode);
|
UIWidget::onStyleApply(styleNode);
|
||||||
|
@ -363,6 +379,8 @@ void UILineEdit::onStyleApply(const OTMLNodePtr& styleNode)
|
||||||
if(node->tag() == "text") {
|
if(node->tag() == "text") {
|
||||||
setText(node->value());
|
setText(node->value());
|
||||||
setCursorPos(m_text.length());
|
setCursorPos(m_text.length());
|
||||||
|
} else if(node->tag() == "text hidden") {
|
||||||
|
setTextHidden(node->value<bool>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
void setText(const std::string& text);
|
void setText(const std::string& text);
|
||||||
|
void setTextHidden(bool hidden);
|
||||||
void setAlign(Fw::AlignmentFlag align);
|
void setAlign(Fw::AlignmentFlag align);
|
||||||
void setCursorPos(int pos);
|
void setCursorPos(int pos);
|
||||||
void setCursorEnabled(bool enable = true);
|
void setCursorEnabled(bool enable = true);
|
||||||
|
@ -47,6 +48,7 @@ public:
|
||||||
|
|
||||||
void setFont(const FontPtr& font);
|
void setFont(const FontPtr& font);
|
||||||
std::string getText() const { return m_text; }
|
std::string getText() const { return m_text; }
|
||||||
|
std::string getDisplayedText();
|
||||||
int getTextPos(Point pos);
|
int getTextPos(Point pos);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -67,6 +69,7 @@ private:
|
||||||
int m_startRenderPos;
|
int m_startRenderPos;
|
||||||
int m_cursorTicks;
|
int m_cursorTicks;
|
||||||
int m_textHorizontalMargin;
|
int m_textHorizontalMargin;
|
||||||
|
bool m_textHidden;
|
||||||
|
|
||||||
std::vector<Rect> m_glyphsCoords;
|
std::vector<Rect> m_glyphsCoords;
|
||||||
std::vector<Rect> m_glyphsTexCoords;
|
std::vector<Rect> m_glyphsTexCoords;
|
||||||
|
|
Loading…
Reference in New Issue