1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtGui module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QDISTANCEFIELD_H
41#define QDISTANCEFIELD_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists purely as an
48// implementation detail. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include <QtGui/private/qtguiglobal_p.h>
55#include <qrawfont.h>
56#include <private/qfontengine_p.h>
57#include <QtCore/qshareddata.h>
58#include <QtCore/qglobal.h>
59#include <QLoggingCategory>
60
61QT_BEGIN_NAMESPACE
62
63bool Q_GUI_EXPORT qt_fontHasNarrowOutlines(const QRawFont &f);
64bool Q_GUI_EXPORT qt_fontHasNarrowOutlines(QFontEngine *fontEngine);
65
66int Q_GUI_EXPORT QT_DISTANCEFIELD_BASEFONTSIZE(bool narrowOutlineFont);
67int Q_GUI_EXPORT QT_DISTANCEFIELD_TILESIZE(bool narrowOutlineFont);
68int Q_GUI_EXPORT QT_DISTANCEFIELD_SCALE(bool narrowOutlineFont);
69int Q_GUI_EXPORT QT_DISTANCEFIELD_RADIUS(bool narrowOutlineFont);
70int Q_GUI_EXPORT QT_DISTANCEFIELD_HIGHGLYPHCOUNT();
71
72class Q_GUI_EXPORT QDistanceFieldData : public QSharedData
73{
74public:
75 QDistanceFieldData() : glyph(0), width(0), height(0), nbytes(0), data(nullptr) {}
76 QDistanceFieldData(const QDistanceFieldData &other);
77 ~QDistanceFieldData();
78
79 static QDistanceFieldData *create(const QSize &size);
80 static QDistanceFieldData *create(const QPainterPath &path, bool doubleResolution);
81
82 glyph_t glyph;
83 int width;
84 int height;
85 int nbytes;
86 uchar *data;
87};
88
89class Q_GUI_EXPORT QDistanceField
90{
91public:
92 QDistanceField();
93 QDistanceField(int width, int height);
94 QDistanceField(const QRawFont &font, glyph_t glyph, bool doubleResolution = false);
95 QDistanceField(QFontEngine *fontEngine, glyph_t glyph, bool doubleResolution = false);
96 QDistanceField(const QPainterPath &path, glyph_t glyph, bool doubleResolution = false);
97
98 bool isNull() const;
99
100 glyph_t glyph() const;
101 void setGlyph(const QRawFont &font, glyph_t glyph, bool doubleResolution = false);
102 void setGlyph(QFontEngine *fontEngine, glyph_t glyph, bool doubleResolution = false);
103
104 int width() const;
105 int height() const;
106
107 QDistanceField copy(const QRect &rect = QRect()) const;
108 inline QDistanceField copy(int x, int y, int w, int h) const
109 { return copy(QRect(x, y, w, h)); }
110
111 uchar *bits();
112 const uchar *bits() const;
113 const uchar *constBits() const;
114
115 uchar *scanLine(int);
116 const uchar *scanLine(int) const;
117 const uchar *constScanLine(int) const;
118
119 QImage toImage(QImage::Format format = QImage::Format_ARGB32_Premultiplied) const;
120
121private:
122 QDistanceField(QDistanceFieldData *data);
123 QSharedDataPointer<QDistanceFieldData> d;
124
125 friend class QDistanceFieldData;
126};
127
128QT_END_NAMESPACE
129
130#endif // QDISTANCEFIELD_H
131