Add environment variable QT_DISTANCEFIELD
DistanceField technique was not intended for rendering very large glyph. In some case need the qEnvironmentVariable. Change-Id: Ied11ed00f0c67bae3c92155e17721d8d2f224cca Task-number: QTBUG-51714 Reviewed-by: Aram So <aram.so@lge.com> Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
This commit is contained in:
parent
2ec7f2cfed
commit
a7fc1cef91
@ -45,6 +45,8 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
Q_LOGGING_CATEGORY(lcDistanceField, "qt.distanceField");
|
||||
|
||||
namespace
|
||||
{
|
||||
enum FillHDir
|
||||
@ -732,8 +734,45 @@ static bool imageHasNarrowOutlines(const QImage &im)
|
||||
return minHThick == 1 || minVThick == 1;
|
||||
}
|
||||
|
||||
static int QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE = 54;
|
||||
static int QT_DISTANCEFIELD_DEFAULT_TILESIZE = 64;
|
||||
static int QT_DISTANCEFIELD_DEFAULT_SCALE = 16;
|
||||
static int QT_DISTANCEFIELD_DEFAULT_RADIUS = 80;
|
||||
static int QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT = 2000;
|
||||
|
||||
static void initialDistanceFieldFactor()
|
||||
{
|
||||
static bool initialized = false;
|
||||
if (initialized)
|
||||
return;
|
||||
initialized = true;
|
||||
|
||||
if (qEnvironmentVariableIsSet("QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE")) {
|
||||
QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE = qEnvironmentVariableIntValue("QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE");
|
||||
qCDebug(lcDistanceField) << "set the QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE:" << QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE;
|
||||
}
|
||||
|
||||
if (qEnvironmentVariableIsSet("QT_DISTANCEFIELD_DEFAULT_TILESIZE")) {
|
||||
QT_DISTANCEFIELD_DEFAULT_TILESIZE = qEnvironmentVariableIntValue("QT_DISTANCEFIELD_DEFAULT_TILESIZE");
|
||||
qCDebug(lcDistanceField) << "set the QT_DISTANCEFIELD_DEFAULT_TILESIZE:" << QT_DISTANCEFIELD_DEFAULT_TILESIZE;
|
||||
}
|
||||
if (qEnvironmentVariableIsSet("QT_DISTANCEFIELD_DEFAULT_SCALE")) {
|
||||
QT_DISTANCEFIELD_DEFAULT_SCALE = qEnvironmentVariableIntValue("QT_DISTANCEFIELD_DEFAULT_SCALE");
|
||||
qCDebug(lcDistanceField) << "set the QT_DISTANCEFIELD_DEFAULT_SCALE:" << QT_DISTANCEFIELD_DEFAULT_SCALE;
|
||||
}
|
||||
if (qEnvironmentVariableIsSet("QT_DISTANCEFIELD_DEFAULT_RADIUS")) {
|
||||
QT_DISTANCEFIELD_DEFAULT_RADIUS = qEnvironmentVariableIntValue("QT_DISTANCEFIELD_DEFAULT_RADIUS");
|
||||
qDebug(lcDistanceField) << "set the QT_DISTANCEFIELD_DEFAULT_RADIUS:" << QT_DISTANCEFIELD_DEFAULT_RADIUS;
|
||||
}
|
||||
if (qEnvironmentVariableIsSet("QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT")) {
|
||||
QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT = qEnvironmentVariableIntValue("QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT");
|
||||
qCDebug(lcDistanceField) << "set the QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT:" << QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT;
|
||||
}
|
||||
}
|
||||
|
||||
bool qt_fontHasNarrowOutlines(QFontEngine *fontEngine)
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
QFontEngine *fe = fontEngine->cloneWithSize(QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE);
|
||||
if (!fe)
|
||||
return false;
|
||||
@ -753,6 +792,7 @@ bool qt_fontHasNarrowOutlines(QFontEngine *fontEngine)
|
||||
bool qt_fontHasNarrowOutlines(const QRawFont &f)
|
||||
{
|
||||
QRawFont font = f;
|
||||
initialDistanceFieldFactor();
|
||||
font.setPixelSize(QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE);
|
||||
if (!font.isValid())
|
||||
return false;
|
||||
@ -765,6 +805,51 @@ bool qt_fontHasNarrowOutlines(const QRawFont &f)
|
||||
QRawFont::PixelAntialiasing));
|
||||
}
|
||||
|
||||
int QT_DISTANCEFIELD_BASEFONTSIZE(bool narrowOutlineFont)
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
|
||||
if (Q_UNLIKELY(narrowOutlineFont))
|
||||
return QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE * 2;
|
||||
else
|
||||
return QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE;
|
||||
}
|
||||
|
||||
int QT_DISTANCEFIELD_TILESIZE(bool narrowOutlineFont)
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
|
||||
if (Q_UNLIKELY(narrowOutlineFont))
|
||||
return QT_DISTANCEFIELD_DEFAULT_TILESIZE * 2;
|
||||
else
|
||||
return QT_DISTANCEFIELD_DEFAULT_TILESIZE;
|
||||
}
|
||||
|
||||
int QT_DISTANCEFIELD_SCALE(bool narrowOutlineFont)
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
|
||||
if (Q_UNLIKELY(narrowOutlineFont))
|
||||
return QT_DISTANCEFIELD_DEFAULT_SCALE / 2;
|
||||
else
|
||||
return QT_DISTANCEFIELD_DEFAULT_SCALE;
|
||||
}
|
||||
|
||||
int QT_DISTANCEFIELD_RADIUS(bool narrowOutlineFont)
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
|
||||
if (Q_UNLIKELY(narrowOutlineFont))
|
||||
return QT_DISTANCEFIELD_DEFAULT_RADIUS / 2;
|
||||
else
|
||||
return QT_DISTANCEFIELD_DEFAULT_RADIUS;
|
||||
}
|
||||
|
||||
int QT_DISTANCEFIELD_HIGHGLYPHCOUNT()
|
||||
{
|
||||
initialDistanceFieldFactor();
|
||||
return QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT;
|
||||
}
|
||||
|
||||
QDistanceFieldData::QDistanceFieldData(const QDistanceFieldData &other)
|
||||
: QSharedData(other)
|
||||
|
@ -54,31 +54,20 @@
|
||||
#include <qrawfont.h>
|
||||
#include <private/qfontengine_p.h>
|
||||
#include <QtCore/qshareddata.h>
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <QLoggingCategory>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#define QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE 54
|
||||
#define QT_DISTANCEFIELD_DEFAULT_TILESIZE 64
|
||||
#define QT_DISTANCEFIELD_DEFAULT_SCALE 16
|
||||
#define QT_DISTANCEFIELD_DEFAULT_RADIUS 80
|
||||
#define QT_DISTANCEFIELD_HIGHGLYPHCOUNT 2000
|
||||
|
||||
#define QT_DISTANCEFIELD_BASEFONTSIZE(NarrowOutlineFont) \
|
||||
(NarrowOutlineFont ? QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE * 2 : \
|
||||
QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE)
|
||||
#define QT_DISTANCEFIELD_TILESIZE(NarrowOutlineFont) \
|
||||
(NarrowOutlineFont ? QT_DISTANCEFIELD_DEFAULT_TILESIZE * 2 : \
|
||||
QT_DISTANCEFIELD_DEFAULT_TILESIZE)
|
||||
#define QT_DISTANCEFIELD_SCALE(NarrowOutlineFont) \
|
||||
(NarrowOutlineFont ? QT_DISTANCEFIELD_DEFAULT_SCALE / 2 : \
|
||||
QT_DISTANCEFIELD_DEFAULT_SCALE)
|
||||
#define QT_DISTANCEFIELD_RADIUS(NarrowOutlineFont) \
|
||||
(NarrowOutlineFont ? QT_DISTANCEFIELD_DEFAULT_RADIUS / 2 : \
|
||||
QT_DISTANCEFIELD_DEFAULT_RADIUS)
|
||||
|
||||
bool Q_GUI_EXPORT qt_fontHasNarrowOutlines(const QRawFont &f);
|
||||
bool Q_GUI_EXPORT qt_fontHasNarrowOutlines(QFontEngine *fontEngine);
|
||||
|
||||
int Q_GUI_EXPORT QT_DISTANCEFIELD_BASEFONTSIZE(bool narrowOutlineFont);
|
||||
int Q_GUI_EXPORT QT_DISTANCEFIELD_TILESIZE(bool narrowOutlineFont);
|
||||
int Q_GUI_EXPORT QT_DISTANCEFIELD_SCALE(bool narrowOutlineFont);
|
||||
int Q_GUI_EXPORT QT_DISTANCEFIELD_RADIUS(bool narrowOutlineFont);
|
||||
int Q_GUI_EXPORT QT_DISTANCEFIELD_HIGHGLYPHCOUNT();
|
||||
|
||||
class Q_GUI_EXPORT QDistanceFieldData : public QSharedData
|
||||
{
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user