o makes font_metrics a namespace
o moves X-specific metric functions into xforms/

Simple enough change I think, and allows Qt to do its
own thing with the metrics

OK to apply ?

thanks
john


diff -u -r1.1 font_metrics.h
--- frontends/font_metrics.h    24 May 2002 14:34:32 -0000      1.1
+++ frontends/font_metrics.h    11 Jun 2002 20:38:51 -0000
@@ -1,3 +1,85 @@
-//// temporary
+// -*- C++ -*-
+/**
+ * \file font_metrics.h
+ * Copyright 1995-2002 the LyX Team
+ * Read the file COPYING
+ *
+ * \author unknown
+ * \author John Levon <[EMAIL PROTECTED]>
+ */
 
-#include "xforms/xfont_metrics.h"
+#ifndef FONT_METRICS_H
+#define FONT_METRICS_H
+
+#include "LString.h"
+
+class LyXFont;
+
+/**
+ * A namespace holding helper functions for determining
+ * the screen dimensions of fonts.
+ *
+ * The geometry is the standard typographical geometry,
+ * as follows :
+ *                                                                
+ * --------------+------------------<maxAscent
+ *               |          |
+ *               <-------> (right bearing)
+ *               <-> (left bearing)
+ * char ascent>___          |
+ *               ^   oooo   |  oooo              
+ *   origin>____ |  oo  oo  | oo  oo             
+ *              \|  oo  oo  | oo  oo             
+ * --------------+---ooooo--|--oooo-<baseline  
+ *               |      oo  |                 
+ * char          |  oo  oo  |                
+ * descent>______|   oooo   |                
+ *               <-  width ->
+ * --------------+----------+-------<maxDescent
+ *  
+ */
+namespace font_metrics {
+       /// return the maximum ascent of the font
+       int maxAscent(LyXFont const & f);
+       /// return the maximum descent of the font
+       int maxDescent(LyXFont const & f);
+       /// return the ascent of the char in the font
+       int ascent(char c, LyXFont const & f);
+       /// return the descent of the char in the font
+       int descent(char c, LyXFont const & f);
+       /// return the left bearing of the char in the font
+       int lbearing(char c, LyXFont const & f);
+       /// return the right bearing of the char in the font
+       int rbearing(char c, LyXFont const & f);
+       /// return the width of the string in the font
+       int width(char const * s, size_t n, LyXFont const & f);
+       /// return the width of the char in the font
+       inline int width(char c, LyXFont const & f) {
+               return width(&c, 1, f);
+       }
+       /// return the width of the string in the font
+       inline int width(string const & s, LyXFont const & f) {
+               if (s.empty()) return 0;
+               return width(s.data(), s.length(), f);
+       }
+       /// FIXME ??
+       int signedWidth(string const & s, LyXFont const & f);
+       /** 
+        * fill in width,ascent,descent with the values for the
+        * given string in the font.
+        */
+       void rectText(string const & str, LyXFont const & font,
+               int & width, 
+               int & ascent, 
+               int & descent);
+       /** 
+        * fill in width,ascent,descent with the values for the
+        * given string in the font for a button.
+        */
+       void buttonText(string const & str, LyXFont const & font,
+               int & width, 
+               int & ascent, 
+               int & descent);
+};
+
+#endif // FONT_METRICS_H
Index: frontends/xforms/XPainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/XPainter.C,v
retrieving revision 1.3
diff -u -r1.3 XPainter.C
--- frontends/xforms/XPainter.C 29 May 2002 16:21:02 -0000      1.3
+++ frontends/xforms/XPainter.C 11 Jun 2002 20:38:52 -0000
@@ -220,7 +220,7 @@
 
        GC gc = lyxColorHandler->getGCForeground(f.realColor());
        if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
-               font_metrics::XSetFont(display(), gc, f);
+               xfont_metrics::XSetFont(display(), gc, f);
                XDrawString(display(), owner.getPixmap(), gc, x, y, s, ls);
        } else {
                LyXFont smallfont(f);
@@ -229,15 +229,15 @@
                for (size_t i = 0; i < ls; ++i) {
                        char const c = uppercase(s[i]);
                        if (c != s[i]) {
-                               font_metrics::XSetFont(display(), gc, smallfont);
+                               xfont_metrics::XSetFont(display(), gc, smallfont);
                                XDrawString(display(), owner.getPixmap(), gc,
                                            tmpx, y, &c, 1);
-                               tmpx += font_metrics::XTextWidth(smallfont, &c, 1);
+                               tmpx += xfont_metrics::XTextWidth(smallfont, &c, 1);
                        } else {
-                               font_metrics::XSetFont(display(), gc, f);
+                               xfont_metrics::XSetFont(display(), gc, f);
                                XDrawString(display(), owner.getPixmap(), gc,
                                            tmpx, y, &c, 1);
-                               tmpx += font_metrics::XTextWidth(f, &c, 1);
+                               tmpx += xfont_metrics::XTextWidth(f, &c, 1);
                        }
                }
        }
