OSDN Git Service

require Freetype version 2.1.10+
authorIvailo Monev <xakepa10@laimg.moc>
Tue, 17 Dec 2019 02:34:10 +0000 (02:34 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Tue, 17 Dec 2019 02:34:10 +0000 (02:34 +0000)
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
CMakeLists.txt
src/gui/text/qfontengine_ft.cpp

index 323fb70..fc2b915 100644 (file)
@@ -283,7 +283,8 @@ set_package_properties(X11 PROPERTIES
     TYPE REQUIRED
 )
 
-find_package(Freetype)
+# v2.1.10+ required for FT_GlyphSlot_Embolden()
+find_package(Freetype 2.1.10)
 set_package_properties(Freetype PROPERTIES
     PURPOSE "Required for fonts configuration support"
     DESCRIPTION "Freely available software library to render fonts"
index e5bf45d..e6a1823 100644 (file)
 
 QT_BEGIN_NAMESPACE
 
-/*
- * Freetype 2.1.7 and earlier used width/height
- * for matching sizes in the BDF and PCF loaders.
- * This has been fixed for 2.1.8.
- */
-#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20105
-#define X_SIZE(face,i) ((face)->available_sizes[i].x_ppem)
-#define Y_SIZE(face,i) ((face)->available_sizes[i].y_ppem)
-#else
-#define X_SIZE(face,i) ((face)->available_sizes[i].width << 6)
-#define Y_SIZE(face,i) ((face)->available_sizes[i].height << 6)
-#endif
-
-/* FreeType 2.1.10 starts to provide FT_GlyphSlot_Embolden */
-#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20110
-#define Q_FT_GLYPHSLOT_EMBOLDEN(slot)   FT_GlyphSlot_Embolden(slot)
-#else
-#define Q_FT_GLYPHSLOT_EMBOLDEN(slot)
-#endif
-
 #define FLOOR(x)    ((x) & -64)
 #define CEIL(x)            (((x)+63) & -64)
 #define TRUNC(x)    ((x) >> 6)
@@ -273,7 +253,8 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id,
         }
 
         if (!FT_IS_SCALABLE(newFreetype->face) && newFreetype->face->num_fixed_sizes == 1)
-            FT_Set_Char_Size (face, X_SIZE(newFreetype->face, 0), Y_SIZE(newFreetype->face, 0), 0, 0);
+            FT_Set_Char_Size (face, newFreetype->face->available_sizes[0].x_ppem,
+                newFreetype->face->available_sizes[0].y_ppem, 0, 0);
 # if 0
         FcChar8 *name;
         FcPatternGetString(pattern, FC_FAMILY, 0, &name);
@@ -337,18 +318,18 @@ void QFreetypeFace::computeSize(const QFontDef &fontDef, int *xsize, int *ysize,
     if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) {
         int best = 0;
         for (int i = 1; i < face->num_fixed_sizes; i++) {
-            if (qAbs(*ysize -  Y_SIZE(face,i)) <
-                qAbs (*ysize - Y_SIZE(face, best)) ||
-                (qAbs (*ysize - Y_SIZE(face, i)) ==
-                 qAbs (*ysize - Y_SIZE(face, best)) &&
-                 qAbs (*xsize - X_SIZE(face, i)) <
-                 qAbs (*xsize - X_SIZE(face, best)))) {
+            if (qAbs(*ysize -  face->available_sizes[i].y_ppem) <
+                qAbs (*ysize - face->available_sizes[best].y_ppem) ||
+                (qAbs (*ysize - face->available_sizes[i].y_ppem) ==
+                 qAbs (*ysize - face->available_sizes[best].y_ppem) &&
+                 qAbs (*xsize - face->available_sizes[i].x_ppem) <
+                 qAbs (*xsize - face->available_sizes[best].x_ppem))) {
                 best = i;
             }
         }
-        if (FT_Set_Char_Size (face, X_SIZE(face, best), Y_SIZE(face, best), 0, 0) == 0) {
-            *xsize = X_SIZE(face, best);
-            *ysize = Y_SIZE(face, best);
+        if (FT_Set_Char_Size (face, face->available_sizes[best].x_ppem, face->available_sizes[best].y_ppem, 0, 0) == 0) {
+            *xsize = face->available_sizes[best].x_ppem;
+            *ysize = face->available_sizes[best].y_ppem;
         } else {
             int err = 1;
             if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && ysize == 0 && face->num_fixed_sizes >= 1) {
@@ -840,7 +821,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph,
         return 0;
 
     FT_GlyphSlot slot = face->glyph;
-    if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(slot);
+    if (embolden) FT_GlyphSlot_Embolden(slot);
     FT_Library library = qt_getFreetype();
 
     info.xOff = TRUNC(ROUND(slot->advance.x));