]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layout/GXLayoutEngine.cpp
ICU-531.48.tar.gz
[apple/icu.git] / icuSources / layout / GXLayoutEngine.cpp
index 809ecf7a4eed26851871e44c6aae2c695a15c012..c16229e3880fc28f56aac2749eb984b94307334c 100644 (file)
@@ -1,24 +1,25 @@
 
 /*
- * @(#)GXLayoutEngine.cpp      1.5 00/03/15
  *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
  *
  */
 
 #include "LETypes.h"
 #include "LayoutEngine.h"
 #include "GXLayoutEngine.h"
+#include "LEGlyphStorage.h"
 
 #include "MorphTables.h"
 
 U_NAMESPACE_BEGIN
 
-const char GXLayoutEngine::fgClassID=0;
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
 
-GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable
-    : LayoutEngine(fontInstance, scriptCode, languageCode), fMorphTable(morphTable)
+  GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader> &morphTable, LEErrorCode &success
+    : LayoutEngine(fontInstance, scriptCode, languageCode, 0, success), fMorphTable(morphTable)
 {
+  fMorphTable.orphan();
     // nothing else to do?
 }
 
@@ -28,7 +29,7 @@ GXLayoutEngine::~GXLayoutEngine()
 }
 
 // apply 'mort' table
-le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success)
+le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
 {
     if (LE_FAILURE(success)) {
         return 0;
@@ -39,25 +40,26 @@ le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset,
         return 0;
     }
 
-    mapCharsToGlyphs(chars, offset, count, false, rightToLeft, glyphs, charIndices, success);
+    mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success);
 
     if (LE_FAILURE(success)) {
         return 0;
     }
 
-    fMorphTable->process(glyphs, charIndices, count);
+    fMorphTable->process(fMorphTable, glyphStorage, success);
 
     return count;
 }
 
 // apply positional tables
-void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/, LEGlyphID glyphs[], le_int32 glyphCount, float positions[], LEErrorCode &success)
+void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
+                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
 {
     if (LE_FAILURE(success)) {
         return;
     }
 
-    if (chars == NULL || glyphs == NULL || positions == NULL || offset < 0 || count < 0 || glyphCount < 0) {
+    if (chars == NULL || offset < 0 || count < 0) {
         success = LE_ILLEGAL_ARGUMENT_ERROR;
         return;
     }