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