]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/xfont_metrics.C
Yet more dialog tweaking from Rob.
[lyx.git] / src / frontends / xforms / xfont_metrics.C
index f1fce05a85b233e7e56d0b4c4f51db8cdecf954e..49ff1853a82ca8eb50fa9602bcc0a9838e2b4e34 100644 (file)
@@ -1,22 +1,24 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file xfont_metrics.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
+ * \author unknown
+ * \author John Levon 
  *
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2001 The LyX Team.
- *
- * ====================================================== */
+ * Full author contact details are available in file CREDITS
+ */
 
 #include <config.h>
 
 #ifdef __GNUG__
-#pragma implementation
+#pragma implementation "frontends/font_metrics.h"
+#pragma implementation "frontends/xfont_metrics.h"
 #endif
 
 #include "support/lstrings.h"
 #include "xfont_metrics.h"
-#include "FontLoader.h"
+#include "xfont_loader.h"
 #include "lyxrc.h"
 #include "encoding.h"
 #include "language.h"
@@ -28,8 +30,9 @@ namespace {
 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 +44,74 @@ XID getFontID(LyXFont const & f)
 
 } // 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 +131,8 @@ int font_metrics::width(char const * s, size_t n, LyXFont const & f)
                        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 +140,7 @@ int font_metrics::width(char const * s, size_t n, LyXFont const & f)
                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 +156,7 @@ int font_metrics::width(char const * s, size_t n, LyXFont const & f)
 }
 
 
-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 +167,45 @@ int font_metrics::signedWidth(string const & s, LyXFont const & f)
 }
 
 
-//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 +225,24 @@ int font_metrics::width(XChar2b const * s, int n, LyXFont const & f)
                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