From 90efb8d2cf3f8d5e15f99c4c0044126d14a24049 Mon Sep 17 00:00:00 2001 From: fluxgen Date: Sun, 13 Oct 2002 22:37:14 +0000 Subject: updated to match new font system --- src/Basemenu.cc | 109 +++++++++++++++++--------------------------------------- src/Theme.hh | 37 +++++-------------- 2 files changed, 42 insertions(+), 104 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 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Basemenu.cc,v 1.30 2002/09/10 10:50:04 fluxgen Exp $ +// $Id: Basemenu.cc,v 1.31 2002/10/13 22:37:14 fluxgen Exp $ //use GNU extensions #ifndef _GNU_SOURCE @@ -39,21 +39,17 @@ #include "Screen.hh" #include "StringUtil.hh" -#ifdef HAVE_STDIO_H -# include -#endif // HAVE_STDIO_H +#include +#include +#include -#ifdef STDC_HEADERS -# include -# include -#endif // STDC_HEADERS #ifdef DEBUG #include using namespace std; #endif //DEBUG -static Basemenu *shown = (Basemenu *) 0; +static Basemenu *shown = 0; Basemenu::Basemenu(BScreen *screen): m_fluxbox(Fluxbox::instance()), @@ -91,31 +87,15 @@ m_alignment(ALIGNDONTCARE) { menu.bevel_w = m_screen->getBevelWidth(); - I18n *i18n = I18n::instance(); - - if (i18n->multibyte()) { - menu.width = menu.title_h = menu.item_w = menu.frame_h = - m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.height + - (menu.bevel_w * 2); - } else { - menu.width = menu.title_h = menu.item_w = menu.frame_h = - m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + - m_screen->getMenuStyle()->titlefont.fontStruct()->descent + - (menu.bevel_w * 2); - } - + menu.width = menu.title_h = menu.item_w = menu.frame_h = + m_screen->getMenuStyle()->titlefont.height() + menu.bevel_w * 2; + menu.sublevels = menu.persub = menu.minsub = 0; - - if (i18n->multibyte()) { - menu.item_h = m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.height + - (menu.bevel_w); - } else { - menu.item_h = m_screen->getMenuStyle()->framefont.fontStruct()->ascent + - m_screen->getMenuStyle()->framefont.fontStruct()->descent + - (menu.bevel_w); - } + + menu.item_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w; + menu.height = menu.title_h + m_screen->getBorderWidth() + menu.frame_h; //set attributes for menu window @@ -265,20 +245,9 @@ void Basemenu::lower() { void Basemenu::update() { I18n *i18n = I18n::instance(); - if (i18n->multibyte()) { - menu.item_h = m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.height + - menu.bevel_w; - menu.title_h = m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.height + - (menu.bevel_w * 2); - } else { - menu.item_h = m_screen->getMenuStyle()->framefont.fontStruct()->ascent + - m_screen->getMenuStyle()->framefont.fontStruct()->descent + - menu.bevel_w; - menu.title_h = m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + - m_screen->getMenuStyle()->titlefont.fontStruct()->descent + - (menu.bevel_w * 2); - } - + menu.item_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w; + menu.title_h = m_screen->getMenuStyle()->framefont.height() + menu.bevel_w*2; + if (title_vis) { const char *s = (menu.label!="") ? menu.label.c_str() : i18n->getMessage( @@ -472,18 +441,14 @@ void Basemenu::move(int x, int y) { } -void Basemenu::redrawTitle(void) { +void Basemenu::redrawTitle() { I18n *i18n = I18n::instance(); const char *text = menu.label.size() ? menu.label.c_str() : i18n->getMessage( FBNLS::BasemenuSet, FBNLS::BasemenuBlackboxMenu, "fluxbox Menu"); int dx = menu.bevel_w, len = strlen(text); - unsigned int l; - - l = m_screen->getMenuStyle()->titlefont.textWidth(text, len); - - l += (menu.bevel_w * 2); + unsigned int l = m_screen->getMenuStyle()->titlefont.textWidth(text, len) + menu.bevel_w*2; switch (m_screen->getMenuStyle()->titlefont_justify) { case DrawUtil::Font::RIGHT: @@ -497,15 +462,14 @@ void Basemenu::redrawTitle(void) { break; } - if (i18n->multibyte()) - XmbDrawString(m_display, menu.title, m_screen->getMenuStyle()->titlefont.fontSet(), - m_screen->getMenuStyle()->t_text_gc, dx, menu.bevel_w - - m_screen->getMenuStyle()->titlefont.fontSetExtents()->max_ink_extent.y, - text, len); - else - XDrawString(m_display, menu.title, m_screen->getMenuStyle()->t_text_gc, dx, - m_screen->getMenuStyle()->titlefont.fontStruct()->ascent + menu.bevel_w, - text, len); + m_screen->getMenuStyle()->titlefont.drawText( + menu.title, // drawable + m_screen->getScreenNumber(), + m_screen->getMenuStyle()->t_text_gc, // graphic context + text, len, // text string with lenght + dx, m_screen->getMenuStyle()->titlefont.height() + menu.bevel_w/2); // position + + } @@ -646,19 +610,10 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear, unsigned int hilite_w = menu.item_w, hilite_h = menu.item_h, text_w = 0, text_h = 0; unsigned int half_w = menu.item_h / 2, quarter_w = menu.item_h / 4; - I18n *i18n = I18n::instance(); - if (text) { text_w = m_screen->getMenuStyle()->framefont.textWidth(text, len); - - if (FbTk::Font::multibyte()) { - text_y = item_y + (menu.bevel_w / 2) - - m_screen->getMenuStyle()->framefont.fontSetExtents()->max_ink_extent.y; - } else { - text_y = item_y + - m_screen->getMenuStyle()->framefont.fontStruct()->ascent + - (menu.bevel_w / 2); - } + + text_y = item_y + menu.bevel_w/4 + m_screen->getMenuStyle()->framefont.height(); switch(m_screen->getMenuStyle()->framefont_justify) { case DrawUtil::Font::LEFT: @@ -748,11 +703,13 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear, } if (dotext && text) { - if (i18n->multibyte()) { - XmbDrawString(m_display, menu.frame, m_screen->getMenuStyle()->framefont.fontSet(), - tgc, text_x, text_y, text, len); - } else - XDrawString(m_display, menu.frame, tgc, text_x, text_y, text, len); + m_screen->getMenuStyle()->framefont.drawText( + menu.frame, // drawable + m_screen->getScreenNumber(), + tgc, + text, len, // text string and lenght + text_x, text_y); // position + } if (dosel && item->submenu()) { diff --git a/src/Theme.hh b/src/Theme.hh index bf3ccd4..f48b8c0 100644 --- a/src/Theme.hh +++ b/src/Theme.hh @@ -1,6 +1,9 @@ // Theme.hh for fluxbox // Copyright (c) 2001-2002 Henrik Kinnunen (fluxgen@linuxmail.org) // +// A lot of the base code is taken from Screen.hh in Blackbox 0.61.1 +// Screen.cc - Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net) +// // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation @@ -13,34 +16,13 @@ // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// -// A lot of the base code is taken from Screen.hh in Blackbox 0.61.1 -// Screen.cc - Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// $Id: Theme.hh,v 1.13 2002/08/04 15:55:13 fluxgen Exp $ +// $Id: Theme.hh,v 1.14 2002/10/13 22:34:03 fluxgen Exp $ #ifndef THEME_HH #define THEME_HH @@ -57,8 +39,7 @@ Main theme class, holds themes for Window, toolbar, slit, menu and the rootCommand, for a specific screen. */ -class Theme -{ +class Theme { public: Theme(Display *display, Window rootwindow, Colormap colormap, @@ -67,8 +48,8 @@ public: typedef struct MenuStyle { - MenuStyle(Display *display):titlefont(display, "fixed"), - framefont(display, "fixed") { } + MenuStyle():titlefont("fixed"), + framefont("fixed") { } FbTk::Color t_text, f_text, h_text, d_text; FbTk::Texture title, frame, hilite; GC t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc; @@ -142,7 +123,7 @@ private: void freeWindowStyle(); void freeTabStyle(); void freeToolbarStyle(); - + void loadFontFromDatabase(FbTk::Font &dest, const char *name, const char *altname); bool readDatabaseTexture(char *, char *, FbTk::Texture *, unsigned long); bool readDatabaseColor(char *, char *, FbTk::Color *, unsigned long); -- cgit v0.11.2