]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiFontMetrics.cpp
* fix spelling in comments to please John.
[lyx.git] / src / frontends / qt4 / GuiFontMetrics.cpp
index 5d3a0dd6721fa869bc4765b9dcc8ad63cb46ad70..76ebd907064e088a442cdd03fb2097196c1a2f8e 100644 (file)
 #include "Language.h"
 #include "Dimension.h"
 
-#include "support/unicode.h"
+#include "insets/Inset.h"
 
-using std::string;
+#include "support/lassert.h"
+
+using namespace std;
 
 namespace lyx {
 namespace frontend {
 
+/**
+ * Convert a UCS4 character into a QChar.
+ * This is a hack (it does only make sense for the common part of the UCS4
+ * and UTF16 encodings) and should not be used.
+ * This does only exist because of performance reasons (a real conversion
+ * using iconv is too slow on windows).
+ */
+static inline QChar const ucs4_to_qchar(char_type const ucs4)
+{
+       LASSERT(is_utf16(ucs4), /**/);
+       return QChar(static_cast<unsigned short>(ucs4));
+}
+
+
 // Caution: When using ucs4_to_qchar() in these methods, this is no
 // real conversion but a simple cast in reality. This is the reason
 // why this works well for symbol fonts used in mathed too, even though
@@ -63,7 +79,7 @@ int GuiFontMetrics::lbearing(char_type c) const
        if (!is_utf16(c))
                // FIXME: QFontMetrics::leftBearingdoes not support the
                //        full unicode range. Once it does, we could use:
-               //return metrics_.leftBearing(toqstr(docstring(1,c)));
+               //return metrics_.leftBearing(toqstr(docstring(1, c)));
                return 0;
 
        return metrics_.leftBearing(ucs4_to_qchar(c));
@@ -85,11 +101,12 @@ int GuiFontMetrics::rbearing(char_type c) const
        if (is_utf16(c)) {
                QChar sc = ucs4_to_qchar(c);
                value = width(c) - metrics_.rightBearing(sc);
-       } else
-               // FIXME: QFontMetrics::leftBearingdoes not support the
+       } else {
+               // FIXME: QFontMetrics::leftBearing does not support the
                //        full unicode range. Once it does, we could use:
-               // metrics_.rightBearing(toqstr(docstring(1,c)));
+               // metrics_.rightBearing(toqstr(docstring(1, c)));
                value = width(c);
+       }
 
        rbearing_cache_.insert(c, value);
 
@@ -108,7 +125,7 @@ int GuiFontMetrics::smallcapsWidth(char_type c) const
                else
                        return metrics_.width(qc);
        } else {
-               QString const s = toqstr(docstring(1,c));
+               QString const s = toqstr(docstring(1, c));
                QString const us = s.toUpper();
                if (s != us)
                        return smallcaps_metrics_.width(us);
@@ -163,8 +180,9 @@ int GuiFontMetrics::signedWidth(docstring const & s) const
 void GuiFontMetrics::rectText(docstring const & str,
        int & w, int & ascent, int & descent) const
 {
-       static int const d = 2;
-       w = width(str) + d * 2 + 2;
+       static int const d = Inset::TEXT_TO_INSET_OFFSET / 2;
+
+       w = width(str) + Inset::TEXT_TO_INSET_OFFSET;
        ascent = metrics_.ascent() + d;
        descent = metrics_.descent() + d;
 }
@@ -174,10 +192,8 @@ void GuiFontMetrics::rectText(docstring const & str,
 void GuiFontMetrics::buttonText(docstring const & str,
        int & w, int & ascent, int & descent) const
 {
-       static int const d = 3;
-       w = width(str) + d * 2 + 2;
-       ascent = metrics_.ascent() + d;
-       descent = metrics_.descent() + d;
+       rectText(str, w, ascent, descent);
+       w += Inset::TEXT_TO_INSET_OFFSET;
 }
 
 
@@ -200,7 +216,7 @@ GuiFontMetrics::AscendDescend const GuiFontMetrics::fillMetricsCache(
        if (is_utf16(c))
                r = metrics_.boundingRect(ucs4_to_qchar(c));
        else
-               r = metrics_.boundingRect(toqstr(docstring(1,c)));
+               r = metrics_.boundingRect(toqstr(docstring(1, c)));
 
        AscendDescend ad = { -r.top(), r.bottom() + 1};
        // We could as well compute the width but this is not really
@@ -223,7 +239,7 @@ int GuiFontMetrics::width(char_type c) const
        if (is_utf16(c))
                value = metrics_.width(ucs4_to_qchar(c));
        else
-               value = metrics_.width(toqstr(docstring(1,c)));
+               value = metrics_.width(toqstr(docstring(1, c)));
 
        width_cache_.insert(c, value);
 
@@ -256,5 +272,5 @@ int GuiFontMetrics::descent(char_type c) const
        return value.descent;
 }
 
-} // frontend
-} // lyx
+} // namespace frontend
+} // namespace lyx