00001 #ifndef __FONTCONTROL_H
00002 #define __FONTCONTROL_H
00003
00004 #include <qfontmetrics.h>
00005 #include "StyleConsts.h"
00006
00007 class FontControl
00008 {
00009 int * m_fontsizes;
00010 int m_size, g_size;
00011 QString m_fontname;
00012 QString m_fixedfontname;
00013 int m_maxsize;
00014 bool m_hasCourier;
00015 int m_leading, m_extraspace;
00016 unsigned char m_basesize;
00017 bool m_fixgraphics;
00018 public:
00019 void FixGraphics(bool _b)
00020 {
00021 m_fixgraphics = _b;
00022 }
00023 bool FixGraphics()
00024 {
00025 return m_fixgraphics;
00026 }
00027 void setBaseSize(unsigned char _s) { m_basesize = _s; }
00028 unsigned char getBaseSize() { return m_basesize; }
00029 int gzoom();
00030 FontControl(QString n = "helvetica", int size = 10)
00031 :
00032 m_fontsizes(NULL), m_hasCourier(false), m_leading(0), m_extraspace(0), m_fixgraphics(true)
00033 {
00034 ChangeFont(n, size);
00035 }
00036 ~FontControl()
00037 {
00038 if (m_fontsizes != NULL) delete [] m_fontsizes;
00039 }
00040 void hasCourier(bool _b, const QString& _nm)
00041 {
00042 m_hasCourier = _b;
00043 m_fixedfontname = _nm;
00044 }
00045 QString& fixedfontname() { return m_fixedfontname; }
00046 bool hasCourier() { return m_hasCourier; }
00047 QString name() { return m_fontname; }
00048 int currentsize() { return (m_fontsizes == NULL) ? 0 : m_fontsizes[m_size]; }
00049 int getsize(const CStyle& size)
00050 {
00051 return getsize(size.getFontSize());
00052 }
00053 int getsize(int _offset)
00054 {
00055 int tgt = m_size+_offset;
00056 if (tgt < 0)
00057 {
00058 tgt = 0;
00059 }
00060 if (tgt >= m_maxsize)
00061 {
00062 tgt = m_maxsize - 1;
00063 }
00064 return tgt >= 0 ? m_fontsizes[tgt] : 12;
00065 }
00066 int ascent()
00067 {
00068 QFont f(name(), currentsize());
00069 QFontMetrics fm(f);
00070 return fm.ascent();
00071 }
00072 int ascent(const CStyle& ch)
00073 {
00074 QFont f(name(), getsize(ch));
00075 QFontMetrics fm(f);
00076 return fm.ascent();
00077 }
00078 int descent()
00079 {
00080 QFont f(name(), currentsize());
00081 QFontMetrics fm(f);
00082 return fm.descent();
00083 }
00084 int descent(const CStyle& ch)
00085 {
00086 QFont f(name(), getsize(ch));
00087 QFontMetrics fm(f);
00088 return fm.descent();
00089 }
00090 int lineSpacing()
00091 {
00092 QFont f(name(), currentsize());
00093 QFontMetrics fm(f);
00094 return fm.lineSpacing();
00095 }
00096 int lineSpacing(const CStyle& ch)
00097 {
00098 QFont f(name(), getsize(ch));
00099 QFontMetrics fm(f);
00100 return fm.lineSpacing();
00101 }
00102 bool decreasesize()
00103 {
00104 if (m_fixgraphics)
00105 {
00106 if (--m_size < 0)
00107 {
00108 m_size = 0;
00109 return false;
00110 }
00111 g_size = m_size;
00112 }
00113 else
00114 {
00115 if (g_size-- == m_size)
00116 {
00117 if (--m_size < 0)
00118 {
00119 m_size = 0;
00120 }
00121 }
00122 }
00123
00124 return true;
00125 }
00126 bool increasesize()
00127 {
00128 if (m_fixgraphics)
00129 {
00130 if (++m_size >= m_maxsize)
00131 {
00132 m_size = m_maxsize - 1;
00133 return false;
00134 }
00135 g_size = m_size;
00136 }
00137 else
00138 {
00139 if (g_size++ == m_size)
00140 {
00141 if (++m_size >= m_maxsize)
00142 {
00143 m_size = m_maxsize - 1;
00144 }
00145 }
00146 }
00147 return true;
00148 }
00149 bool ChangeFont(QString& n)
00150 {
00151 return ChangeFont(n, currentsize());
00152 }
00153 bool ChangeFont(QString& n, int tgt);
00154 void setlead(int _lead)
00155 {
00156 m_leading = _lead;
00157 }
00158 int getlead()
00159 {
00160 return m_leading;
00161 }
00162 void setextraspace(int _lead)
00163 {
00164 m_extraspace = _lead;
00165 }
00166 int getextraspace()
00167 {
00168 return m_extraspace;
00169 }
00170 };
00171
00172 #endif