aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/TextButton.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/TextButton.cc')
-rw-r--r--src/FbTk/TextButton.cc33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/FbTk/TextButton.cc b/src/FbTk/TextButton.cc
index 04aa367..c31e3d6 100644
--- a/src/FbTk/TextButton.cc
+++ b/src/FbTk/TextButton.cc
@@ -28,7 +28,7 @@ namespace FbTk {
28 28
29TextButton::TextButton(const FbTk::FbWindow &parent, 29TextButton::TextButton(const FbTk::FbWindow &parent,
30 FbTk::Font &font, 30 FbTk::Font &font,
31 const std::string &text): 31 const FbTk::BiDiString &text):
32 FbTk::Button(parent, 0, 0, 10, 10), 32 FbTk::Button(parent, 0, 0, 10, 10),
33 m_font(&font), 33 m_font(&font),
34 m_text(text), 34 m_text(text),
@@ -81,8 +81,8 @@ bool TextButton::setOrientation(FbTk::Orientation orient) {
81 return true; 81 return true;
82} 82}
83 83
84void TextButton::setText(const std::string &text) { 84void TextButton::setText(const FbTk::BiDiString &text) {
85 if (m_text != text) { 85 if (m_text.logical() != text.logical()) {
86 m_text = text; 86 m_text = text;
87 updateBackground(false); 87 updateBackground(false);
88 clear(); 88 clear();
@@ -126,7 +126,7 @@ void TextButton::clearArea(int x, int y,
126 126
127 127
128unsigned int TextButton::textWidth() const { 128unsigned int TextButton::textWidth() const {
129 return font().textWidth(text(), text().size()); 129 return font().textWidth(text());
130} 130}
131 131
132void TextButton::renderForeground(FbWindow &win, FbDrawable &drawable) { 132void TextButton::renderForeground(FbWindow &win, FbDrawable &drawable) {
@@ -135,15 +135,15 @@ void TextButton::renderForeground(FbWindow &win, FbDrawable &drawable) {
135} 135}
136 136
137void TextButton::drawText(int x_offset, int y_offset, FbDrawable *drawable) { 137void TextButton::drawText(int x_offset, int y_offset, FbDrawable *drawable) {
138 unsigned int textlen = text().size(); 138 const FbString& visual = text().visual();
139 // do text alignment 139 unsigned int textlen = visual.size();
140 140 unsigned int textw = width();
141 unsigned int textw = width(), texth = height(); 141 unsigned int texth = height();
142 translateSize(m_orientation, textw, texth); 142 translateSize(m_orientation, textw, texth);
143 143
144 int align_x = FbTk::doAlignment(textw - x_offset - m_left_padding - m_right_padding, 144 int align_x = FbTk::doAlignment(textw - x_offset - m_left_padding - m_right_padding,
145 bevel(), justify(), font(), 145 bevel(), justify(), font(),
146 text().data(), text().size(), 146 visual.data(), visual.size(),
147 textlen); // return new text len 147 textlen); // return new text len
148 148
149 // center text by default 149 // center text by default
@@ -161,25 +161,24 @@ void TextButton::drawText(int x_offset, int y_offset, FbDrawable *drawable) {
161 font().drawText(*drawable, 161 font().drawText(*drawable,
162 screenNumber(), 162 screenNumber(),
163 gc(), // graphic context 163 gc(), // graphic context
164 text(), textlen, // string and string size 164 visual.c_str(), textlen, // string and string size
165 textx, texty, m_orientation); // position 165 textx, texty, m_orientation); // position
166} 166}
167 167
168 168
169bool TextButton::textExceeds(int x_offset) { 169bool TextButton::textExceeds(int x_offset) {
170
171 unsigned int textlen = text().size();
172 // do text alignment
173 170
174 unsigned int textw = width(), texth = height(); 171 const FbString& visual = text().visual();
172 unsigned int textlen = visual.size();
173 unsigned int textw = width();
174 unsigned int texth = height();
175 translateSize(m_orientation, textw, texth); 175 translateSize(m_orientation, textw, texth);
176 176
177 FbTk::doAlignment(textw - x_offset - m_left_padding - m_right_padding, 177 FbTk::doAlignment(textw - x_offset - m_left_padding - m_right_padding,
178 bevel(), justify(), font(), text().data(), text().size(), 178 bevel(), justify(), font(), visual.data(), visual.size(),
179 textlen); // return new text len 179 textlen); // return new text len
180 180
181 return text().size()>textlen; 181 return visual.size()>textlen;
182
183} 182}
184 183
185void TextButton::exposeEvent(XExposeEvent &event) { 184void TextButton::exposeEvent(XExposeEvent &event) {