r24466 by jghali - Add utility functions to retrieve glyph CIDs from glyph indexes
scribus-commit
scribus-commit at lists.scribus.net
Wed Feb 10 22:41:36 UTC 2021
Author: jghali
Date: Wed Feb 10 22:41:36 2021
New Revision: 24466
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24466
Log:
Add utility functions to retrieve glyph CIDs from glyph indexes
Modified:
trunk/Scribus/scribus/fonts/ftface.cpp
trunk/Scribus/scribus/fonts/ftface.h
trunk/Scribus/scribus/fonts/scface.cpp
trunk/Scribus/scribus/fonts/scface.h
Modified: trunk/Scribus/scribus/fonts/ftface.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24466&path=/trunk/Scribus/scribus/fonts/ftface.cpp
==============================================================================
--- trunk/Scribus/scribus/fonts/ftface.cpp (original)
+++ trunk/Scribus/scribus/fonts/ftface.cpp Wed Feb 10 22:41:36 2021
@@ -198,6 +198,16 @@
return gl;
}
+ScFace::cid_type FtFace::glyphIndexToCID(ScFace::gid_type index) const
+{
+ FT_Face face = ftFace();
+
+ ScFace::cid_type cid = 0;
+ FT_Error err = FT_Get_CID_From_Glyph_Index(face, index, &cid);
+ if (err)
+ cid = index;
+ return cid;
+}
void FtFace::loadGlyph(ScFace::gid_type gl) const
{
Modified: trunk/Scribus/scribus/fonts/ftface.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24466&path=/trunk/Scribus/scribus/fonts/ftface.h
==============================================================================
--- trunk/Scribus/scribus/fonts/ftface.h (original)
+++ trunk/Scribus/scribus/fonts/ftface.h Wed Feb 10 22:41:36 2021
@@ -82,6 +82,7 @@
//FIXME QMap<QString,QString> fontDictionary(qreal sz=1.0) const;
ScFace::gid_type char2CMap(uint ch) const override;
+ ScFace::cid_type glyphIndexToCID(ScFace::gid_type index) const override;
// GlyphMetrics glyphBBox (gid_type gl, qreal sz) const;
Modified: trunk/Scribus/scribus/fonts/scface.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24466&path=/trunk/Scribus/scribus/fonts/scface.cpp
==============================================================================
--- trunk/Scribus/scribus/fonts/scface.cpp (original)
+++ trunk/Scribus/scribus/fonts/scface.cpp Wed Feb 10 22:41:36 2021
@@ -26,7 +26,6 @@
hb_font_destroy(reinterpret_cast<hb_font_t*>(m_hbFont));
m_hbFont = nullptr;
}
-
static hb_blob_t* referenceTable(hb_face_t*, hb_tag_t tag, void *userData)
{
@@ -94,12 +93,10 @@
return false;
}
-
QMap<QString,QString> ScFace::ScFaceData::fontDictionary(qreal /*sz*/) const
{
return QMap<QString, QString>();
}
-
GlyphMetrics ScFace::ScFaceData::glyphBBox(gid_type gl, qreal sz) const
{
@@ -120,7 +117,6 @@
return res;
}
-
qreal ScFace::ScFaceData::glyphWidth(gid_type gl, qreal size) const
{
if (gl >= CONTROL_GLYPHS)
@@ -129,7 +125,6 @@
loadGlyph(gl);
return m_glyphWidth[gl] * size;
}
-
FPointArray ScFace::ScFaceData::glyphOutline(gid_type gl, qreal size) const
{
@@ -143,7 +138,6 @@
return res;
}
-
FPoint ScFace::ScFaceData::glyphOrigin(gid_type gl, qreal size) const
{
if (gl >= CONTROL_GLYPHS)
@@ -153,7 +147,6 @@
const struct GlyphData & res(m_glyphOutline[gl]);
return FPoint(res.x, res.y) * size;
}
-
/*****
ScFace lifecycle: unchecked -> loaded -> glyphs checked
@@ -179,7 +172,6 @@
m_m->usage = 0;
}
-
ScFace::ScFace(ScFaceData* data) : m_m(data)
{
++(m_m->refs);
@@ -200,7 +192,6 @@
m_m = nullptr;
}
}
-
ScFace& ScFace::operator=(const ScFace& other)
{
@@ -219,7 +210,6 @@
return *this;
}
-
/** two ScFaces are equal if they either are both NULLFACEs or they
agree on family, style, variant and fontpath
*/
@@ -235,7 +225,6 @@
&& m_m-> faceIndex == other.m_m->faceIndex) );
}
-
const ScFace& ScFace::none()
{
static ScFace NONE;
@@ -381,14 +370,12 @@
m_m->usage++;
}
-
void ScFace::decreaseUsage() const
{
if (m_m->usage == 1)
unload();
m_m->usage--;
}
-
void ScFace::unload() const
{
@@ -418,6 +405,7 @@
return hyphenGlyph();
return 0;
}
+
ScFace::gid_type ScFace::hyphenGlyph() const
{
// Try the typographic hyphen first, then the hyphen-minus
@@ -463,6 +451,14 @@
return gl;
}
+ScFace::cid_type ScFace::glyphIndexToCID(gid_type index) const
+{
+ if (m_m->status == ScFace::UNKNOWN)
+ m_m->load();
+
+ cid_type cid = m_m->glyphIndexToCID(index);
+ return cid;
+}
bool ScFace::canRender(QChar ch) const
{
@@ -486,14 +482,12 @@
return m_m->embedFont(str);
}
-
bool ScFace::glyphNames(FaceEncoding& gList)
{
if (m_m->status == ScFace::UNKNOWN)
m_m->load();
return m_m->glyphNames(gList);
}
-
void ScFace::rawData(QByteArray & bb)
{
Modified: trunk/Scribus/scribus/fonts/scface.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=24466&path=/trunk/Scribus/scribus/fonts/scface.h
==============================================================================
--- trunk/Scribus/scribus/fonts/scface.h (original)
+++ trunk/Scribus/scribus/fonts/scface.h Wed Feb 10 22:41:36 2021
@@ -84,6 +84,7 @@
// handled by freetype: PFB_MAC, DFONT, HQX, MACBIN,
SFNT, TTCF, UNKNOWN_FORMAT };
+ typedef uint cid_type;
typedef uint gid_type;
typedef uint ucs4_type;
struct GlyphEncoding
@@ -194,6 +195,7 @@
virtual qreal strokeWidth(qreal /*sz*/) const { return 0.1; }
virtual qreal maxAdvanceWidth(qreal sz) const { return sz; }
virtual gid_type char2CMap(uint /*ch*/) const { return 0; }
+ virtual cid_type glyphIndexToCID(ScFace::gid_type index) const { return index; }
virtual QMap<QString,QString> fontDictionary(qreal sz=1.0) const;
virtual GlyphMetrics glyphBBox(gid_type gl, qreal sz) const;
virtual bool embedFont(QByteArray &/*str*/) const { return false; }
@@ -396,6 +398,9 @@
/// test if the face can render this char
bool canRender(QChar ch) const;
+ // translate glyph index to CID (OpenType and CID fonts only)
+ cid_type glyphIndexToCID(gid_type index) const;
+
/// translate unicode to glyph index
gid_type char2CMap(uint ch) const;
More information about the scribus-commit
mailing list