summaryrefslogtreecommitdiffstats
path: root/kate/part/katefont.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kate/part/katefont.cpp')
-rw-r--r--kate/part/katefont.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/kate/part/katefont.cpp b/kate/part/katefont.cpp
new file mode 100644
index 000000000..efab0268c
--- /dev/null
+++ b/kate/part/katefont.cpp
@@ -0,0 +1,127 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2002 Christian Couder <christian@kdevelop.org>
+ Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
+ Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
+ Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "katefont.h"
+
+#include <kglobalsettings.h>
+
+#include <qfontinfo.h>
+
+//
+// KateFontMetrics implementation
+//
+
+KateFontMetrics::KateFontMetrics(const QFont& f) : QFontMetrics(f)
+{
+ for (int i=0; i<256; i++) warray[i]=0;
+}
+
+KateFontMetrics::~KateFontMetrics()
+{
+ for (int i=0; i<256; i++)
+ delete[] warray[i];
+}
+
+short * KateFontMetrics::createRow (short *wa, uchar row)
+{
+ wa=warray[row]=new short[256];
+
+ for (int i=0; i<256; i++) wa[i]=-1;
+
+ return wa;
+}
+
+int KateFontMetrics::width(QChar c)
+{
+ uchar cell=c.cell();
+ uchar row=c.row();
+ short *wa=warray[row];
+
+ if (!wa)
+ wa = createRow (wa, row);
+
+ if (wa[cell]<0) wa[cell]=(short) QFontMetrics::width(c);
+
+ return (int)wa[cell];
+}
+
+//
+// KateFontStruct implementation
+//
+
+KateFontStruct::KateFontStruct()
+: myFont(KGlobalSettings::fixedFont()),
+ myFontBold(KGlobalSettings::fixedFont()),
+ myFontItalic(KGlobalSettings::fixedFont()),
+ myFontBI(KGlobalSettings::fixedFont()),
+ myFontMetrics(myFont),
+ myFontMetricsBold(myFontBold),
+ myFontMetricsItalic(myFontItalic),
+ myFontMetricsBI(myFontBI),
+ m_fixedPitch (false)
+{
+ updateFontData ();
+}
+
+KateFontStruct::~KateFontStruct()
+{
+}
+
+void KateFontStruct::updateFontData ()
+{
+ int maxAscent = myFontMetrics.ascent();
+ int maxDescent = myFontMetrics.descent();
+
+ fontHeight = maxAscent + maxDescent + 1;
+ fontAscent = maxAscent;
+
+ m_fixedPitch = QFontInfo( myFont ).fixedPitch();
+}
+
+void KateFontStruct::setFont (const QFont & font)
+{
+ QFontMetrics testFM (font);
+
+ // no valid font tried
+ if ((testFM.ascent() + testFM.descent() + 1) < 1)
+ return;
+
+ myFont = font;
+
+ myFontBold = QFont (font);
+ myFontBold.setBold (true);
+
+ myFontItalic = QFont (font);
+ myFontItalic.setItalic (true);
+
+ myFontBI = QFont (font);
+ myFontBI.setBold (true);
+ myFontBI.setItalic (true);
+
+ myFontMetrics = KateFontMetrics (myFont);
+ myFontMetricsBold = KateFontMetrics (myFontBold);
+ myFontMetricsItalic = KateFontMetrics (myFontItalic);
+ myFontMetricsBI = KateFontMetrics (myFontBI);
+
+ updateFontData ();
+}
+
+// kate: space-indent on; indent-width 2; replace-tabs on;