katefont.cpp
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 
00027 
00028 
00029 
00030 KateFontMetrics::KateFontMetrics(const QFont& f) : QFontMetrics(f)
00031 {
00032   for (int i=0; i<256; i++) warray[i]=0;
00033 }
00034 
00035 KateFontMetrics::~KateFontMetrics()
00036 {
00037   for (int i=0; i<256; i++)
00038     delete[] warray[i];
00039 }
00040 
00041 short * KateFontMetrics::createRow (short *wa, uchar row)
00042 {
00043   wa=warray[row]=new short[256];
00044 
00045   for (int i=0; i<256; i++) wa[i]=-1;
00046 
00047   return wa;
00048 }
00049 
00050 int KateFontMetrics::width(QChar c)
00051 {
00052   uchar cell=c.cell();
00053   uchar row=c.row();
00054   short *wa=warray[row];
00055 
00056   if (!wa)
00057     wa = createRow (wa, row);
00058 
00059   if (wa[cell]<0) wa[cell]=(short) QFontMetrics::width(c);
00060 
00061   return (int)wa[cell];
00062 }
00063 
00064 
00065 
00066 
00067 
00068 FontStruct::FontStruct()
00069 : myFont(KGlobalSettings::fixedFont()),
00070   myFontBold(KGlobalSettings::fixedFont()),
00071   myFontItalic(KGlobalSettings::fixedFont()),
00072   myFontBI(KGlobalSettings::fixedFont()),
00073   myFontMetrics(myFont),
00074   myFontMetricsBold(myFontBold),
00075   myFontMetricsItalic(myFontItalic),
00076   myFontMetricsBI(myFontBI)
00077 {
00078   updateFontData ();
00079 }
00080 
00081 FontStruct::~FontStruct()
00082 {
00083 }
00084 
00085 void FontStruct::updateFontData ()
00086 {
00087   int maxAscent = myFontMetrics.ascent();
00088   int maxDescent = myFontMetrics.descent();
00089 
00090   fontHeight = maxAscent + maxDescent + 1;
00091   fontAscent = maxAscent;
00092 }
00093 
00094 int FontStruct::width(const QString& text, int col, bool bold, bool italic, int tabWidth)
00095 {
00096   if (text[col] == QChar('\t'))
00097     return tabWidth * myFontMetrics.width(' ');
00098 
00099   return (bold) ?
00100     ( (italic) ?
00101       myFontMetricsBI.charWidth(text, col) :
00102       myFontMetricsBold.charWidth(text, col) ) :
00103     ( (italic) ?
00104       myFontMetricsItalic.charWidth(text, col) :
00105       myFontMetrics.charWidth(text, col) );
00106 }
00107 
00108 int FontStruct::width(const QChar& c, bool bold, bool italic, int tabWidth)
00109 {
00110   if (c == QChar('\t'))
00111     return tabWidth * myFontMetrics.width(' ');
00112 
00113   return (bold) ?
00114     ( (italic) ?
00115       myFontMetricsBI.width(c) :
00116       myFontMetricsBold.width(c) ) :
00117     ( (italic) ?
00118       myFontMetricsItalic.width(c) :
00119       myFontMetrics.width(c) );
00120 }
00121 
00122 void FontStruct::setFont (const QFont & font)
00123 {
00124   myFont = font;
00125 
00126   myFontBold = QFont (font);
00127   myFontBold.setBold (true);
00128 
00129   myFontItalic = QFont (font);
00130   myFontItalic.setItalic (true);
00131 
00132   myFontBI = QFont (font);
00133   myFontBI.setBold (true);
00134   myFontBI.setItalic (true);
00135 
00136   myFontMetrics = KateFontMetrics (myFont);
00137   myFontMetricsBold = KateFontMetrics (myFontBold);
00138   myFontMetricsItalic = KateFontMetrics (myFontItalic);
00139   myFontMetricsBI = KateFontMetrics (myFontBI);
00140 
00141   updateFontData ();
00142 }
00143 
00144 
 
This file is part of the documentation for kate Library Version 3.2.0.