simpliofy {Gui}FontLoader architecture a bit

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23842 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2008-03-20 00:00:53 +00:00
parent bef955a971
commit de17493932
7 changed files with 79 additions and 82 deletions

View File

@ -9,8 +9,8 @@
* Full author contact details are available in file CREDITS.
*/
#ifndef LYX_FONTLOADER_H
#define LYX_FONTLOADER_H
#ifndef FONTLOADER_H
#define FONTLOADER_H
namespace lyx {
@ -25,18 +25,19 @@ class FontLoader
{
public:
///
FontLoader() {}
///
virtual ~FontLoader() {}
FontLoader();
/// Clears cache
~FontLoader();
/// Update fonts after zoom, dpi, font names, or norm change
virtual void update() = 0;
// (basically by deleting all cached values)
void update();
/// Is the given font available ?
virtual bool available(FontInfo const & f) = 0;
bool available(FontInfo const & f);
/// Get the Font metrics for this FontInfo
virtual FontMetrics const & metrics(FontInfo const & f) = 0;
FontMetrics const & metrics(FontInfo const & f);
};
@ -47,4 +48,4 @@ extern frontend::FontLoader & theFontLoader();
} // namespace lyx
#endif // QFONT_LOADER_H
#endif // FONTLOADER_H

View File

@ -14,7 +14,7 @@
#define GUIAPPLICATION_H
#include "ColorCache.h"
#include "GuiFontLoader.h"
#include "FontLoader.h"
#include "GuiClipboard.h"
#include "GuiSelection.h"
#include "Menus.h"
@ -104,8 +104,6 @@ public:
///
ColorCache & colorCache() { return color_cache_; }
///
GuiFontLoader & guiFontLoader() { return font_loader_; }
/// return a suitable serif font name.
virtual QString const romanFontName();
@ -142,7 +140,7 @@ private:
///
GuiSelection selection_;
///
GuiFontLoader font_loader_;
FontLoader font_loader_;
///
ColorCache color_cache_;
///

View File

@ -13,6 +13,7 @@
#include "GuiDelimiter.h"
#include "GuiApplication.h"
#include "GuiFontLoader.h"
#include "GuiView.h"
#include "qt_helpers.h"
@ -91,8 +92,7 @@ GuiDelimiter::GuiDelimiter(GuiView & lv)
lwi->setToolTip(toqstr(delim));
FontInfo lyxfont;
lyxfont.setFamily(ms.fontfamily);
QFont const & symbol_font = guiApp->guiFontLoader().get(lyxfont);
lwi->setFont(symbol_font);
lwi->setFont(frontend::getFont(lyxfont));
list_items[ms.unicode] = lwi;
leftLW->addItem(lwi);
}

View File

