summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/kernel/tqfontengine_p.h2
-rw-r--r--src/kernel/tqfontengine_x11.cpp4
-rw-r--r--src/kernel/tqscriptengine.cpp6
-rw-r--r--src/kernel/tqscriptengine_x11.cpp28
4 files changed, 28 insertions, 12 deletions
diff --git a/src/kernel/tqfontengine_p.h b/src/kernel/tqfontengine_p.h
index e7d7f2162..52bc66d7c 100644
--- a/src/kernel/tqfontengine_p.h
+++ b/src/kernel/tqfontengine_p.h
@@ -434,7 +434,7 @@ public:
void selectScript(unsigned int script, const Features *features = 0);
bool shape(TQShaperItem *item, const unsigned int *properties = 0);
- bool positionAndAdd(TQShaperItem *item, bool doLogClusters = true);
+ bool positionAndAdd(TQShaperItem *item, int availableGlyphs, bool doLogClusters = true);
OTL_GlyphItem glyphs() const { return otl_buffer->in_string; }
int len() const { return otl_buffer->in_length; }
diff --git a/src/kernel/tqfontengine_x11.cpp b/src/kernel/tqfontengine_x11.cpp
index 1a7b95ebb..7f514f914 100644
--- a/src/kernel/tqfontengine_x11.cpp
+++ b/src/kernel/tqfontengine_x11.cpp
@@ -2428,7 +2428,7 @@ bool TQOpenType::shape(TQShaperItem *item, const unsigned int *properties)
return true;
}
-bool TQOpenType::positionAndAdd(TQShaperItem *item, bool doLogClusters)
+bool TQOpenType::positionAndAdd(TQShaperItem *item, int availableGlyphs, bool doLogClusters)
{
if (gpos) {
#ifdef TQ_WS_X11
@@ -2444,7 +2444,7 @@ bool TQOpenType::positionAndAdd(TQShaperItem *item, bool doLogClusters)
}
// make sure we have enough space to write everything back
- if (item->num_glyphs < (int)otl_buffer->in_length) {
+ if (availableGlyphs < (int)otl_buffer->in_length) {
item->num_glyphs = otl_buffer->in_length;
return false;
}
diff --git a/src/kernel/tqscriptengine.cpp b/src/kernel/tqscriptengine.cpp
index e9431463c..8c8fbe308 100644
--- a/src/kernel/tqscriptengine.cpp
+++ b/src/kernel/tqscriptengine.cpp
@@ -434,13 +434,14 @@ static bool hebrew_shape(TQShaperItem *item)
if (openType && openType->supportsScript(item->script)) {
openType->selectScript(item->script, hebrew_features);
+ const int availableGlyphs = item->num_glyphs;
if (item->font->stringToCMap(item->string->unicode()+item->from, item->length, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
heuristicSetGlyphAttributes(item);
openType->shape(item);
- return openType->positionAndAdd(item);
+ return openType->positionAndAdd(item, availableGlyphs);
}
#endif
@@ -1580,8 +1581,7 @@ static bool arabicSyriacOpenTypeShape(TQOpenType *openType, TQShaperItem *item,
*ot_ok = false;
return false;
}
- item->num_glyphs = nglyphs;
- return openType->positionAndAdd(item);
+ return openType->positionAndAdd(item, nglyphs);
}
#endif
diff --git a/src/kernel/tqscriptengine_x11.cpp b/src/kernel/tqscriptengine_x11.cpp
index 6d5429cb0..c54f6d6b1 100644
--- a/src/kernel/tqscriptengine_x11.cpp
+++ b/src/kernel/tqscriptengine_x11.cpp
@@ -69,12 +69,13 @@ static bool thaana_shape(TQShaperItem *item)
if (openType && openType->supportsScript(item->script)) {
openType->selectScript(TQFont::Thaana);
+ const int availableGlyphs = item->num_glyphs;
if (item->font->stringToCMap(item->string->unicode()+item->from, item->length, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
heuristicSetGlyphAttributes(item);
openType->shape(item);
- return openType->positionAndAdd(item);
+ return openType->positionAndAdd(item, availableGlyphs);
}
#endif
return basic_shape(item);
@@ -1550,6 +1551,9 @@ static bool indic_shape_syllable(TQOpenType *openType, TQShaperItem *item, bool
reph = i;
}
+#ifndef TQT_NO_XFTFREETYPE
+ const int availableGlyphs = item->num_glyphs;
+#endif
if (item->font->stringToCMap((const TQChar *)reordered.data(), len, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
@@ -1694,7 +1698,7 @@ static bool indic_shape_syllable(TQOpenType *openType, TQShaperItem *item, bool
}
}
- if (!openType->positionAndAdd(item, false))
+ if (!openType->positionAndAdd(item, availableGlyphs, false))
return false;
if (control) {
@@ -2056,6 +2060,9 @@ static bool tibetan_shape_syllable(TQOpenType *openType, TQShaperItem *item, boo
str = (TQChar *)reordered.data();
}
+#ifndef TQT_NO_XFTFREETYPE
+ const int availableGlyphs = item->num_glyphs;
+#endif
if (item->font->stringToCMap(str, len, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
@@ -2075,7 +2082,7 @@ static bool tibetan_shape_syllable(TQOpenType *openType, TQShaperItem *item, boo
openType->selectScript(TQFont::Tibetan, tibetan_features);
openType->shape(item);
- if (!openType->positionAndAdd(item, false))
+ if (!openType->positionAndAdd(item, availableGlyphs, false))
return false;
}
#endif
@@ -2708,6 +2715,9 @@ static bool khmer_shape_syllable(TQOpenType *openType, TQShaperItem *item)
} // switch
} // for
+#ifndef TQT_NO_XFTFREETYPE
+ const int availableGlyphs = item->num_glyphs;
+#endif
if (item->font->stringToCMap((const TQChar *)reordered, len, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
@@ -2745,7 +2755,7 @@ static bool khmer_shape_syllable(TQOpenType *openType, TQShaperItem *item)
}
openType->shape(item, where);
- if (!openType->positionAndAdd(item, false))
+ if (!openType->positionAndAdd(item, availableGlyphs, false))
return false;
} else
#endif
@@ -3215,6 +3225,9 @@ static bool myanmar_shape_syllable(TQOpenType *openType, TQShaperItem *item, boo
len += 2;
}
+#ifndef TQT_NO_XFTFREETYPE
+ const int availableGlyphs = item->num_glyphs;
+#endif
if (item->font->stringToCMap((const TQChar *)reordered, len, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
@@ -3252,7 +3265,7 @@ static bool myanmar_shape_syllable(TQOpenType *openType, TQShaperItem *item, boo
}
openType->shape(item, where);
- if (!openType->positionAndAdd(item, false))
+ if (!openType->positionAndAdd(item, availableGlyphs, false))
return false;
} else
#endif
@@ -3499,6 +3512,9 @@ static bool hangul_shape_syllable(TQOpenType *openType, TQShaperItem *item)
len = 1;
}
+#ifndef TQT_NO_XFTFREETYPE
+ const int availableGlyphs = item->num_glyphs;
+#endif
if (item->font->stringToCMap(ch, len, item->glyphs, item->advances,
&item->num_glyphs, item->flags & TQTextEngine::RightToLeft) != TQFontEngine::NoError)
return false;
@@ -3519,7 +3535,7 @@ static bool hangul_shape_syllable(TQOpenType *openType, TQShaperItem *item)
item->log_clusters = logClusters.data();
openType->shape(item);
- if (!openType->positionAndAdd(item, false))
+ if (!openType->positionAndAdd(item, availableGlyphs, false))
return false;
}