Kate
katefont.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "katefont.h"
00023
00024 #include <kglobalsettings.h>
00025
00026 #include <qfontinfo.h>
00027
00028
00029
00030
00031
00032 KateFontMetrics::KateFontMetrics(const QFont& f) : QFontMetrics(f)
00033 {
00034 for (int i=0; i<256; i++) warray[i]=0;
00035 }
00036
00037 KateFontMetrics::~KateFontMetrics()
00038 {
00039 for (int i=0; i<256; i++)
00040 delete[] warray[i];
00041 }
00042
00043 short * KateFontMetrics::createRow (short *wa, uchar row)
00044 {
00045 wa=warray[row]=new short[256];
00046
00047 for (int i=0; i<256; i++) wa[i]=-1;
00048
00049 return wa;
00050 }
00051
00052 int KateFontMetrics::width(QChar c)
00053 {
00054 uchar cell=c.cell();
00055 uchar row=c.row();
00056 short *wa=warray[row];
00057
00058 if (!wa)
00059 wa = createRow (wa, row);
00060
00061 if (wa[cell]<0) wa[cell]=(short) QFontMetrics::width(c);
00062
00063 return (int)wa[cell];
00064 }
00065
00066
00067
00068
00069
00070 KateFontStruct::KateFontStruct()
00071 : myFont(KGlobalSettings::fixedFont()),
00072 myFontBold(KGlobalSettings::fixedFont()),
00073 myFontItalic(KGlobalSettings::fixedFont()),
00074 myFontBI(KGlobalSettings::fixedFont()),
00075 myFontMetrics(myFont),
00076 myFontMetricsBold(myFontBold),
00077 myFontMetricsItalic(myFontItalic),
00078 myFontMetricsBI(myFontBI),
00079 m_fixedPitch (false)
00080 {
00081 updateFontData ();
00082 }
00083
00084 KateFontStruct::~KateFontStruct()
00085 {
00086 }
00087
00088 void KateFontStruct::updateFontData ()
00089 {
00090 int maxAscent = myFontMetrics.ascent();
00091 int maxDescent = myFontMetrics.descent();
00092
00093 fontHeight = maxAscent + maxDescent + 1;
00094 fontAscent = maxAscent;
00095
00096 m_fixedPitch = QFontInfo( myFont ).fixedPitch();
00097 }
00098
00099 void KateFontStruct::setFont (const QFont & font)
00100 {
00101 QFontMetrics testFM (font);
00102
00103
00104 if ((testFM.ascent() + testFM.descent() + 1) < 1)
00105 return;
00106
00107 myFont = font;
00108
00109 myFontBold = QFont (font);
00110 myFontBold.setBold (true);
00111
00112 myFontItalic = QFont (font);
00113 myFontItalic.setItalic (true);
00114
00115 myFontBI = QFont (font);
00116 myFontBI.setBold (true);
00117 myFontBI.setItalic (true);
00118
00119 myFontMetrics = KateFontMetrics (myFont);
00120 myFontMetricsBold = KateFontMetrics (myFontBold);
00121 myFontMetricsItalic = KateFontMetrics (myFontItalic);
00122 myFontMetricsBI = KateFontMetrics (myFontBI);
00123
00124 updateFontData ();
00125 }
00126
00127