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 myFont = font;
00102
00103 myFontBold =
QFont (font);
00104 myFontBold.setBold (
true);
00105
00106 myFontItalic =
QFont (font);
00107 myFontItalic.setItalic (
true);
00108
00109 myFontBI =
QFont (font);
00110 myFontBI.setBold (
true);
00111 myFontBI.setItalic (
true);
00112
00113 myFontMetrics = KateFontMetrics (myFont);
00114 myFontMetricsBold = KateFontMetrics (myFontBold);
00115 myFontMetricsItalic = KateFontMetrics (myFontItalic);
00116 myFontMetricsBI = KateFontMetrics (myFontBI);
00117
00118 updateFontData ();
00119 }
00120
00121