@@ -255,7 +255,7 @@
 {
        GC gc = lyxColorHandler->getGCForeground(f.realColor());
        if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
-               font_metrics::XSetFont(display(), gc, f);
+               xfont_metrics::XSetFont(display(), gc, f);
                XDrawString16(display(), owner.getPixmap(), gc, x, y, s, ls);
        } else {
                LyXFont smallfont(f);
@@ -270,21 +270,21 @@
                                c.byte2 = uppercase(s[i].byte2);
                        }
                        if (c.byte2 != s[i].byte2) {
-                               font_metrics::XSetFont(display(), gc, smallfont);
+                               xfont_metrics::XSetFont(display(), gc, smallfont);
                                XDrawString16(display(), owner.getPixmap(), gc,
                                              tmpx, y, &c, 1);
-                               tmpx += font_metrics::XTextWidth16(smallfont, &c, 1);
+                               tmpx += xfont_metrics::XTextWidth16(smallfont, &c, 1);
                        } else {
-                               font_metrics::XSetFont(display(), gc, f);
+                               xfont_metrics::XSetFont(display(), gc, f);
                                XDrawString16(display(), owner.getPixmap(), gc,
                                              tmpx, y, &c, 1);
-                               tmpx += font_metrics::XTextWidth16(f, &c, 1);
+                               tmpx += xfont_metrics::XTextWidth16(f, &c, 1);
                        }
                }
        }
 
        if (f.underbar() == LyXFont::ON) {
-               underline(f, x, y, font_metrics::width(s, ls, f));
+               underline(f, x, y, xfont_metrics::width(s, ls, f));
        }
 
        return *this;
diff -u -r1.2 xfont_metrics.C
--- frontends/xforms/xfont_metrics.C    24 May 2002 18:24:14 -0000      1.2
+++ frontends/xforms/xfont_metrics.C    11 Jun 2002 20:38:55 -0000
@@ -1,17 +1,17 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file xfont_metrics.C
+ * Copyright 1995-2002 the LyX Team
+ * Read the file COPYING
  *
- *           LyX, The Document Processor
- *
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2001 The LyX Team.
- *
- * ====================================================== */
+ * \author unknown
+ * \author John Levon <[EMAIL PROTECTED]>
+ */
 
 #include <config.h>
 
 #ifdef __GNUG__
-#pragma implementation
+#pragma implementation "frontends/font_metrics.h"
+#pragma implementation "frontends/xfont_metrics.h"
 #endif
 
 #include "support/lstrings.h"
@@ -28,8 +28,9 @@
 inline
 XFontStruct * getXFontstruct(LyXFont const & f)
 {
-       return fontloader.load(f.family(), f.series(),
-                              f.realShape(), f.size());
+       return fontloader.load
+               (f.family(), f.series(),
+               f.realShape(), f.size());
 }
 
 
@@ -41,84 +42,74 @@
 
 } // namespace anon
 
-int font_metrics::maxAscent(LyXFont const & f)
+ 
+namespace font_metrics {
+ 
+int maxAscent(LyXFont const & f)
 {
        return getXFontstruct(f)->ascent;
 }
 
 
-int font_metrics::maxDescent(LyXFont const & f)
+int maxDescent(LyXFont const & f)
 {
        return getXFontstruct(f)->descent;
 }
 
 
-int font_metrics::ascent(char c, LyXFont const & f)
+int ascent(char c, LyXFont const & f)
 {
        XFontStruct * finfo = getXFontstruct(f);
        unsigned int uc = static_cast<unsigned char>(c);
        if (finfo->per_char
            && uc >= finfo->min_char_or_byte2
-           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1)
+           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1) 
                return finfo->per_char[uc - finfo->min_char_or_byte2].ascent;
        else
                return finfo->ascent;
 }
 
 
-int font_metrics::descent(char c, LyXFont const & f)
+int descent(char c, LyXFont const & f)
 {
        XFontStruct * finfo = getXFontstruct(f);
        unsigned int uc = static_cast<unsigned char>(c);
        if (finfo->per_char
            && uc >= finfo->min_char_or_byte2
-           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1)
+           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1) 
                return finfo->per_char[uc - finfo->min_char_or_byte2].descent;
        else
                return finfo->descent;
 }
 
 
