added FbTk font to MenuStyle

This commit is contained in:
fluxgen 2002-03-21 10:54:29 +00:00
parent 3d3985609c
commit f44b282b00
3 changed files with 85 additions and 93 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Basemenu.cc,v 1.13 2002/03/20 14:10:03 fluxgen Exp $ // $Id: Basemenu.cc,v 1.14 2002/03/21 10:54:29 fluxgen Exp $
// stupid macros needed to access some functions in version 2 of the GNU C // stupid macros needed to access some functions in version 2 of the GNU C
// library // library
@ -49,7 +49,10 @@
# include <string.h> # include <string.h>
#endif // STDC_HEADERS #endif // STDC_HEADERS
#ifdef DEBUG
#include <iostream> #include <iostream>
using namespace std;
#endif //DEBUG
static Basemenu *shown = (Basemenu *) 0; static Basemenu *shown = (Basemenu *) 0;
@ -93,12 +96,12 @@ Basemenu::Basemenu(BScreen *scrn) {
if (i18n->multibyte()) { if (i18n->multibyte()) {
menu.width = menu.title_h = menu.item_w = menu.frame_h = menu.width = menu.title_h = menu.item_w = menu.frame_h =
screen->getMenuStyle()->titlefont.set_extents->max_ink_extent.height + screen->getMenuStyle()->titlefont->getFontSetExtents()->max_ink_extent.height +
(menu.bevel_w * 2); (menu.bevel_w * 2);
} else { } else {
menu.width = menu.title_h = menu.item_w = menu.frame_h = menu.width = menu.title_h = menu.item_w = menu.frame_h =
screen->getMenuStyle()->titlefont.fontstruct->ascent + screen->getMenuStyle()->titlefont->getFontStruct()->ascent +
screen->getMenuStyle()->titlefont.fontstruct->descent + screen->getMenuStyle()->titlefont->getFontStruct()->descent +
(menu.bevel_w * 2); (menu.bevel_w * 2);
} }
menu.label = 0; menu.label = 0;
@ -108,11 +111,11 @@ Basemenu::Basemenu(BScreen *scrn) {
menu.minsub = 0; menu.minsub = 0;
if (i18n->multibyte()) { if (i18n->multibyte()) {
menu.item_h = screen->getMenuStyle()->framefont.set_extents->max_ink_extent.height + menu.item_h = screen->getMenuStyle()->framefont->getFontSetExtents()->max_ink_extent.height +
(menu.bevel_w); (menu.bevel_w);
} else { } else {
menu.item_h = screen->getMenuStyle()->framefont.fontstruct->ascent + menu.item_h = screen->getMenuStyle()->framefont->getFontStruct()->ascent +
screen->getMenuStyle()->framefont.fontstruct->descent + screen->getMenuStyle()->framefont->getFontStruct()->descent +
(menu.bevel_w); (menu.bevel_w);
} }
menu.height = menu.title_h + screen->getBorderWidth() + menu.frame_h; menu.height = menu.title_h + screen->getBorderWidth() + menu.frame_h;
@ -277,37 +280,33 @@ void Basemenu::update(void) {
I18n *i18n = I18n::instance(); I18n *i18n = I18n::instance();
if (i18n->multibyte()) { if (i18n->multibyte()) {
menu.item_h = screen->getMenuStyle()->framefont.set_extents->max_ink_extent.height + menu.item_h = screen->getMenuStyle()->framefont->getFontSetExtents()->max_ink_extent.height +
menu.bevel_w; menu.bevel_w;
menu.title_h = screen->getMenuStyle()->titlefont.set_extents->max_ink_extent.height + menu.title_h = screen->getMenuStyle()->titlefont->getFontSetExtents()->max_ink_extent.height +
(menu.bevel_w * 2); (menu.bevel_w * 2);
} else { } else {
menu.item_h = screen->getMenuStyle()->framefont.fontstruct->ascent + menu.item_h = screen->getMenuStyle()->framefont->getFontStruct()->ascent +
screen->getMenuStyle()->framefont.fontstruct->descent + screen->getMenuStyle()->framefont->getFontStruct()->descent +
menu.bevel_w; menu.bevel_w;
menu.title_h = screen->getMenuStyle()->titlefont.fontstruct->ascent + menu.title_h = screen->getMenuStyle()->titlefont->getFontStruct()->ascent +
screen->getMenuStyle()->titlefont.fontstruct->descent + screen->getMenuStyle()->titlefont->getFontStruct()->descent +
(menu.bevel_w * 2); (menu.bevel_w * 2);
} }
if (title_vis) { if (title_vis) {
const char *s = (menu.label) ? menu.label : const char *s = (menu.label) ? menu.label :
i18n->getMessage( i18n->getMessage(
#ifdef NLS
BasemenuSet, BasemenuBlackboxMenu, BasemenuSet, BasemenuBlackboxMenu,
#else // !NLS
0, 0,
#endif // NLS
"fluxbox Menu"); "fluxbox Menu");
int l = strlen(s); int l = strlen(s);
if (i18n->multibyte()) { if (i18n->multibyte()) {
XRectangle ink, logical; XRectangle ink, logical;
XmbTextExtents(screen->getMenuStyle()->titlefont.set, s, l, &ink, &logical); XmbTextExtents(screen->getMenuStyle()->titlefont->getFontSet(), s, l, &ink, &logical);
menu.item_w = logical.width; menu.item_w = logical.width;
} else } else
menu.item_w = XTextWidth(screen->getMenuStyle()->titlefont.fontstruct, s, l); menu.item_w = XTextWidth(screen->getMenuStyle()->titlefont->getFontStruct(), s, l);
menu.item_w += (menu.bevel_w * 2); menu.item_w += (menu.bevel_w * 2);
} else } else
@ -324,10 +323,10 @@ void Basemenu::update(void) {
if (i18n->multibyte()) { if (i18n->multibyte()) {
XRectangle ink, logical; XRectangle ink, logical;
XmbTextExtents(screen->getMenuStyle()->framefont.set, s, l, &ink, &logical); XmbTextExtents(screen->getMenuStyle()->framefont->getFontSet(), s, l, &ink, &logical);
ii = logical.width; ii = logical.width;
} else } else
ii = XTextWidth(screen->getMenuStyle()->framefont.fontstruct, s, l); ii = XTextWidth(screen->getMenuStyle()->framefont->getFontStruct(), s, l);
ii += (menu.bevel_w * 2) + (menu.item_h * 2); ii += (menu.bevel_w * 2) + (menu.item_h * 2);
@ -509,16 +508,12 @@ void Basemenu::redrawTitle(void) {
int dx = menu.bevel_w, len = strlen(text); int dx = menu.bevel_w, len = strlen(text);
unsigned int l; unsigned int l;
if (i18n->multibyte()) { l = screen->getMenuStyle()->titlefont->getTextWidth(text, len);
XRectangle ink, logical;
XmbTextExtents(screen->getMenuStyle()->titlefont.set, text, len, &ink, &logical);
l = logical.width;
} else
l = XTextWidth(screen->getMenuStyle()->titlefont.fontstruct, text, len);
l += (menu.bevel_w * 2); l += (menu.bevel_w * 2);
switch (screen->getMenuStyle()->titlefont.justify) { //titlefont.justify
switch (screen->getMenuStyle()->titlefont_justify) {
case DrawUtil::Font::RIGHT: case DrawUtil::Font::RIGHT:
dx += menu.width - l; dx += menu.width - l;
break; break;
@ -531,13 +526,13 @@ void Basemenu::redrawTitle(void) {
} }
if (i18n->multibyte()) if (i18n->multibyte())
XmbDrawString(display, menu.title, screen->getMenuStyle()->titlefont.set, XmbDrawString(display, menu.title, screen->getMenuStyle()->titlefont->getFontSet(),
screen->getMenuStyle()->t_text_gc, dx, menu.bevel_w - screen->getMenuStyle()->t_text_gc, dx, menu.bevel_w -
screen->getMenuStyle()->titlefont.set_extents->max_ink_extent.y, screen->getMenuStyle()->titlefont->getFontSetExtents()->max_ink_extent.y,
text, len); text, len);
else else
XDrawString(display, menu.title, screen->getMenuStyle()->t_text_gc, dx, XDrawString(display, menu.title, screen->getMenuStyle()->t_text_gc, dx,
screen->getMenuStyle()->titlefont.fontstruct->ascent + menu.bevel_w, screen->getMenuStyle()->titlefont->getFontStruct()->ascent + menu.bevel_w,
text, len); text, len);
} }
@ -681,20 +676,19 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear,
I18n *i18n = I18n::instance(); I18n *i18n = I18n::instance();
if (text) { if (text) {
if (i18n->multibyte()) { text_w = screen->getMenuStyle()->framefont->getTextWidth(text, len);
XRectangle ink, logical;
XmbTextExtents(screen->getMenuStyle()->framefont.set, text, len, &ink, &logical); if (screen->getMenuStyle()->framefont->multibyte()) {
text_w = logical.width;
text_y = item_y + (menu.bevel_w / 2) - text_y = item_y + (menu.bevel_w / 2) -
screen->getMenuStyle()->framefont.set_extents->max_ink_extent.y; screen->getMenuStyle()->framefont->getFontSetExtents()->max_ink_extent.y;
} else { } else {
text_w = XTextWidth(screen->getMenuStyle()->framefont.fontstruct, text, len);
text_y = item_y + text_y = item_y +
screen->getMenuStyle()->framefont.fontstruct->ascent + screen->getMenuStyle()->framefont->getFontStruct()->ascent +
(menu.bevel_w / 2); (menu.bevel_w / 2);
} }
switch(screen->getMenuStyle()->framefont.justify) { // framfont.justify
switch(screen->getMenuStyle()->framefont_justify) {
case DrawUtil::Font::LEFT: case DrawUtil::Font::LEFT:
text_x = item_x + menu.bevel_w + menu.item_h + 1; text_x = item_x + menu.bevel_w + menu.item_h + 1;
break; break;
@ -781,7 +775,7 @@ void Basemenu::drawItem(unsigned int index, bool highlight, bool clear,
if (dotext && text) { if (dotext && text) {
if (i18n->multibyte()) { if (i18n->multibyte()) {
XmbDrawString(display, menu.frame, screen->getMenuStyle()->framefont.set, XmbDrawString(display, menu.frame, screen->getMenuStyle()->framefont->getFontSet(),
tgc, text_x, text_y, text, len); tgc, text_x, text_y, text, len);
} else } else
XDrawString(display, menu.frame, tgc, text_x, text_y, text, len); XDrawString(display, menu.frame, tgc, text_x, text_y, text, len);

View file

@ -41,7 +41,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Theme.cc,v 1.17 2002/01/27 13:16:07 fluxgen Exp $ // $Id: Theme.cc,v 1.18 2002/03/21 10:54:29 fluxgen Exp $
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE #define _GNU_SOURCE
@ -77,12 +77,15 @@ m_colormap(colormap),
m_screennum(screennum), m_screennum(screennum),
m_rootcommand(rootcommand==0 ? "" : rootcommand) //we dont want to send 0-pointer to std::string m_rootcommand(rootcommand==0 ? "" : rootcommand) //we dont want to send 0-pointer to std::string
{ {
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): Creating."<<endl;
#endif //DEBUG
//default settings //default settings
m_menustyle.titlefont.set = m_menustyle.framefont.set = m_toolbarstyle.font.set = m_menustyle.titlefont = new FbTk::Font(m_display, "fixed"); //create with default font
m_windowstyle.font.set = m_windowstyle.tab.font.set = 0; m_menustyle.framefont = new FbTk::Font(m_display, "fixed");
m_windowstyle.font.set = m_toolbarstyle.font.set = m_windowstyle.tab.font.set = 0;
m_menustyle.titlefont.fontstruct = m_menustyle.framefont.fontstruct = m_toolbarstyle.font.fontstruct = m_toolbarstyle.font.fontstruct = m_windowstyle.font.fontstruct = m_windowstyle.tab.font.fontstruct = 0;
m_windowstyle.font.fontstruct = m_windowstyle.tab.font.fontstruct = 0;
m_windowstyle.tab.rot_font = 0; m_windowstyle.tab.rot_font = 0;
load(filename); load(filename);
@ -144,15 +147,15 @@ m_rootcommand(rootcommand==0 ? "" : rootcommand) //we dont want to send 0-pointe
GCForeground, &gcv); GCForeground, &gcv);
gcv.foreground = m_menustyle.t_text.getPixel(); gcv.foreground = m_menustyle.t_text.getPixel();
if (m_menustyle.titlefont.fontstruct) if (m_menustyle.titlefont->getFontStruct())
gcv.font = m_menustyle.titlefont.fontstruct->fid; gcv.font = m_menustyle.titlefont->getFontStruct()->fid;
m_menustyle.t_text_gc = m_menustyle.t_text_gc =
XCreateGC(m_display, rootwindow, XCreateGC(m_display, rootwindow,
gc_value_mask, &gcv); gc_value_mask, &gcv);
gcv.foreground = m_menustyle.f_text.getPixel(); gcv.foreground = m_menustyle.f_text.getPixel();
if (m_menustyle.framefont.fontstruct) if (m_menustyle.framefont->getFontStruct())
gcv.font = m_menustyle.framefont.fontstruct->fid; gcv.font = m_menustyle.framefont->getFontStruct()->fid;
m_menustyle.f_text_gc = m_menustyle.f_text_gc =
XCreateGC(m_display, rootwindow, XCreateGC(m_display, rootwindow,
@ -210,17 +213,10 @@ Theme::~Theme() {
// should only be called from ~Theme // should only be called from ~Theme
//-------------------- //--------------------
void Theme::freeMenuStyle() { void Theme::freeMenuStyle() {
if (m_menustyle.titlefont.set) delete m_menustyle.framefont;
XFreeFontSet(m_display, m_menustyle.titlefont.set); m_menustyle.framefont = 0;
delete m_menustyle.titlefont;
if (m_menustyle.titlefont.fontstruct) m_menustyle.titlefont = 0;
XFreeFont(m_display, m_menustyle.titlefont.fontstruct);
if (m_menustyle.framefont.set)
XFreeFontSet(m_display, m_menustyle.framefont.set);
if (m_menustyle.framefont.fontstruct)
XFreeFont(m_display, m_menustyle.framefont.fontstruct);
XFreeGC(m_display, m_menustyle.t_text_gc); XFreeGC(m_display, m_menustyle.t_text_gc);
XFreeGC(m_display, m_menustyle.f_text_gc); XFreeGC(m_display, m_menustyle.f_text_gc);
@ -304,6 +300,8 @@ void Theme::load(const char *filename){
} }
void Theme::loadMenuStyle() { void Theme::loadMenuStyle() {
if (m_menustyle.titlefont==0)
m_menustyle.titlefont = new FbTk::Font(m_display);
readDatabaseTexture("menu.title", "Menu.Title", readDatabaseTexture("menu.title", "Menu.Title",
&m_menustyle.title, &m_menustyle.title,
@ -334,27 +332,27 @@ void Theme::loadMenuStyle() {
"Menu.Title.Justify", &value_type, &value)) { "Menu.Title.Justify", &value_type, &value)) {
if (strstr(value.addr, "right") || strstr(value.addr, "Right")) if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
m_menustyle.titlefont.justify = DrawUtil::Font::RIGHT; m_menustyle.titlefont_justify = DrawUtil::Font::RIGHT;
else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
m_menustyle.titlefont.justify = DrawUtil::Font::CENTER; m_menustyle.titlefont_justify = DrawUtil::Font::CENTER;
else else
m_menustyle.titlefont.justify = DrawUtil::Font::LEFT; m_menustyle.titlefont_justify = DrawUtil::Font::LEFT;
} else } else
m_menustyle.titlefont.justify = DrawUtil::Font::LEFT; m_menustyle.titlefont_justify = DrawUtil::Font::LEFT;
if (XrmGetResource(m_database, "menu.frame.justify", if (XrmGetResource(m_database, "menu.frame.justify",
"Menu.Frame.Justify", &value_type, &value)) { "Menu.Frame.Justify", &value_type, &value)) {
if (strstr(value.addr, "right") || strstr(value.addr, "Right")) if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
m_menustyle.framefont.justify = DrawUtil::Font::RIGHT; m_menustyle.framefont_justify = DrawUtil::Font::RIGHT;
else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
m_menustyle.framefont.justify = DrawUtil::Font::CENTER; m_menustyle.framefont_justify = DrawUtil::Font::CENTER;
else else
m_menustyle.framefont.justify = DrawUtil::Font::LEFT; m_menustyle.framefont_justify = DrawUtil::Font::LEFT;
} else } else
m_menustyle.framefont.justify = DrawUtil::Font::LEFT; m_menustyle.framefont_justify = DrawUtil::Font::LEFT;
if (XrmGetResource(m_database, "menu.bullet", "Menu.Bullet", if (XrmGetResource(m_database, "menu.bullet", "Menu.Bullet",
&value_type, &value)) { &value_type, &value)) {
@ -383,7 +381,9 @@ void Theme::loadMenuStyle() {
m_menustyle.bullet_pos = Basemenu::LEFT; m_menustyle.bullet_pos = Basemenu::LEFT;
//---------- font //---------- font
m_menustyle.framefont->loadFromDatabase(m_database, "menu.frame.font", "Menu.Frame.Font");
m_menustyle.titlefont->loadFromDatabase(m_database, "menu.Title.font", "Menu.Title.Font");
/*
if (I18n::instance()->multibyte()) { if (I18n::instance()->multibyte()) {
readDatabaseFontSet("menu.title.font", "Menu.Title.Font", readDatabaseFontSet("menu.title.font", "Menu.Title.Font",
@ -396,6 +396,7 @@ void Theme::loadMenuStyle() {
m_menustyle.framefont.set_extents = m_menustyle.framefont.set_extents =
XExtentsOfFontSet(m_menustyle.framefont.set); XExtentsOfFontSet(m_menustyle.framefont.set);
} else { } else {
readDatabaseFont("menu.title.font", "Menu.Title.Font", readDatabaseFont("menu.title.font", "Menu.Title.Font",
@ -403,7 +404,7 @@ void Theme::loadMenuStyle() {
readDatabaseFont("menu.frame.font", "Menu.Frame.Font", readDatabaseFont("menu.frame.font", "Menu.Frame.Font",
&m_menustyle.framefont.fontstruct); &m_menustyle.framefont.fontstruct);
} }*/
} }
@ -1001,14 +1002,14 @@ void Theme::reconfigure() {
GCForeground, &gcv); GCForeground, &gcv);
gcv.foreground = m_menustyle.t_text.getPixel(); gcv.foreground = m_menustyle.t_text.getPixel();
if (m_menustyle.titlefont.fontstruct) if (m_menustyle.titlefont->getFontStruct())
gcv.font = m_menustyle.titlefont.fontstruct->fid; gcv.font = m_menustyle.titlefont->getFontStruct()->fid;
XChangeGC(m_display, m_menustyle.t_text_gc, XChangeGC(m_display, m_menustyle.t_text_gc,
gc_value_mask, &gcv); gc_value_mask, &gcv);
gcv.foreground = m_menustyle.f_text.getPixel(); gcv.foreground = m_menustyle.f_text.getPixel();
if (m_menustyle.framefont.fontstruct) if (m_menustyle.framefont->getFontStruct())
gcv.font = m_menustyle.framefont.fontstruct->fid; gcv.font = m_menustyle.framefont->getFontStruct()->fid;
XChangeGC(m_display, m_menustyle.f_text_gc, XChangeGC(m_display, m_menustyle.f_text_gc,
gc_value_mask, &gcv); gc_value_mask, &gcv);

View file

@ -42,19 +42,14 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
// $Id: Theme.hh,v 1.6 2002/02/17 18:49:50 fluxgen Exp $ // $Id: Theme.hh,v 1.7 2002/03/21 10:54:29 fluxgen Exp $
#ifndef THEME_HH #ifndef THEME_HH
#define THEME_HH #define THEME_HH
#ifndef _IMAGE_HH_
#include "Image.hh" #include "Image.hh"
#endif //!_IMAGE_HH_
#ifndef _DRAWUTIL_HH_
#include "DrawUtil.hh" #include "DrawUtil.hh"
#endif //!_MISC_HH_ #include "Font.hh"
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xresource.h> #include <X11/Xresource.h>
@ -74,7 +69,9 @@ public:
BColor t_text, f_text, h_text, d_text; BColor t_text, f_text, h_text, d_text;
BTexture title, frame, hilite; BTexture title, frame, hilite;
GC t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc; GC t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc;
DrawUtil::Font titlefont, framefont; FbTk::Font *titlefont, *framefont;
DrawUtil::Font::FontJustify framefont_justify;
DrawUtil::Font::FontJustify titlefont_justify;
int bullet, bullet_pos; int bullet, bullet_pos;
} MenuStyle; } MenuStyle;