mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Improve detection of our math fonts
It turns out that Qt font selection via style name is broken on Windows (QTBUG-101436). As we use our own style name for discriminating our math fonts and applying proper kerning, we need a fallback method. With this commit we check for the family name when the style name does not match. In computing the kerning we also consider the right bearing reported by the font instead of the width of the enclosing bounding box, as this produces better results (see bug 13087). Fixes #13087.
This commit is contained in:
parent
d813465690
commit
d632753dea
@ -44,6 +44,15 @@ int const num_math_fonts = sizeof(math_fonts) / sizeof(*math_fonts);
|
|||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
|
bool isMathFamily(QString const & name)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < num_math_fonts; ++i) {
|
||||||
|
if (math_fonts[i] == name)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,11 +13,14 @@
|
|||||||
#define GUI_FONTLOADER_H
|
#define GUI_FONTLOADER_H
|
||||||
|
|
||||||
class QFont;
|
class QFont;
|
||||||
|
class QString;
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
class FontInfo;
|
class FontInfo;
|
||||||
|
|
||||||
|
bool isMathFamily(QString const & name);
|
||||||
|
|
||||||
namespace frontend {
|
namespace frontend {
|
||||||
|
|
||||||
class GuiFontMetrics;
|
class GuiFontMetrics;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "GuiFontLoader.h"
|
||||||
#include "GuiFontMetrics.h"
|
#include "GuiFontMetrics.h"
|
||||||
|
|
||||||
#include "qt_helpers.h"
|
#include "qt_helpers.h"
|
||||||
@ -276,10 +277,12 @@ int GuiFontMetrics::width(docstring const & s) const
|
|||||||
*/
|
*/
|
||||||
int w = 0;
|
int w = 0;
|
||||||
// is the string a single character from a math font ?
|
// is the string a single character from a math font ?
|
||||||
bool const math_char = s.length() == 1 && font_.styleName() == "LyX";
|
// we have to also explicitly check for the family, see bug 13087
|
||||||
|
bool const math_char = s.length() == 1
|
||||||
|
&& (font_.styleName() == "LyX" || isMathFamily(font_.family()));
|
||||||
if (math_char) {
|
if (math_char) {
|
||||||
QString const qs = toqstr(s);
|
QString const qs = toqstr(s);
|
||||||
int br_width = metrics_.boundingRect(qs).width();
|
int br_width = rbearing(s[0]);
|
||||||
#if QT_VERSION >= 0x050b00
|
#if QT_VERSION >= 0x050b00
|
||||||
int s_width = metrics_.horizontalAdvance(qs);
|
int s_width = metrics_.horizontalAdvance(qs);
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user