-int font_metrics::lbearing(char c, LyXFont const & f)
+int lbearing(char c, LyXFont const & f)
 {
        XFontStruct * finfo = getXFontstruct(f);
        unsigned int uc = static_cast<unsigned char>(c);
        if (finfo->per_char
            && uc >= finfo->min_char_or_byte2
-           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1)
+           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1) 
                return finfo->per_char[uc - finfo->min_char_or_byte2].lbearing;
        else
                return 0;
 }
 
 
-int font_metrics::rbearing(char c, LyXFont const & f)
+int rbearing(char c, LyXFont const & f)
 {
        XFontStruct * finfo = getXFontstruct(f);
        unsigned int uc = static_cast<unsigned char>(c);
        if (finfo->per_char
            && uc >= finfo->min_char_or_byte2
-           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1)
+           && uc <= finfo->max_char_or_byte2+256*finfo->max_byte1) 
                return finfo->per_char[uc - finfo->min_char_or_byte2].rbearing;
        else
                return width(c, f);
 }
 
 
-int font_metrics::width(char c, LyXFont const & f)
-{ 
-       return width(&c, 1, f);
-}
-
-
-int font_metrics::width(string const & s, LyXFont const & f)
-{
-       if (s.empty()) return 0;
-       return width(s.data(), s.length(), f);
-}
- 
- 
-int font_metrics::width(char const * s, size_t n, LyXFont const & f)
+int width(char const * s, size_t n, LyXFont const & f)
 {
        if (!lyxrc.use_gui)
                return n;
@@ -138,8 +129,8 @@
                        Uchar c = encoding->ucs(s[i]);
                        xs[i].byte1 = c >> 8;
                        xs[i].byte2 = c & 0xff;
-               }
-               int result = width(xs.get(), n, font);
+                }
+               int result = xfont_metrics::width(xs.get(), n, font);
                return result;
        }
 
@@ -147,7 +138,7 @@
                return ::XTextWidth(getXFontstruct(f), s, n);
        } else {
                // emulate smallcaps since X doesn't support this
-               unsigned int result = 0;
+               int result = 0;
                LyXFont smallfont(f);
                smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
                for (size_t i = 0; i < n; ++i) {
@@ -163,7 +154,7 @@
 }
 
 
-int font_metrics::signedWidth(string const & s, LyXFont const & f)
+int signedWidth(string const & s, LyXFont const & f)
 {
        if (s.empty())
                return 0;
@@ -174,17 +165,45 @@
 }
 
 
-//int font_metrics::width(wstring const & s, int n, LyXFont const & f)
-int font_metrics::width(XChar2b const * s, int n, LyXFont const & f)
+void rectText(string const & str, LyXFont const & font,
+       int & width, 
+       int & ascent, 
+       int & descent)
+{
+       static int const d = 2;
+       width = font_metrics::width(str, font) + d * 2 + 2;
+       ascent = font_metrics::maxAscent(font) + d;
+       descent = font_metrics::maxDescent(font) + d;
+}
+
+
+
+void buttonText(string const & str, LyXFont const & font,
+       int & width, 
+       int & ascent, 
+       int & descent)
+{
+       static int const d = 3;
+       
+       width = font_metrics::width(str, font) + d * 2 + 2;
+       ascent = font_metrics::maxAscent(font) + d;
+       descent = font_metrics::maxDescent(font) + d;
+}
+
+} // namespace font_metrics
+ 
+namespace xfont_metrics {
+ 
+int width(XChar2b const * s, int n, LyXFont const & f)
 {
        if (!lyxrc.use_gui)
                return n;
-
+       
        if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
                return ::XTextWidth16(getXFontstruct(f), s, n);
        } else {
                // emulate smallcaps since X doesn't support this
-               unsigned int result = 0;
+               int result = 0;
                static XChar2b c;
                LyXFont smallfont(f);
                smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
@@ -204,46 +223,24 @@
                return result;
        }
 }
+ 
 
-int font_metrics::XTextWidth(LyXFont const & f, char const * str, int count)
+int XTextWidth(LyXFont const & f, char const * str, int count)
 {
        return ::XTextWidth(getXFontstruct(f), str, count);
 }
 
 
-int font_metrics::XTextWidth16(LyXFont const & f, XChar2b const * str, int count)
+int XTextWidth16(LyXFont const & f, XChar2b const * str, int count)
 {
        return ::XTextWidth16(getXFontstruct(f), str, count);
 }
 
 
