os/textandloc/fontservices/textshaperplugin/IcuSource/layout/GXLayoutEngine.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
sl@0
     2
/*
sl@0
     3
 *
sl@0
     4
 * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
sl@0
     5
 *
sl@0
     6
 */
sl@0
     7
sl@0
     8
#include "LETypes.h"
sl@0
     9
#include "LayoutEngine.h"
sl@0
    10
#include "GXLayoutEngine.h"
sl@0
    11
#include "LEGlyphStorage.h"
sl@0
    12
sl@0
    13
#include "MorphTables.h"
sl@0
    14
sl@0
    15
U_NAMESPACE_BEGIN
sl@0
    16
sl@0
    17
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
sl@0
    18
sl@0
    19
GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable) 
sl@0
    20
    : LayoutEngine(fontInstance, scriptCode, languageCode, 0), fMorphTable(morphTable)
sl@0
    21
{
sl@0
    22
    // nothing else to do?
sl@0
    23
}
sl@0
    24
sl@0
    25
GXLayoutEngine::~GXLayoutEngine()
sl@0
    26
{
sl@0
    27
    reset();
sl@0
    28
}
sl@0
    29
sl@0
    30
// apply 'mort' table
sl@0
    31
le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
sl@0
    32
{
sl@0
    33
    if (LE_FAILURE(success)) {
sl@0
    34
        return 0;
sl@0
    35
    }
sl@0
    36
sl@0
    37
    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
sl@0
    38
        success = LE_ILLEGAL_ARGUMENT_ERROR;
sl@0
    39
        return 0;
sl@0
    40
    }
sl@0
    41
sl@0
    42
    mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success);
sl@0
    43
sl@0
    44
    if (LE_FAILURE(success)) {
sl@0
    45
        return 0;
sl@0
    46
    }
sl@0
    47
sl@0
    48
    fMorphTable->process(glyphStorage);
sl@0
    49
sl@0
    50
    return count;
sl@0
    51
}
sl@0
    52
sl@0
    53
// apply positional tables
sl@0
    54
void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
sl@0
    55
                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
sl@0
    56
{
sl@0
    57
    if (LE_FAILURE(success)) {
sl@0
    58
        return;
sl@0
    59
    }
sl@0
    60
sl@0
    61
    if (chars == NULL || offset < 0 || count < 0) {
sl@0
    62
        success = LE_ILLEGAL_ARGUMENT_ERROR;
sl@0
    63
        return;
sl@0
    64
    }
sl@0
    65
sl@0
    66
    // FIXME: no positional processing yet...
sl@0
    67
}
sl@0
    68
sl@0
    69
U_NAMESPACE_END