diff options
Diffstat (limited to 'src/Basemenu.cc')
-rw-r--r-- | src/Basemenu.cc | 109 |
1 files changed, 33 insertions, 76 deletions
diff --git a/src/Basemenu.cc b/src/Basemenu.cc index 1d1abc2..2c3cb22 100644 --- a/src/Basemenu.cc +++ b/src/Basemenu.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Basemenu.cc,v 1.30 2002/09/10 10:50:04 fluxgen Exp $ | 25 | // $Id: Basemenu.cc,v 1.31 2002/10/13 22:37:14 fluxgen Exp $ |
26 | 26 | ||
27 | //use GNU extensions | 27 | //use GNU extensions |
28 | #ifndef _GNU_SOURCE | 28 | #ifndef _GNU_SOURCE |
@@ -39,21 +39,17 @@ | |||
39 | #include "Screen.hh" | 39 | #include "Screen.hh" |
40 | #include "StringUtil.hh" | 40 | #include "StringUtil.hh" |
41 | 41 | ||
42 | #ifdef HAVE_STDIO_H | 42 | #include <cstdio> |
43 | # include <stdio.h> | 43 | #include <cstdlib> |
44 | #endif // HAVE_STDIO_H | 44 | #include <cstring> |
45 | 45 | ||
46 | #ifdef STDC_HEADERS | ||
47 | # include <stdlib.h> | ||
48 | # include <string.h> | ||
49 | #endif // STDC_HEADERS | ||
50 | 46 | ||
51 | #ifdef DEBUG | 47 | #ifdef DEBUG |
52 | #include <iostream> | 48 | #include <iostream> |
53 | using namespace std; | 49 | using namespace std; |
54 | #endif //DEBUG | 50 | #endif //DEBUG |
55 | 51 | ||
56 | static Basemenu *shown = (Basemenu *) 0; | 52 | static Basemenu *shown = 0; |
57 | 53 | ||
58 | Basemenu::Basemenu(BScreen *screen): | 54 | Basemenu::Basemenu(BScreen *screen): |
59 | m_fluxbox(Fluxbox::instance()), | 55 | m_fluxbox(Fluxbox::instance()), |
@@ -91,31 +87,15 @@ m_alignment(ALIGNDONTCARE) { | |||
91 | 87 | ||
92 | menu.bevel_w = m_screen->getBevelWidth(); | 88 | menu.bevel_w = m_screen->getBevelWidth(); |
93 | 89 | ||
94 | I18n *i18n = I18n::instance(); | 90 | menu.width = menu.title_h = menu.item_w = menu.frame_h = |
95 | 91 | m_screen->getMenuStyle()->titlefont.height() + menu.bevel_w * 2; | |
96 | if (i18n->multibyte()) { | 92 | |
97 | menu.width = menu.title_h = menu.item_w = menu.frame_h = | ||
98 | m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.height + | ||
99 | (menu.bevel_w * 2); | ||
100 | } else { | ||
101 | menu.width = menu.title_h = menu.item_w = menu.frame_h = | ||
102 | m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + | ||
103 | m_screen->getMenuStyle()->titlefont.fontStruct()->descent + | ||
104 | (menu.bevel_w * 2); | ||
105 | } | ||
106 | |||
107 | menu.sublevels = | 93 | menu.sublevels = |
108 | menu.persub = | 94 | menu.persub = |
109 | menu.minsub = 0; | 95 | menu.minsub = 0; |
110 | 96 | ||
111 | if (i18n->multibyte()) { | 97 | menu.item_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w; |
112 | menu.item_h = m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.height + | 98 | |
113 | (menu.bevel_w); | ||
114 | } else { | ||
115 | menu.item_h = m_screen->getMenuStyle()->framefont.fontStruct()->ascent + | ||
116 | m_screen->getMenuStyle()->framefont.fontStruct()->descent + | ||
117 | (menu.bevel_w); | ||
118 | } | ||
119 | menu.height = menu.title_h + m_screen->getBorderWidth() + menu.frame_h; | 99 | menu.height = menu.title_h + m_screen->getBorderWidth() + menu.frame_h; |
120 | 100 | ||
121 | //set attributes for menu window | 101 | //set attributes for menu window |
@@ -265,20 +245,9 @@ void Basemenu::lower() { | |||
265 | void Basemenu::update() { | 245 | void Basemenu::update() { |
266 | I18n *i18n = I18n::instance(); | 246 | I18n *i18n = I18n::instance(); |
267 | 247 | ||
268 | if (i18n->multibyte()) { | 248 | menu.item_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w; |
269 | menu.item_h = m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.height + | 249 | menu.title_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w*2; |
270 | menu.bevel_w; | 250 | |
271 | menu.title_h = m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.height + | ||
272 | (menu.bevel_w * 2); | ||
273 | } else { | ||
274 | menu.item_h = m_screen->getMenuStyle()->framefont.fontStruct()->ascent + | ||
275 | m_screen->getMenuStyle()->framefont.fontStruct()->descent + | ||
276 | menu.bevel_w; | ||
277 | menu.title_h = m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + | ||
278 | m_screen->getMenuStyle()->titlefont.fontStruct()->descent + | ||
279 | (menu.bevel_w * 2); | ||
280 | } | ||
281 | |||
282 | if (title_vis) { | 251 | if (title_vis) { |
283 | const char *s = (menu.label!="") ? menu.label.c_str() : | 252 | const char *s = (menu.label!="") ? menu.label.c_str() : |
284 | i18n->getMessage( | 253 | i18n->getMessage( |
@@ -472,18 +441,14 @@ void Basemenu::move(int x, int y) { | |||
472 | } | 441 | } |
473 | 442 | ||
474 | 443 | ||
475 | void Basemenu::redrawTitle(void) { | 444 | void Basemenu::redrawTitle() { |
476 | I18n *i18n = I18n::instance(); | 445 | I18n *i18n = I18n::instance(); |
477 | const char *text = menu.label.size() ? menu.label.c_str() : | 446 | const char *text = menu.label.size() ? menu.label.c_str() : |
478 | i18n->getMessage( | 447 | i18n->getMessage( |
479 | FBNLS::BasemenuSet, FBNLS::BasemenuBlackboxMenu, | 448 | FBNLS::BasemenuSet, FBNLS::BasemenuBlackboxMenu, |
480 | "fluxbox Menu"); | 449 | "fluxbox Menu"); |
481 | int dx = menu.bevel_w, len = strlen(text); | 450 | int dx = menu.bevel_w, len = strlen(text); |
482 | unsigned int l; | 451 | unsigned int l = m_screen->getMenuStyle()->titlefont.textWidth(text, len) + menu.bevel_w*2; |
483 | |||
484 | l = m_screen->getMenuStyle()->titlefont.textWidth(text, len); | ||
485 | |||
486 | l += (menu.bevel_w * 2); | ||
487 | 452 | ||
488 | switch (m_screen->getMenuStyle()->titlefont_justify) { | 453 | switch (m_screen->getMenuStyle()->titlefont_justify) { |
489 | case DrawUtil::Font::RIGHT: | 454 | case DrawUtil::Font::RIGHT: |
@@ -497,15 +462,14 @@ void Basemenu::redrawTitle(void) { | |||
497 | break; | 462 | break; |
498 | } | 463 | } |
499 | 464 | ||
500 | if (i18n->multibyte()) | 465 | m_screen->getMenuStyle()->titlefont.drawText( |
501 | XmbDrawString(m_display, menu.title, m_screen->getMenuStyle()->titlefont.fontSet(), | 466 | menu.title, // drawable |
502 | m_screen->getMenuStyle()->t_text_gc, dx, menu.bevel_w - | 467 | m_screen->getScreenNumber(), |
503 | m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.y, | 468 | m_screen->getMenuStyle()->t_text_gc, // graphic context |
504 | text, len); | 469 | text, len, // text string with lenght |
505 | else | 470 | dx, m_screen->getMenuStyle()->titlefont.height() + menu.bevel_w/2); // position |
506 | XDrawString(m_display, menu.title, m_screen->getMenuStyle()->t_text_gc, dx, | 471 | |
507 | m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + menu.bevel_w, | 472 | |
508 | text, len); | ||
509 | } | 473 | } |
510 | 474 | ||
511 | 475 | ||
@@ -646,19 +610,10 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear, | |||
646 | unsigned int hilite_w = menu.item_w, hilite_h = menu.item_h, text_w = 0, text_h = 0; | 610 | unsigned int hilite_w = menu.item_w, hilite_h = menu.item_h, text_w = 0, text_h = 0; |
647 | unsigned int half_w = menu.item_h / 2, quarter_w = menu.item_h / 4; | 611 | unsigned int half_w = menu.item_h / 2, quarter_w = menu.item_h / 4; |
648 | 612 | ||
649 | I18n *i18n = I18n::instance(); | ||
650 | |||
651 | if (text) { | 613 | if (text) { |
652 | text_w = m_screen->getMenuStyle()->framefont.textWidth(text, len); | 614 | text_w = m_screen->getMenuStyle()->framefont.textWidth(text, len); |
653 | 615 | ||
654 | if (FbTk::Font::multibyte()) { | 616 | text_y = item_y + menu.bevel_w/4 + m_screen->getMenuStyle()->framefont.height(); |
655 | text_y = item_y + (menu.bevel_w / 2) - | ||
656 | m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.y; | ||
657 | } else { | ||
658 | text_y = item_y + | ||
659 | m_screen->getMenuStyle()->framefont.fontStruct()->ascent + | ||
660 | (menu.bevel_w / 2); | ||
661 | } | ||
662 | 617 | ||
663 | switch(m_screen->getMenuStyle()->framefont_justify) { | 618 | switch(m_screen->getMenuStyle()->framefont_justify) { |
664 | case DrawUtil::Font::LEFT: | 619 | case DrawUtil::Font::LEFT: |
@@ -748,11 +703,13 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear, | |||
748 | } | 703 | } |
749 | 704 | ||
750 | if (dotext && text) { | 705 | if (dotext && text) { |
751 | if (i18n->multibyte()) { | 706 | m_screen->getMenuStyle()->framefont.drawText( |
752 | XmbDrawString(m_display, menu.frame, m_screen->getMenuStyle()->framefont.fontSet(), | 707 | menu.frame, // drawable |
753 | tgc, text_x, text_y, text, len); | 708 | m_screen->getScreenNumber(), |
754 | } else | 709 | tgc, |
755 | XDrawString(m_display, menu.frame, tgc, text_x, text_y, text, len); | 710 | text, len, // text string and lenght |
711 | text_x, text_y); // position | ||
712 | |||
756 | } | 713 | } |
757 | 714 | ||
758 | if (dosel && item->submenu()) { | 715 | if (dosel && item->submenu()) { |