-void font_metrics::XSetFont(Display * display, GC gc, LyXFont const & f)
+/// hmm, not a metric !
+void XSetFont(Display * display, GC gc, LyXFont const & f) 
 {
        ::XSetFont(display, gc, getFontID(f));
 }
-
-
-void font_metrics::rectText(string const & str, LyXFont const & font,
-             int & width, int & ascent, int & descent)
-{
-       static int const d = 2;
-       width = font_metrics::width(str, font) + d * 2 + 2;
-       ascent = font_metrics::maxAscent(font) + d;
-       descent = font_metrics::maxDescent(font) + d;
-}
-
-
-
-void font_metrics::buttonText(string const & str, LyXFont const & font,
-               int & width, int & ascent, int & descent)
-{
-       static int const d = 3;
-
-       width = font_metrics::width(str, font) + d * 2 + 2;
-       ascent = font_metrics::maxAscent(font) + d;
-       descent = font_metrics::maxDescent(font) + d;
-}
-
-
-//} // end of namespace font
-//} // end of namespace lyx
+ 
+} // namespace xfont_metrics
Index: frontends/xforms/xfont_metrics.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/xfont_metrics.h,v
retrieving revision 1.1
diff -u -r1.1 xfont_metrics.h
--- frontends/xforms/xfont_metrics.h    24 May 2002 14:34:32 -0000      1.1
+++ frontends/xforms/xfont_metrics.h    11 Jun 2002 20:38:55 -0000
@@ -1,58 +1,29 @@
 // -*- C++ -*-
-/* This file is part of
- * ======================================================
+/**
+ * \file xfont_metrics.h
+ * Copyright 1995-2002 the LyX Team
+ * Read the file COPYING
  *
- *           LyX, The Document Processor
- *
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2001 The LyX Team.
- *
- * ====================================================== */
+ * \author unknown
+ * \author John Levon <[EMAIL PROTECTED]>
+ */
 
-#ifndef FONT_H
-#define FONT_H
+#ifndef XFONT_METRICS_H
+#define XFONT_METRICS_H
 
 #ifdef __GNUG__
 #pragma interface
 #endif
 
-#include <X11/Xlib.h>
-
 #include "LString.h"
 
+#include "font_metrics.h"
+ 
+#include <X11/Xlib.h>
+ 
 class LyXFont;
 
-namespace font_metrics {
-//namespace lyx {
-//namespace font {
-///
-//istruct lyxfont {
-       ///
-       int maxAscent(LyXFont const & f);
-       ///
-       int maxDescent(LyXFont const & f);
-       ///
-       int ascent(char c, LyXFont const & f);
-       ///
-       int descent(char c, LyXFont const & f);
-       ///
-       int lbearing(char c, LyXFont const & f);
-       ///
-       int rbearing(char c, LyXFont const & f);
-       ///
-       int width(char const * s, size_t n, LyXFont const & f);
-       ///
-       int width(char c, LyXFont const & f);
-       ///
-       int width(string const & s, LyXFont const & f);
-       ///
-       //static
-       //int width(char const * s, LyXFont const & f) {
-       //      return width(s, strlen(s), f);
-       //}
-       ///
-       int signedWidth(string const & s, LyXFont const & f);
-       ///
+namespace xfont_metrics {
        int XTextWidth(LyXFont const & f, char const * str, int count);
        ///
        int width(XChar2b const * s, int n, LyXFont const & f);
@@ -60,30 +31,6 @@
        int XTextWidth16(LyXFont const & f, XChar2b const * str, int count);
        ///
        void XSetFont(Display * display, GC gc, LyXFont const & f);
-       // A couple of more high-level metrics
-       ///
-       void rectText(string const & str, LyXFont const & font,
-                     int & width, int & ascent, int & descent);
-       ///
-       void buttonText(string const & str, LyXFont const & font,
-                       int & width, int & ascent, int & descent);
-//};
-}
-
-//} // end of namespace font
-
-// import into namespace lyx
-//using font::maxAscent;
-//using font::maxDescent;
-//using font::ascent;
-//using font::descent;
-//using font::lbearing;
-//using font::rbearing;
-//using font::width;
-//using font::signedWidth;
-//using font::XTextWidth;
-//using font::XSetFont;
-
-//} // end of namespace lyx
-
-#endif
+} // namespace xfont_metrics
+ 
+#endif // FONT_METRICS_H

Reply via email to