@ -1,5 +1,5 @@
/**
* \file GuiFontLoader.cpp
* \file FontLoader.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -11,6 +11,9 @@
#include <config.h>
#include "FontLoader.h"
#include "FontInfo.h"
#include "GuiFontLoader.h"
#include "qt_helpers.h"
@ -27,6 +30,8 @@
#include <QFontInfo>
#include <QFontDatabase>
#include <boost/assert.hpp>
using namespace std;
using namespace lyx::support;
@ -34,7 +39,6 @@ QString const math_fonts[] = {"cmex10", "cmmi10", "cmr10", "cmsy10",
"eufm10", "msam10", "msbm10", "wasy10", "esint10"};
int const num_math_fonts = sizeof(math_fonts) / sizeof(*math_fonts);
namespace lyx {
extern docstring const stateText(FontInfo const & f);
@ -91,10 +95,31 @@ SymbolFont symbol_fonts[] = {
"-*-esint10-medium-*-*-*-*-*-*-*-*-*-*-*" }
};
size_t const nr_symbol_fonts = sizeof(symbol_fonts) / sizeof(SymbolFont);
size_t const nr_symbol_fonts = sizeof(symbol_fonts) / sizeof(symbol_fonts[0]);
/// BUTT ugly !
static GuiFontInfo * fontinfo_[NUM_FAMILIES][2][4][10];
QString getRawName(QString const & family)
/// Get font info (font + metrics) for the given LyX font.
// if not cached, create it.
GuiFontInfo & fontinfo(FontInfo const & f)
{
BOOST_ASSERT(f.family() < NUM_FAMILIES);
BOOST_ASSERT(f.series() < 2);
BOOST_ASSERT(f.realShape() < 4);
BOOST_ASSERT(f.size() < 10);
// fi is a reference to the pointer type (GuiFontInfo *) in the
// fontinfo_ table.
GuiFontInfo * & fi =
fontinfo_[f.family()][f.series()][f.realShape()][f.size()];
if (!fi)
fi = new GuiFontInfo(f);
return *fi;
}
QString rawName(QString const & family)
{
for (size_t i = 0; i < nr_symbol_fonts; ++i)
if (family == symbol_fonts[i].family)
@ -105,7 +130,7 @@ QString getRawName(QString const & family)
}
QString const symbolFamily(FontFamily family)
QString symbolFamily(FontFamily family)
{
for (size_t i = 0; i < nr_symbol_fonts; ++i) {
if (family == symbol_fonts[i].lyx_family)
@ -168,7 +193,7 @@ QFont symbolFont(QString const & family, bool * ok)
// A simple setFamily() fails on Qt 2
QString const rawName = getRawName(family);
QString const rawName = rawName(family);
LYXERR(Debug::FONT, "Trying " << fromqstr(rawName) << " ... ");
font.setRawName(rawName);
@ -186,7 +211,7 @@ QFont symbolFont(QString const & family, bool * ok)
} // namespace anon
GuiFontLoader::GuiFontLoader()
FontLoader::FontLoader()
{
QString const fonts_dir =
toqstr(addPath(package().system_support().absFilename(), "fonts"));
@ -208,7 +233,7 @@ GuiFontLoader::GuiFontLoader()
}
void GuiFontLoader::update()
void FontLoader::update()
{
for (int i1 = 0; i1 < NUM_FAMILIES; ++i1) {
for (int i2 = 0; i2 < 2; ++i2)
@ -221,7 +246,7 @@ void GuiFontLoader::update()
}
GuiFontLoader::~GuiFontLoader()
FontLoader::~FontLoader()
{
update();
}
@ -328,7 +353,7 @@ GuiFontInfo::GuiFontInfo(FontInfo const & f)
}
bool GuiFontLoader::available(FontInfo const & f)
bool FontLoader::available(FontInfo const & f)
{
static vector<int> cache_set(NUM_FAMILIES, false);
static vector<int> cache(NUM_FAMILIES, false);
@ -352,5 +377,22 @@ bool GuiFontLoader::available(FontInfo const & f)
return true;
}
FontMetrics const & FontLoader::metrics(FontInfo const & f)
{
return fontinfo(f).metrics;
}
/// Get the QFont for this FontInfo
QFont const & getFont(FontInfo const & f)
{
return fontinfo(f).font;
}
/// Get the QFont for this FontInfo
GuiFontInfo const & getFontInfo(FontInfo const & f)
{
return fontinfo(f);
}
} // namespace frontend
} // namespace lyx

View File

@ -9,21 +9,13 @@
* Full author contact details are available in file CREDITS.
*/
#ifndef QT4_FONTLOADER_H
#define QT4_FONTLOADER_H
#include "frontends/FontLoader.h"
#include "FontInfo.h"
#ifndef GUI_FONTLOADER_H
#define GUI_FONTLOADER_H
#include "GuiFontMetrics.h"
#include "Encoding.h"
#include <QFont>
#include <boost/assert.hpp>
namespace lyx {
namespace frontend {
@ -43,50 +35,12 @@ public:
};
/// Hold info about a particular font
class GuiFontLoader : public FontLoader
{
public:
///
GuiFontLoader();
/// Destructor
virtual ~GuiFontLoader();
virtual void update();
virtual bool available(FontInfo const & f);
inline virtual FontMetrics const & metrics(FontInfo const & f) {
return fontinfo(f).metrics;
}
// Load font
GuiFontInfo const & getFontInfo(FontInfo const & f);
/// Get the QFont for this FontInfo
QFont const & get(FontInfo const & f) {
return fontinfo(f).font;
}
/// Get font info (font + metrics) for the given LyX font.
GuiFontInfo & fontinfo(FontInfo const & f) {
BOOST_ASSERT(f.family() < NUM_FAMILIES);
BOOST_ASSERT(f.series() < 2);
BOOST_ASSERT(f.realShape() < 4);
BOOST_ASSERT(f.size() < 10);
// fi is a reference to the pointer type (GuiFontInfo *) in the
// fontinfo_ table.
GuiFontInfo * & fi =
fontinfo_[f.family()][f.series()][f.realShape()][f.size()];
if (!fi)
fi = new GuiFontInfo(f);
return *fi;
}
private:
/// BUTT ugly !
GuiFontInfo * fontinfo_[NUM_FAMILIES][2][4][10];
};
QFont const & getFont(FontInfo const & f);
} // namespace frontend
} // namespace lyx
#endif // QT4_FONTLOADER_H
#endif // GUI_FONTLOADER_H

View File

@ -14,6 +14,7 @@
#include "GuiPainter.h"
#include "GuiApplication.h"
#include "GuiFontLoader.h"
#include "GuiFontMetrics.h"
#include "GuiImage.h"
#include "qt_helpers.h"
@ -271,8 +272,8 @@ int GuiPainter::smallCapsText(int x, int y,
FontInfo smallfont(f);
smallfont.decSize().decSize().setShape(UP_SHAPE);
QFont const & qfont = guiApp->guiFontLoader().get(f);
QFont const & qsmallfont = guiApp->guiFontLoader().get(smallfont);
QFont const & qfont = getFont(f);
QFont const & qsmallfont = getFont(smallfont);
setQPainterPen(computeColor(f.realColor()));
int textwidth = 0;
@ -318,7 +319,7 @@ int GuiPainter::text(int x, int y, docstring const & s,
str = ' ' + str;
#endif
GuiFontInfo & fi = guiApp->guiFontLoader().fontinfo(f);
GuiFontInfo const & fi = getFontInfo(f);
int textwidth;

View File

@ -35,11 +35,11 @@
#include "BufferView.h"
#include "Converter.h"
#include "Cursor.h"
#include "Encoding.h"
#include "ErrorList.h"
#include "Format.h"
#include "FuncStatus.h"
#include "FuncRequest.h"
#include "support/gettext.h"
#include "Intl.h"
#include "Layout.h"
#include "Lexer.h"
@ -57,6 +57,7 @@
#include "support/FileFilterList.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/gettext.h"
#include "support/ForkedCalls.h"
#include "support/lstrings.h"
#include "support/os.h"