diff options
Diffstat (limited to 'src/FbTk/MenuItem.cc')
-rw-r--r-- | src/FbTk/MenuItem.cc | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/FbTk/MenuItem.cc b/src/FbTk/MenuItem.cc index f995666..c1357fb 100644 --- a/src/FbTk/MenuItem.cc +++ b/src/FbTk/MenuItem.cc | |||
@@ -52,14 +52,14 @@ void MenuItem::drawLine(FbDrawable &draw, | |||
52 | int font_top = (height - theme->frameFont().height())/2; | 52 | int font_top = (height - theme->frameFont().height())/2; |
53 | int underline_height = font_top + theme->frameFont().ascent() + 2; | 53 | int underline_height = font_top + theme->frameFont().ascent() + 2; |
54 | int bottom = height - bevelW - 1; | 54 | int bottom = height - bevelW - 1; |
55 | 55 | ||
56 | text_y += bottom > underline_height ? underline_height : bottom; | 56 | text_y += bottom > underline_height ? underline_height : bottom; |
57 | int text_w = theme->frameFont().textWidth(m_label, m_label.size()); | ||
58 | 57 | ||
59 | // width of the searchstring | 58 | int text_w = theme->frameFont().textWidth(label()); |
60 | size = size > m_label.length() ? m_label.length() : size; | 59 | |
61 | std::string search_string = m_label.substr(0,size); | 60 | const FbString& visual = m_label.visual(); |
62 | int search_string_w = theme->frameFont().textWidth(search_string, size); | 61 | BiDiString search_string(FbString(visual, 0, size > visual.size() ? visual.size() : size)); |
62 | int search_string_w = theme->frameFont().textWidth(search_string); | ||
63 | 63 | ||
64 | // pay attention to the text justification | 64 | // pay attention to the text justification |
65 | switch(theme->frameFontJustify()) { | 65 | switch(theme->frameFontJustify()) { |
@@ -144,7 +144,7 @@ void MenuItem::draw(FbDrawable &draw, | |||
144 | } | 144 | } |
145 | } | 145 | } |
146 | 146 | ||
147 | if (label().empty()) | 147 | if (label().logical().empty()) |
148 | return; | 148 | return; |
149 | 149 | ||
150 | // text is background | 150 | // text is background |
@@ -156,8 +156,7 @@ void MenuItem::draw(FbDrawable &draw, | |||
156 | // Text | 156 | // Text |
157 | // | 157 | // |
158 | int text_y = y, text_x = x; | 158 | int text_y = y, text_x = x; |
159 | 159 | int text_w = theme->frameFont().textWidth(label()); | |
160 | int text_w = theme->frameFont().textWidth(label(), label().size()); | ||
161 | 160 | ||
162 | int height_offset = theme->itemHeight() - (theme->frameFont().height() + 2*theme->bevelWidth()); | 161 | int height_offset = theme->itemHeight() - (theme->frameFont().height() + 2*theme->bevelWidth()); |
163 | text_y = y + theme->bevelWidth() + theme->frameFont().ascent() + height_offset/2; | 162 | text_y = y + theme->bevelWidth() + theme->frameFont().ascent() + height_offset/2; |
@@ -175,11 +174,7 @@ void MenuItem::draw(FbDrawable &draw, | |||
175 | break; | 174 | break; |
176 | } | 175 | } |
177 | 176 | ||
178 | theme->frameFont().drawText(draw, // drawable | 177 | theme->frameFont().drawText(draw, theme->screenNum(), tgc.gc(), label(), text_x, text_y); |
179 | theme->screenNum(), | ||
180 | tgc.gc(), | ||
181 | label().c_str(), label().size(), // text string and lenght | ||
182 | text_x, text_y); // position | ||
183 | } | 178 | } |
184 | 179 | ||
185 | GC gc = (highlight) ? theme->hiliteTextGC().gc() : | 180 | GC gc = (highlight) ? theme->hiliteTextGC().gc() : |
@@ -335,7 +330,7 @@ unsigned int MenuItem::height(const FbTk::ThemeProxy<MenuTheme> &theme) const { | |||
335 | unsigned int MenuItem::width(const FbTk::ThemeProxy<MenuTheme> &theme) const { | 330 | unsigned int MenuItem::width(const FbTk::ThemeProxy<MenuTheme> &theme) const { |
336 | // textwidth + bevel width on each side of the text | 331 | // textwidth + bevel width on each side of the text |
337 | const unsigned int icon_width = height(theme); | 332 | const unsigned int icon_width = height(theme); |
338 | const unsigned int normal = theme->frameFont().textWidth(label(), label().size()) + | 333 | const unsigned int normal = theme->frameFont().textWidth(label()) + |
339 | 2 * (theme->bevelWidth() + icon_width); | 334 | 2 * (theme->bevelWidth() + icon_width); |
340 | return m_icon.get() == 0 ? normal : normal + icon_width; | 335 | return m_icon.get() == 0 ? normal : normal + icon_width; |
341 | } | 336 | } |
@@ -349,9 +344,9 @@ void MenuItem::updateTheme(const FbTk::ThemeProxy<MenuTheme> &theme) { | |||
349 | 344 | ||
350 | } | 345 | } |
351 | 346 | ||
352 | void MenuItem::showSubmenu() { | 347 | void MenuItem::showSubmenu() { |
353 | if (submenu() != 0) | 348 | if (submenu() != 0) |
354 | submenu()->show(); | 349 | submenu()->show(); |
355 | } | 350 | } |
356 | 351 | ||
357 | } // end namespace FbTk | 352 | } // end namespace FbTk |