lyx_mirror/src/frontends/xforms/FontInfo.h
Angus Leeming 2a31934f38 Wrap most of the frontend code up inside namespace lyx::frontend.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8766 a592a061-630c-0410-9148-cb99ea01b6c8
2004-05-19 15:11:37 +00:00

97 lines
2.0 KiB
C++

// -*- C++ -*-
/**
* \file FontInfo.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Asger Alstrup
* \author John Levon
*
* Full author contact details are available in file CREDITS.
*/
#ifndef FONTINFO_H
#define FONTINFO_H
#include <boost/scoped_array.hpp>
#include <string>
namespace lyx {
namespace frontend {
/** This class manages a font.
The idea is to create a FontInfo object with a font name pattern with a
wildcard at the size field. Then this object can host request for font-
instances of any given size. If no exact match is found, the closest size
is chosen instead. If the font is scalable, the flag
lyxrc.use_scalable_fonts determines whether to allow scalable fonts to
give an exact match.
*/
class FontInfo {
public:
///
FontInfo() { init(); }
///
explicit FontInfo(std::string const & pat)
: pattern(pat) { init(); }
/// Does any font match our pattern?
bool exist() {
query();
return matches != 0;
}
/// Is this font scalable?
bool isScalable() {
query();
return scalable;
}
/// Get existing pattern
std::string const & getPattern() const { return pattern; }
/// Set new pattern
void setPattern(std::string const & pat);
/** Return full name of font close to this size.
If impossible, result is the empty string */
std::string const getFontname(int size);
private:
/// Font pattern (with wildcard for size)
std::string pattern;
/// Available size list
boost::scoped_array<int> sizes;
/// Corresponding name list
boost::scoped_array<std::string> strings;
/// Number of matches
int matches;
/// Did we query X about this font?
bool queried;
/// Is this font scalable?
bool scalable;
/// Which index points to scalable font entry?
int scaleindex;
/// Initialize empty record
void init();
/// Ask X11 about this font pattern
void query();
/// Build newly sized font string
std::string const resize(std::string const &, int size) const;
};
} // namespace frontend
} // namespace lyx
#endif // FONTINFO_H