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.