1 /*
2     SPDX-FileCopyrightText: 2003-2007 Craig Drummond <craig@kde.org>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #pragma once
7 
8 #include "KfiConstants.h"
9 #include "Misc.h"
10 #include "kfontinst_export.h"
11 #include <QUrl>
12 #include <fontconfig/fontconfig.h>
13 
14 #if (FC_VERSION < 20200)
15 
16 #define KFI_FC_NO_WIDTHS
17 #define KFI_FC_LIMITED_WEIGHTS
18 
19 #endif
20 
21 #ifdef KFI_FC_LIMITED_WEIGHTS
22 
23 #undef FC_WEIGHT_LIGHT
24 #define FC_WEIGHT_THIN 0
25 #define FC_WEIGHT_EXTRALIGHT 40
26 #define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT
27 #define FC_WEIGHT_LIGHT 50
28 #define FC_WEIGHT_BOOK 75
29 #define FC_WEIGHT_REGULAR 80
30 #define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR
31 #define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD
32 #define FC_WEIGHT_EXTRABOLD 205
33 #define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD
34 #define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK
35 
36 #endif
37 
38 class QString;
39 
40 namespace KFI
41 {
42 namespace FC
43 {
44 //
45 // Ideally only want this class to contain KFI_FC_NO_WIDTHS
46 #ifdef KFI_FC_NO_WIDTHS
47 #define KFI_FC_WIDTH_ULTRACONDENSED 50
48 #define KFI_FC_WIDTH_EXTRACONDENSED 63
49 #define KFI_FC_WIDTH_CONDENSED 75
50 #define KFI_FC_WIDTH_SEMICONDENSED 87
51 #define KFI_FC_WIDTH_NORMAL 100
52 #define KFI_FC_WIDTH_SEMIEXPANDED 113
53 #define KFI_FC_WIDTH_EXPANDED 125
54 #define KFI_FC_WIDTH_EXTRAEXPANDED 150
55 #define KFI_FC_WIDTH_ULTRAEXPANDED 200
56 #else
57 #define KFI_FC_WIDTH_ULTRACONDENSED FC_WIDTH_ULTRACONDENSED
58 #define KFI_FC_WIDTH_EXTRACONDENSED FC_WIDTH_EXTRACONDENSED
59 #define KFI_FC_WIDTH_CONDENSED FC_WIDTH_CONDENSED
60 #define KFI_FC_WIDTH_SEMICONDENSED FC_WIDTH_SEMICONDENSED
61 #define KFI_FC_WIDTH_NORMAL FC_WIDTH_NORMAL
62 #define KFI_FC_WIDTH_SEMIEXPANDED FC_WIDTH_SEMIEXPANDED
63 #define KFI_FC_WIDTH_EXPANDED FC_WIDTH_EXPANDED
64 #define KFI_FC_WIDTH_EXTRAEXPANDED FC_WIDTH_EXTRAEXPANDED
65 #define KFI_FC_WIDTH_ULTRAEXPANDED FC_WIDTH_ULTRAEXPANDED
66 #endif
67 
68 extern Q_DECL_EXPORT QUrl encode(const QString &name, quint32 style, const QString &file = QString(), int index = 0);
69 extern Q_DECL_EXPORT Misc::TFont decode(const QUrl &url);
70 extern Q_DECL_EXPORT QString getFile(const QUrl &url);
71 extern Q_DECL_EXPORT int getIndex(const QUrl &url);
72 extern Q_DECL_EXPORT int weight(int w); // round w to nearest fc weight
73 extern Q_DECL_EXPORT int width(int w); // round w to nearest fc width
74 extern Q_DECL_EXPORT int slant(int s); // round s to nearest fc slant
75 extern Q_DECL_EXPORT int spacing(int s); // round s to nearest fc spacing
76 extern Q_DECL_EXPORT int strToWeight(const QString &str, QString &newStr);
77 extern Q_DECL_EXPORT int strToWidth(const QString &str, QString &newStr);
78 extern Q_DECL_EXPORT int strToSlant(const QString &str);
79 extern Q_DECL_EXPORT quint32 createStyleVal(const QString &name);
createStyleVal(int weight,int width,int slant)80 inline Q_DECL_EXPORT quint32 createStyleVal(int weight, int width, int slant)
81 {
82     return ((weight & 0xFF) << 16) + ((width & 0xFF) << 8) + (slant & 0xFF);
83 }
84 extern Q_DECL_EXPORT QString styleValToStr(quint32 style);
85 extern Q_DECL_EXPORT void decomposeStyleVal(quint32 styleInfo, int &weight, int &width, int &slant);
86 extern Q_DECL_EXPORT quint32 styleValFromStr(const QString &style);
87 
88 extern Q_DECL_EXPORT QString getFcString(FcPattern *pat, const char *val, int index = 0);
89 #ifdef KFI_USE_TRANSLATED_FAMILY_NAME
90 extern Q_DECL_EXPORT QString getFcLangString(FcPattern *pat, const char *val, const char *valLang);
91 #endif
92 extern Q_DECL_EXPORT int getFcInt(FcPattern *pat, const char *val, int index = 0, int def = -1);
93 extern Q_DECL_EXPORT QString getName(const QString &file);
94 extern Q_DECL_EXPORT void getDetails(FcPattern *pat, QString &family, quint32 &styleVal, int &index, QString &foundry);
95 extern Q_DECL_EXPORT QString createName(FcPattern *pat);
96 extern Q_DECL_EXPORT QString createName(const QString &family, quint32 styleInfo);
97 extern Q_DECL_EXPORT QString createName(const QString &family, int weight, int width, int slant);
createName(const Misc::TFont & font)98 inline Q_DECL_EXPORT QString createName(const Misc::TFont &font)
99 {
100     return createName(font.family, font.styleInfo);
101 }
102 extern Q_DECL_EXPORT QString createStyleName(quint32 styleInfo);
103 extern Q_DECL_EXPORT QString createStyleName(int weight, int width, int slant);
104 extern Q_DECL_EXPORT QString weightStr(int w, bool emptyNormal = true);
105 extern Q_DECL_EXPORT QString widthStr(int w, bool emptyNormal = true);
106 extern Q_DECL_EXPORT QString slantStr(int s, bool emptyNormal = true);
107 extern Q_DECL_EXPORT QString spacingStr(int s);
108 extern Q_DECL_EXPORT bool bitmapsEnabled();
109 }
110 }
111